- ベストアンサー
VBAの操作に関する質問
- VBAの操作でSheet2に特定の条件でデータをコピーする際に、毎行追加行が挿入される現象が発生しています。アドバイスをお願いできますか?
- VBAを使用して特定の条件でSheet1のデータをSheet2にコピーする際に、毎行追加行が挿入されてしまう問題が発生しています。解決方法を教えてください。
- VBAを使ってSheet1からSheet2に特定の条件でデータをコピーする処理を行っていますが、追加行が挿入されてしまうという現象が起きます。どのように修正すれば良いでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
取りあえずこんな感じで作ってみました。 Sub Samsple() Dim rRange As Range Dim vInsertDat() As Variant Dim nCount, sAddress, i With Worksheets("Sheet2") 'Sheet1からSheet2への貼り付け(結合したまま) Worksheets("Sheet1").Columns("A:B").Copy .Range("A1").PasteSpecial '結合セルの処理 nCount = 0 For Each rRange In .UsedRange If rRange.MergeCells Then '結合セルの一番下の行と値を配列に保存 nCount = nCount + 1 ReDim Preserve vInsertDat(1, nCount) vInsertDat(0, nCount) = rRange.MergeArea.Item(rRange.MergeArea.Count).Row vInsertDat(1, nCount) = rRange.Value '結合セルをばらして結合セルの全てに「OK」と入れる sAddress = rRange.MergeArea.Address rRange.UnMerge .Range(sAddress) = "OK" End If Next rRange '行の追加 For i = nCount To 1 Step -1 .Rows(vInsertDat(0, i) + 1).Insert .Cells(vInsertDat(0, i) + 1, 1) = vInsertDat(1, i) .Cells(vInsertDat(0, i) + 1, 2) = "Comp" Next i End With End Sub
補足
ありがとうございました。 ↓のような事をおこないたいです。 変更前(Sheet1); (D列) (E列) (K列) (V列) (W列) (X列) (Y列) (AF - AM列) 1 ABCDEF テーブル1 ABC456 テーブル2 ABC789 ABC000 テーブル4 2 ABCDEF (ブランク) ABC456 (ブランク) ABC789 ABC000 (ブランク) 3 123456 (ブランク) ABC456 テーブル3 ABC789 ABC000 テーブル5 4 123456 (ブランク) ABC456 (ブランク) ABC789 ABC000 (ブランク) . . ※Y1-Y2は結合セル、Y3-Y4は結合セル 変更後(Sheet2); 例では追加は3,4行目です。 (A列) (B列) (C列) (D列) (E列) (F列) (AF - AM列) (G列) 1 ABCDEF テーブル1 ABC456 テーブル2 ABC789 ABC000 "OK" 2 ABCDEF テーブル1 ABC456 テーブル2 ABC789 ABC000 "OK" 3 ABCDEF テーブル1 - テーブル2 ABC789 テーブル4 "Comp" 4 123456 テーブル1 ABC456 テーブル3 ABC789 ABC000 "OK" 5 123456 テーブル1 ABC456 テーブル3 ABC789 ABC000 "OK" 6 123456 テーブル1 - テーブル3 ABC789 テーブル5 "Como" . . ※追加は3、6行目です。 Sheet1(Y列)に値があれば、 Sheet2(G列)に対象行単位で"OK"コメントをコピーする。 必ず最後に行追加して結合セルの値、"Comp"コメントをコピーする. 現象はマージセルの処理でループしてしまいます。 ご意見をいただけないでしょうか? ----------------- コード; Option Explicit Sub Sample() Dim nRow, i, nCount, tmp, sAddress, rRange Dim vInsertDat() As Variant Worksheets("Sheet1").Range("D:E,K:K,V:Y,AF:AM").Copy With Worksheets("Sheet2") .Range("A1").PasteSpecial Paste:=xlPasteValues nRow = .Cells(Rows.Count, 1).End(xlUp).Row 'データのある最終行 'Y列("Sheet2"のG列)のデータ分行を追加 For i = nRow To 4 Step -1 'Y列("Sheet2"のG列)にデータがあるか If .Cells(i, 7) <> "" Then tmp = .Cells(i, 7) 'G列の保管 rRange = .Range("G:G") 'G列結合セルの処理 nCount = 0 For Each rRange In .UsedRange If rRange.MergeCells Then 'G列結合セルの一番下の行値を配列に保存 nCount = nCount + 1 ReDim Preserve vInsertDat(1, nCount) vInsertDat(0, nCount) = rRange.MergeArea.Item(rRange.MergeArea.Count).Row vInsertDat(1, nCount) = rRange.Value 'G列結合セルをばらして結合セルの全てに「OK」と入れる sAddress = rRange.MergeArea.Address rRange.UnMerge .Range(sAddress) = "OK" End If Next rRange '行の追加 .Rows(i).Copy .Rows(i).Insert .Cells(i + 1, 3) = "-" .Cells(i + 1, 6) = tmp .Cells(i + 1, 7) = "Comp" End If Next i 'Y列("Sheet2"のG列)の最後尾列(Q列)への移動 .Columns(7).Cut .Columns(17).Insert End With End Sub