- ベストアンサー
エクセルの列から行へコピーするBVA教えて下さい
エクセルのVBA(マクロ)について、素人なので教えてください。 下記のようなデータ変換を行がある限り変換するVBAマクロです 列1列2列3列4列5列6列7列8 社員1 A B C D E F G H 社員2 H I J K 社員3 L M 社員4 O P Q R ↓ 列1列2 社員1 A B 社員1 C D 社員1 E F 社員1 G H 社員2 H I 社員2 I J 社員3 L M 社員4 O P 社員4 Q R 違うエクセルシートへ行がある限り、コピーを繰り返す。 BVAの解説付きだと助かります
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No3の途中のコメントが 'Sheet1の二つのセルの結合データをSheet2にコピペ になっていましたが、 'Sheet1の二つのセルのデータをそれぞれ別セルにコピペ にしてください。そのままにしていました。
その他の回答 (3)
- piroin654
- ベストアンサー率75% (692/917)
>2列毎 シート2へコピーする方法 No1を少し変形 No1の最後のあたり、 Worksheets("Sheet2").Cells(L2, 2).Value = Worksheets("Sheet1").Cells(p, R2).Value & _ Worksheets("Sheet1").Cells(p, R2 + 1).Value を Worksheets("Sheet2").Cells(L2, 2).Value = Worksheets("Sheet1").Cells(p, R2).Value Worksheets("Sheet2").Cells(L2, 3).Value = Worksheets("Sheet1").Cells(p, R2 + 1).Value のように二つに分けて、別々のセルにコピペ Sub test7() Dim L1 As Long Dim L2 As Long Dim R1 As Long Dim R2 As Long Dim h As Long Dim i As Long Dim j As Long Dim k As Long Dim x As Long Dim p As Long 'Sheet1の各列の二つのセルの結合の数ほどSheet1のA列をSheet2にコピペ L1 = 1 R1 = 1 h = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To h For j = 1 To (Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column - 1) / 2 If Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column <> "" Then Worksheets("Sheet2").Cells(L1, 1).Value = Worksheets("Sheet1").Cells(i, 1).Value L1 = L1 + 1 End If Next j Next i 'Sheet1の二つのセルの結合データをSheet2にコピペ L2 = 1 x = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row For p = 1 To x For R2 = 2 To Sheets("Sheet1").Cells(p, Columns.Count).End(xlToLeft).Column - 1 Worksheets("Sheet2").Cells(L2, 2).Value = Worksheets("Sheet1").Cells(p, R2).Value Worksheets("Sheet2").Cells(L2, 3).Value = Worksheets("Sheet1").Cells(p, R2 + 1).Value R2 = R2 + 1 L2 = L2 + 1 Next R2 Next p End Sub なかなか鋭いところを目指していますね。
- piroin654
- ベストアンサー率75% (692/917)
>セルを結合しないで、sheet2へコピーする場合 二通り (1) No1との対比で Sub test5() Dim L1 As Long Dim L2 As Long Dim R1 As Long Dim R2 As Long Dim h As Long Dim i As Long Dim j As Long Dim k As Long Dim x As Long Dim p As Long 'Sheet1の各列のセルの数ほどSheet1のA列をSheet2にコピペ L1 = 1 R1 = 1 h = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To h For j = 1 To (Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column - 1) If Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column <> "" Then Worksheets("Sheet2").Cells(L1, 1).Value = Worksheets("Sheet1").Cells(i, 1).Value L1 = L1 + 1 End If Next j Next i 'Sheet1のセルのデータをSheet2にコピペ L2 = 1 x = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row For p = 1 To x For R2 = 2 To Sheets("Sheet1").Cells(p, Columns.Count).End(xlToLeft).Column Worksheets("Sheet2").Cells(L2, 2).Value = Worksheets("Sheet1").Cells(p, R2).Value L2 = L2 + 1 Next R2 Next p End Sub (2) 都度データを同時にコピペする方法 Sub test6() Dim L1 As Long Dim R1 As Long Dim h As Long Dim i As Long Dim j As Long 'Sheet1の各列のセルの数ほどSheet1のA列をSheet2にコピペ L1 = 1 R1 = 1 h = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To h For j = 1 To (Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column - 1) If Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column <> "" Then 'Sheet2にSheet1の社員名のコピペ Worksheets("Sheet2").Cells(L1, 1).Value = Worksheets("Sheet1").Cells(i, 1).Value 'セルのデータのコピペ Worksheets("Sheet2").Cells(L1, 2).Value = Worksheets("Sheet1").Cells(i, j + 1).Value L1 = L1 + 1 End If Next j Next i End Sub
補足
早速の回答ありがとうございます 上記参考にVBA勉強したいと思います 大変恐縮ですがもう一点追加で、、、 列A 列B 社員1 A B 社員1 C D 社員1 E F 社員1 G H 社員2 I J というように、2列毎 シート2へコピーする方法ご教授お願いしたいです 時間がある時で結構です
- piroin654
- ベストアンサー率75% (692/917)
解決したでしょうか。 一応、結合するペアが必ず存在することとしています。 データの列が奇数の場合は省いています。 以下を試して意図通りか確かめてみてください。 Sub test4() Dim L1 As Long Dim L2 As Long Dim R1 As Long Dim R2 As Long Dim h As Long Dim i As Long Dim j As Long Dim k As Long Dim x As Long Dim p As Long 'Sheet1の各列の二つのセルの結合の数ほどSheet1のA列をSheet2にコピペ L1 = 1 R1 = 1 h = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To h For j = 1 To (Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column - 1) / 2 If Sheets("Sheet1").Cells(i, Columns.Count).End(xlToLeft).Column <> "" Then Worksheets("Sheet2").Cells(L1, 1).Value = Worksheets("Sheet1").Cells(i, 1).Value L1 = L1 + 1 End If Next j Next i 'Sheet1の二つのセルの結合データをSheet2にコピペ L2 = 1 x = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row For p = 1 To x For R2 = 2 To Sheets("Sheet1").Cells(p, Columns.Count).End(xlToLeft).Column - 1 Worksheets("Sheet2").Cells(L2, 2).Value = Worksheets("Sheet1").Cells(p, R2).Value & _ Worksheets("Sheet1").Cells(p, R2 + 1).Value R2 = R2 + 1 L2 = L2 + 1 Next R2 Next p End Sub
補足
回答ありがとうございます 試してOKとなりました。解説も入れて頂き助かりました。 恐縮ですが、もう一点うかがいたいのですが、セルを結合しないで、sheet2へコピーする場合のマクロを教えて頂けないでしょうか セル1 セル2 社員1 A B 社員1 C D ・ ・ ・
お礼
早速の回答ありがとうございます VBA勉強していきたいと思います 本当に助かりました