• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:A列にあったものには1、C列にあったものには2)

VBAを使ってシート1のデータをシート2に変換する方法

このQ&Aのポイント
  • VBAを使用して、シート1のデータをシート2の形式に変換する方法を教えてください。
  • シート1の2行目以降のデータをシート2のB列につなげ、A列にはシート1の1行目に記載されている番号を付けたいです。
  • シート1のA列には1、C列には2、E列には3と番号を付けたいのですが、どのようにマクロを書けば良いでしょうか?

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

UsedRangeでそのシートで使用しているセル範囲が判りますので、For Eachでそのセル範囲をすべて見ていきます。 1行目、またはデータなしの時は処理なし、それ以外はSheet2のA列に列位置、B列に値を入れていきます。 最後にSheet1にソートをかけてお望みの並び方にして終了。 Sub Sample()   Dim rTarget As Range   Dim rOne  As Range   Dim nPos  As Long      Set rTarget = Sheets("Sheet1").UsedRange   With Sheets("Sheet2")     nPos = 1     For Each rOne In rTarget       If (rOne.Row <> 1) And (rOne.Value <> "") Then         .Cells(nPos, 1) = rOne.Column         .Cells(nPos, 2) = rOne.Value         nPos = nPos + 1       End If     Next rOne     If nPos > 1 Then       .Sort.SetRange Range("A1:B" & (nPos - 1))       .Sort.Header = xlNo       .Sort.Apply     End If   End With End Sub

iguigu_n
質問者

補足

ありがとうございます。 無事できました。 ソートに関しては、下記のような並びの規則で毎回行いたいのですが、マクロを走らせた時点でソートも反映させることはできないでしょうか? 1 aaa 1 bbb 1 ccc 2 abc 2 abcd 3 aaaa 3 bbbb 3 cccc 3 eeee

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

> ソートに関しては、下記のような並びの規則で毎回行いたいのですが、マクロを走らせた時点でソートも反映させることはできないでしょうか? マクロの中で最後にソートを行っているはずですが並び変わっていませんか? 並び変わっていないとしたらどのようになっていますか?

iguigu_n
質問者

お礼

すいません、もう1度実行してみたらうまくできました!

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

ANo.1です。 よくよく質問をみたら、Sheet2のA列に入れるのはSheet1の1行目に入っている値でしたね。 失礼しました。 以下のように変更してください。 .Cells(nPos, 1) = rOne.Column ↓ .Cells(nPos, 1) = Sheets("Sheet1").Cells(1, rOne.Column).Value

関連するQ&A