• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA 複数列を2列にまとめる)

EXCEL VBA 複数列を2列にまとめる

このQ&Aのポイント
  • データの複数列を2列にまとめる方法をExcel VBAで実現する方法をご紹介します。
  • 具体的なデータの例を使用して、複数列を2列にまとめる手順を解説します。
  • Excel VBAを使用することで、柔軟に列をまとめることができます。

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

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

作成例: sub macro1()  dim h as range  dim Target as range  dim n as long  dim w as worksheet ’準備  set w = activesheet  set target = w.range("A1").currentregion.offset(1,1)  worksheets.add after:=activesheet  range("A1:B1") = array("伝票","品目")  n = 1 ’転記  for each h in target  if h <> "" then   n = n + 1   cells(n, "A") = w.cells(h.row,1).text & "," & w.cells(1, h.column).value   cells(n, "B") = h.value  end if  next end sub

jr-junior
質問者

お礼

keithin 様 下手な質問文だったと思いますが、お察しいただき恐縮です。 おかげさまで、やりたいことができました。 また早々のご回答をいただき大変助かりました、誠にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

>2列にまとめる方法はございますでしょうか?VBAを希望しております。  ⇒期待値として5行目以降の平仄が合っていないのではないでしょうか。   VBAの知識がないのであれば丸投げ質問は、回答後に変更が発生したら対応が   とれないので、VBAを学習してから質問した方が良いと思う。   因みに2列の統合ですが以下の様な構成もありと思いますが如何でしょうか。    伝票1_品名1/品名1    伝票1_品名2/品名2    伝票1_品名3/品名3    伝票2_品名1/品名1    伝票2_品名2/品名2     ~    (空白は対象外)    伝票n_品名m/品名m  コード例ですが、2つのループ処理でデータの転記が可能です。   For 行 = 2 To 列最終行    For 列 = 2 To 行最終列     データ転記    NEXT 列   Next 行

jr-junior
質問者

お礼

mu2011 様 ご指摘ありがとうございます。 自分ができる範囲で作ったコードを載せた方が良かったですね!すみません。 また、ご提案もありがとうございます、参考にさせていただきます。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

品名の数が各行で一定数なら、エクセル関数の組み合わせで、できると思う。 しかし不定個数のようだから、関数では複雑になる。質問者は何処まで勉強して考えてやってみたのか。 ーー VBAでやれば素直な問題なので、書いておく。 こういう風に、データの組み換えなどしたくなったら、VBAは必須だというのが私の持論。 例データ A1:D4   伝票01 品名01 品名02 品名03 0011 みかん みかん りんご 1001 りんご いちご 1100 いちご みかん ぶどう (注)質問に丁寧に縦棒横棒で書いているが、こういう書き方(シートのセル範囲のコピペ)で、質問者に判るのでは 結果 J2:K9 0011品名01 みかん 0011品名02 みかん 0011品名03 りんご 1001品名01 りんご 1001品名02 いちご 1100品名01 いちご 1100品名02 みかん 1100品名03 ぶどう ーー コードは 標準モジュールに Sub test01() d = Range("A65536").End(xlUp).Row k = 2 For i = 2 To d r = Cells(i, "I").End(xlToLeft).Column For j = 2 To r Cells(k, 10) = Cells(i, "A") & Cells(1, j) Cells(k, 11) = Cells(i, j) k = k + 1 Next j Next i End Sub (注意) 同じシートのJ列から結果を出している。従って元データはI列までと仮定。そうでない場合1部手直しが必要。 他シートに結果を出すのは一部手直しが必要。 (VBAの回等が、質問者の意に沿うかどうか判らないので手抜き。)

jr-junior
質問者

お礼

imogashi様 for~next のネストはまだまだ組み立てるのが苦手なので大変勉強になりました。 丁寧なご回答いただき、ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう