VBA で複数のワークブックとシートのデータを 1 つの新しい Excel ファイルにコンパイルして照合する方法

VBA で複数のワークブックとシートのデータを 1 つの新しい Excel ファイルにコンパイルして照合する方法

異なるワークブックのデータを 1 つの Excel シートにコンパイルして照合しようとしています。2 つのワークブック (Secondtest1 と Secondtest2) から A1:D1 のデータを ThisWorkbook に取得しようとしています。これまでのコードは次のとおりです。

Sub collateData()

    Dim SourceArray
    Dim SheetName As String, SourceRange As String
    Dim TargetWorkbook As Workbook, sourceFile As Workbook
    Dim TargetSheet As Worksheet
    Dim i As Integer
    Dim LastRow As Long

    SourceArray = Array("H:\Secondtest1.xlsx", "H:\Secondtest2.xlsx")
    SheetName = "Sheet1"
    SourceRange = "A1:D1"
    Set TargetWorkbook = ThisWorkbook
    Set TargetSheet = TargetWorkbook.Sheets("Sheet1")
    For i = 0 To UBound(SourceArray)
        Set sourceFile = Workbooks.Open(SourceArray(i))
        **LastRow = TargetSheet.Cells(TargetSheet.Rows.Count, 1).End(x1Up).Row**
        With sourceFile
            .Sheets(SheetName).Range(SourceRange).Copy Destination:=TargetSheet.Range("A" & i & ":D" & i)

            .Close
        End With
    Next

End Sub

エラーが発生している行にアスタリスクを付けました。発生しているエラーは「アプリケーション定義またはオブジェクト定義のエラー」です。ご協力いただければ幸いです。

答え1

そうなるはずですxlUp(数字の「1」ではなく、小文字の「L」です)。

編集

いくつかのポイント:

  • 実稼働環境ではない場合でも、常にOption Explicitモジュールの先頭で を使用してください。これを行うと、コード内のエラーがすぐに指摘されます。
  • 命名規則を 1 つ選択し、それに一貫して従います (ほとんどの場合、大文字の単語を使用していますが、1 つの変数を として宣言していますsourceFile)。
  • 変数に使用される規則とは異なる規則を使用してプロシージャに名前を付けることを好む人もいます (それはあなた次第です)。
  • 入力ワークブックをさらに変更するつもりなく開いている場合は、次のようにReadOnly、 引数、および引数も使用することをお勧めします。UpdateLinks

    Workbooks.Open(SourceArray(i), ReadOnly:=False, UpdateLinks:=False)
    

    Falseを 渡すとUpdateLinks、更新リンク ダイアログ ボックスが表示されなくなります。

  • 値が変数の範囲内に収まることが確実な場合でも、Longの代わりにを使用してください。どこかで、VBA の最新バージョンではデータ型がより効率的になったと読みました。IntegerIntegerLong

関連情報