プロが教えるわが家の防犯対策術!

お世話になっております。
複数の各シートに行を追加したいです。
コードを考えてみました。
以下のコードで相違ないでしょうか。

Sub Test2()
Dim Wb1 As Workbook, Wb2 As Workbook
Dim Ws1 As Worksheet, Ws2 As Worksheet
Dim LastRow1 As Long, LastRow2 As Long
Dim sheetNames As Variant
Dim i As Integer

' ソースのWorkbookを定義
Set Wb1 = Workbooks("Book1.xlsm")
' ターゲットのWorkbookを定義
Set Wb2 = Workbooks("Book2.xlsm")

' シート名の配列を定義
sheetNames = Array("Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet6", "Sheet7", "Sheet8", "Sheet9", "Sheet10", "Sheet11", "Sheet12", "Sheet13", "Sheet14")

' 各シートにループ
For i = LBound(sheetNames) To UBound(sheetNames)
' ソースのWorksheetを定義
Set Ws1 = Wb1.Sheets(sheetNames(i))
' ターゲットのWorksheetを定義
Set Ws2 = Wb2.Sheets(sheetNames(i))

' 最終行を見つける
LastRow1 = Ws1.Cells(Ws1.Rows.Count, "C").End(xlUp).Row
LastRow2 = Ws2.Cells(Ws2.Rows.Count, "C").End(xlUp).Row

' コピーと挿入
Ws1.Rows("2:" & LastRow1).Copy
Ws2.Rows(LastRow2 + 1).Insert Shift:=xlDown

' クリップボードをクリア
Application.CutCopyMode = False

' オブジェクト参照を解放
Set Ws1 = Nothing
Set Ws2 = Nothing
Next i

' オブジェクト参照を解放
Set Wb1 = Nothing
Set Wb2 = Nothing
End Sub

ご回答をお待ちしております。
どうぞ宜しくお願い申し上げます。

A 回答 (2件)

実際に実行してみて、望んだ結果が得られればそれで良いと思います。


上記のマクロは、以下のことを前提に作成されていると理解しました。
1.マクロを格納しているブックは、Book1.xlsmでもBook2.xlsmでもない。それ以外のブックである。
2.このマクロを実行時、Book1.xlsmとBook2.xlsmは、手動でオープン済みである。

そうであれば、問題ありません。
    • good
    • 1
この回答へのお礼

助かりました

お礼日時:2024/03/06 23:14

このVBAスクリプトは、Book1.xlsm から Book2.xlsm へ複数のシートのデータをコピーして挿入するためのものです。

スクリプトは以下の手順に従っています:

Book1.xlsm と Book2.xlsm のワークブックを開きます。
Sheet2 から Sheet14 までの各シートに対してループ処理を行います。
各シートの列Cの最終行を見つけます。
Book1.xlsm の2行目から最終行までのデータをコピーし、Book2.xlsm の最終行の次に挿入します。
クリップボードをクリアして、オブジェクト参照を解放します。
スクリプトは正しく機能しているように見えますが、Application.CutCopyMode = False の後に Application.Wait または DoEvents を追加することで、挿入操作が完了するのを確実に待つことができます。これは特に大量のデータを扱う場合に有効です。

また、エラーハンドリングを追加することで、スクリプトの堅牢性を高めることができます。例えば、指定されたシート名が存在しない場合や、ワークブックが開かれていない場合にエラーメッセージを表示するなどです。
    • good
    • 1
この回答へのお礼

助かりました

お礼日時:2024/03/06 23:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A