• ベストアンサー

エクセルでA列をB列の数だけ縦に並べたデータ

添付画像を見ていただいて、A列の名前をB列の数だけ縦に並べたD列のようなデータを作りたいのですが、関数などでできるでしょうか。 詳しく質問を書きます A2が佐藤でB2が2なので佐藤を縦に2つ並べて、その下にA3が鈴木でB3が1なので鈴木を縦に1つ並べていくというものです。名前の数は100名前後になると思います、B列の数は1~4です。 D列のようなデータを作るために毎回コピー&ペーストをしています。 もし自動でできるようになれば仕事の能率が格段にアップすると思い質問をさせていただきました。 回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

D1やD2セルでもよいのですが、先の式よりも次の式を入力して下方にオートフィルドラッグコピーすればよいですね。 =IF(ROW(A1)>MAX(C:C),"",INDEX(A:A,IF(ROW(A1)<=B$2,2,IF(COUNTIF(C:C,ROW(A1)),MATCH(ROW(A1),C:C,0),MATCH(ROW(A1),C:C,1)+1))))

hi457215de
質問者

お礼

仕事の作業が楽にならないかと軽い気持ちで質問したものに二つも回答を返していただきありがとうございました。

その他の回答 (4)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.5

まぁどうやってもある程度複雑な式にはなってしまいますね。 D2に =IF(ROW(D1)>SUM(B:B),"",INDEX(A:A,MATCH(ROW(D1),SUBTOTAL(9,INDIRECT("B1:B"&ROW($B$1:$B$25)))+1,1)+1)) と記入し,必ずコントロールキーとシフトキーを押しながらEnterで入力,下向けにコピーして埋めておきます。 #別の方法 C2に =IF(B2="","",SUM($B$1:B1,1)) 以下コピーして備えておき D2に =IF(ROW(D1)>SUM(B:B),"",LOOKUP(ROW(D1),C:C,A:A)) と記入して下向けにコピーします。

hi457215de
質問者

お礼

長い時間かかっていた作業がほんの数秒になって驚いています。 正直何が書いてあるのか自分には理解できないのにコピーするだけで使わせていただけるのが申し訳ないです。 回答ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

D2セルに「=A2」と入力しておき、D3セルに以下の数式を入力し下方向にオートフィルコピーしてください。 =IF(ROWS($D$2:D2)>SUM($B$2:$B$100)-1,"",IF(COUNTIF($D$2:D2,D2)>INDEX($B$2:$B$100,MATCH(D2,$A$2:$A$100,0))-1,INDEX($A$2:$A$100,MATCH(D2,$A$2:$A$100,0)+1),D2))

hi457215de
質問者

お礼

回答ありがとうございます。 関数はオートSUMぐらいしかつかわないので、こんなことが出来ると知れて勉強になりました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! VBAになってしまいますが・・・ 一例です。 画像のようにデータは2行目以降にあるとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面がでますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long Application.ScreenUpdating = False For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If Cells(i, 2) <> 1 Then Rows(i + 1 & ":" & i + Cells(i, 2) - 1).Insert End If Next i For i = 2 To WorksheetFunction.Sum(Columns(2)) + 1 If Cells(i, 1) = "" Then Cells(i, 1) = Cells(i - 1, 1) End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 一旦マクロを実行すると、元に戻せませんので、別Sheetでマクロを試してみてください。 ご希望の方法でなかったらごめんなさいね。m(__)m

hi457215de
質問者

お礼

せっかく考えていただいたのに、自分の勉強不足でVBAやマクロが何のことか分からずもっとエクセルを勉強しようと思いました。回答ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

計算に負担を掛けない方法として作業列を作って対応することにします。 C2セルには次の式を入力して下方にオートフィルドラッグコピーします。 =IF(A2="","",SUM(B$2:B2)) D1セルには次の式を入力して下方にオートフィルドラッグコピーします。 =IF(ROW(A1)>MAX(C:C),"",INDEX(A$2:A$1000,IF(ROW(A1)<=B$2,1,IF(COUNTIF(C:C,ROW(A1)),MATCH(ROW(A1),C$2:C$1000,0),MATCH(ROW(A1),C$2:C$1000,1)+1)))) 作業列が目障りでしたら作業列を選んで右クリックし非表示を選択します。