- ベストアンサー
VBAを使ってシート1のデータをシート2に変換する方法
- VBAを使用して、シート1のデータをシート2の形式に変換する方法を教えてください。
- シート1の2行目以降のデータをシート2のB列につなげ、A列にはシート1の1行目に記載されている番号を付けたいです。
- シート1のA列には1、C列には2、E列には3と番号を付けたいのですが、どのようにマクロを書けば良いでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (2)
- mt2008
- ベストアンサー率52% (885/1701)
> ソートに関しては、下記のような並びの規則で毎回行いたいのですが、マクロを走らせた時点でソートも反映させることはできないでしょうか? マクロの中で最後にソートを行っているはずですが並び変わっていませんか? 並び変わっていないとしたらどのようになっていますか?
お礼
すいません、もう1度実行してみたらうまくできました!
- mt2008
- ベストアンサー率52% (885/1701)
ANo.1です。 よくよく質問をみたら、Sheet2のA列に入れるのはSheet1の1行目に入っている値でしたね。 失礼しました。 以下のように変更してください。 .Cells(nPos, 1) = rOne.Column ↓ .Cells(nPos, 1) = Sheets("Sheet1").Cells(1, rOne.Column).Value
補足
ありがとうございます。 無事できました。 ソートに関しては、下記のような並びの規則で毎回行いたいのですが、マクロを走らせた時点でソートも反映させることはできないでしょうか? 1 aaa 1 bbb 1 ccc 2 abc 2 abcd 3 aaaa 3 bbbb 3 cccc 3 eeee