アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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