
異なるワークブックのデータを 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 の最新バージョンではデータ型がより効率的になったと読みました。Integer
Integer
Long