ここから本文です

以下の動作ができなくて困っています。

tru********さん

2019/12/423:55:02

以下の動作ができなくて困っています。

長文ですが宜しくお願いします。


行は100行以上あります。

そしてA列に商品の名前があります。
(下の例では果物を例で出していますが、実際は何百種類もある所にフィルターをかけています。)

例えば

りんご
みかん
バナナ
みかん
りんご

みたいな感じですそれをマクロでフィルターを使用して「みかん」の行だけを抜き取りました。

ここからなのですが

例1

みかん 1 3 2
みかん 2 1 5
みかん 1 4 1

この様にそれぞれA列は同じなのですがB列以降は値が入っているセルと空欄のセルがバラバラにあります。

ここで言う「みかん」、すなわちフィルターされた行の数は1行の時もあれば10行になることもあります。

上の例1のようにB列以降のセルは例えば5行同じ商品があっても列でデータが2個以上になることはありません。

例2

みかん 1
みかん 2
みかん 1

例2の様にはならず、必ず1列に値が1個です。

これを重ねたいと言うのが正しいのかわからないのですが

例1で説明すると
(例3とします)

みかん 121 314 251

の様に商品名が同じものを1行にまとめたいです。

要は同じ商品名の行を1つにまとめたいだけです。

その際、それぞれの列は変えずに

「みかん」がA列に3つで、1行目から3行目まで空白だった列があるとすれば、詰めずに空白のままで残ってほしいです。
(例3みたいな感じになってほしいです。)

マクロで解決したいのですができるでしょうか?

表現として分かりにくい部分がありましたら、できるだけ分かりやすく追記させていただきますので宜しくお願いします。

閲覧数:
49
回答数:
2

違反報告

ベストアンサーに選ばれた回答

set********さん

2019/12/501:28:05

下の図のようなことでしょうか?
・一番上の図が、フィルタする前の状態で、1行目に数式を入れているのですが、何も表示されません。
・それ以下が「りんご」「みかん」「ばなな」の順にフィルタをかけた状態で、1行目に、フィルタをかけた商品名と各列の値(数値)を1列に表示しています。

①A1セルには、
・ =IF(COUNTA(A3:A10)=SUBTOTAL(3,A3:A10),"",INDEX(A3:A10,MATCH(1,INDEX(SUBTOTAL(3,INDIRECT("A"&ROW(A3:A10))),),0)))
の式を入れ、
②B1セルには、
・ =IF(COUNTA(A3:A10)=SUBTOTAL(3,A3:A10),"",SUBTOTAL(9,B3:B10))
の式を入れた上で、
③「セルの書式設定」の「ユーザー定義」で # と設定して、
④J1セルまで右にオートフィル(コピー)しています。

下の図のようなことでしょうか?...

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/12/5 22:11:20

本当に助かりましたm(__)m

一気に他の悩みまで消えました!

画像まで準備していただきありがとうございましたm(__)m

ベストアンサー以外の回答

1〜1件/1件中

mit********さん

2019/12/509:43:30

マクロで対応することでもないでしょう。
作業列を使って関数式で十分対応できる内容です。
フィルターの操作などは関数式で自動で表を作りその表を基にお望みのデータを並べる操作を自動で行うことができます。並べるデータはすべての商品について一度に表示できますので一つの商品に限ってということではなく対応することにします。
始めのデータがシート1に有ってA2セルから下方に商品名がB列、C列、D列にはその商品についての数値が入力された表とします。
シート1のH2セルには次の式を入力して下方にドラッグコピーします。

=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,ROUNDDOWN(MAX(H$1:H1),-3)+1000,INDEX(H$1:H1,MATCH(A2,A$1:A1,0))+COUNTIF(A$2:A2,A2)))

シート2のご希望のデータを並べることにしますが、A列からD列までには商品ごとに並べ替えたシート1のデータを表示させることにします。
A2セルには次の式を入力してD2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。

=IFERROR(INDEX(Sheet1!$A:$D,MATCH(SMALL(Sheet1!$H:$H,ROW(A1)),Sheet1!$H:$H,0),COLUMN(A1)),"")

作業列ですがK2セルには次の式を入力して下方にドラッグコピーします。

=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=COUNTIF(A:A,A2),MAX(K$1:K1)+1,""))

L2セルには次の式を入力してN2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。

=IF(COLUMN(A1)>3,"",IF(COUNTIF($A$2:$A2,$A2)=1,B2,IF(AND(COUNTIF($A$2:$A3,$A2)>1,COUNTIF($A$2:$A2,$A2)<=COUNTIF($A:$A,$A2)),L1&B2,"")))

その後にご希望の表をF列からI列に表示するとしてF2セルには次の式を入力してI2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーすればよいでしょう。

=IF(COLUMN(A1)>3,"",IF(COUNTIF($A$2:$A2,$A2)=1,B2,IF(AND(COUNTIF($A$2:$A3,$A2)>1,COUNTIF($A$2:$A2,$A2)<=COUNTIF($A:$A,$A2)),L1&B2,"")))

なお、作業列が目障りでしたらそれらの列を選択して「非表示」にすればよいでしょう。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる