- ベストアンサー
グループ毎のデータを抽出する方法について
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
取りあえず ・A表のサイズは4×3 ・グループ名は項目開始の1行下。 ・B表の表示は3か所(グループ名は、F6 F10 F14) で作りました。(3つぐらいなら数式を別々にした方がいいです) G5: =IFERROR(OFFSET(B1,MATCH($F$6,$A:$A,0)-2,),"") 右下へコピペ。 G9: =IFERROR(OFFSET(B1,MATCH($F$10,$A:$A,0)-2,),"") 右下へコピペ。 G13 =IFERROR(OFFSET(B1,MATCH($F$14,$A:$A,0)-2,),"") 右下へコピペ。 セルの書式設定、ユーザー定義「#」 imogasi さんへの補足を読みましたが、画像と矛盾します。 (1)結合はしない。グループ名枠の先頭行とする。→先頭行でなく1行下です。 (2)行は最大10行とする。 ・A表は10行に満たない場合、開けておくのか、上に詰めるのか。(画像を見る限り、Aグループの様に開けてあります) ・B表は 4行でなく10行にするのか、それとものグループ名を入れる所は不定なのか。(不定にすると、数式はかなり複雑になるし、全部表示されない可能性もあります)
その他の回答 (2)
- HohoPapa
- ベストアンサー率65% (455/693)
- imogasi
- ベストアンサー率27% (4737/17069)
補足をお願い。 (1)A5:A8の、見えて居る「Aグループ」の各行について、セル結合しれないのだろうね。 (2)各グループの明細の行数は4と一定か? (3)関数で式を工夫する、のか。操作やVBAでは望まない? 関数では条件を付けて抜き出すのは1条件でも難しい(考え方と式が複雑予想) (4)>当データのグループ名を指定する 複数のグループを指定、らしいが、どのセルにどう書き込むのか (4)が加わるとさらに難しい。関数では繰り返い法ができない。IFで分けるとすると、式が長くなり、わかりにくい。 == 以下は、参考。 本件は、本件限りとして、VBAでやることだな。 下記は、急いでいて、荒っぽいが(十分なテスト未済)この程度の行数で出来るのかな? Sub test01() K = 5 'アウトプット開始行のセット p1: G = InputBox("グループ名=") If G = "END" Then Exit Sub r = Range("A1:A30").Find(G).Row MsgBox r For i = r To r + 3 '行の変化。4行分をセット For j = 6 To 9 '列変化。F,G,H,I列データをセット。 Cells(K, j) = Cells(i, j - 5) Next j K = K + 1 '次行へデータセット Next i K = K + 1 '区切りとして空白行を入れる GoTo p1 End Sub データ例 A3:D16 A A ああ 20 A B いい 30 A C うう 40 A D ええ 50 B E おお 70 B F かか 80 B G きき 90 B H くく 10 C J けけ 30 C K ここ 50 C L ささ 70 C M しし 90 ーー 上記VBAを実行時に、AとCを指定。 結果 F5:I13 A A ああ 20 A B いい 30 A C うう 40 A D ええ 50 C J けけ 30 C K ここ 50 C L ささ 70 C M しし 90
補足
(1)結合はしない。 グループ名枠の先頭行とする。 (2)行は最大10行とする。 (3)VBAは苦手なので関数で作成してほしい。 (4)グループ名は数字でも良い 例 Aグループは10番とかで OK グループ名の抽出先は枠の先頭行で良いです。 例 Bグループの場合はF5に表示 式は多少長くてもよいです。