まずは、確認。
集計元と集計先のブックは同じフォルダーにあるのですか。
(コードを見る限りは同じフォルダーですね。)
また、このマクロは集計先のファイルにあるのですね。
上記があっているとして、
DoループでDir関数を使ってファイル名を順次取得する部分と、Forループで各シートを順次取得して処理していく部分はいいですが、Forのループ変数(i)を行インデックスしているのが間違いですね。
別ブックへ移行するときに、1 に戻ってしまいますので、同じところを上書きすることになります。
入力行用の変数を別に用意して、カウントアップするようにする必用があります。
現状のコードをなるべく活かして、上記の点と、A列にブック名!シート名の入力も追加したコード例をとりあえず提示します。
VBA
1Sub 取り込みテスト()
2 Dim myPath As String
3 Dim myFile As String
4 Dim MyBook As Workbook
5 Dim CurRow As Long '入力する行インデックス
6 Dim i As Long
7
8 myPath = ThisWorkbook.Path
9 myFile = Dir(myPath & "\" & "*.xlsx")
10 CurRow = 1
11 Do Until myFile = ""
12 Workbooks.Open myPath & "\" & myFile
13' Sheets("Sheet1").Select ←不必要だし、「Sheet1」という名前のシートがなければエラーになる
14 For i = 1 To Worksheets.Count
15 Worksheets(i).Range("A2").Copy
16 ThisWorkbook.Worksheets("Sheet1").Cells(CurRow, 2).PasteSpecial _
17 xlPasteValuesAndNumberFormats
18 Worksheets(i).Range("D2").Copy
19 ThisWorkbook.Worksheets("Sheet1").Cells(CurRow, 3).PasteSpecial _
20 xlPasteValuesAndNumberFormats
21 ThisWorkbook.Worksheets("Sheet1").Cells(CurRow, 1).Value = myFile & "!" & Worksheets(i).Name
22 CurRow = CurRow + 1 '入力行をカウントアップ
23 Next i
24
25 myFile = Dir()
26 Loop
27
28End Sub
これで希望の動作にはなると思います。
ただ、アクティブブック、シートが移動するのでチラツキますし、
クリップボード経由なので処理も重いです。
また、ブックが開きっぱなしなのも気になりますね。
この辺りは完全の余地が大です。
ヒントを出しておきますと、
Application.ScreenUpdating を使って画面更新を抑止するとチラツキを抑制できます。
Copy PasteSpecial を使わなくても、代入という処理で値を入力できます。
追記
タッチの差で、imihitoさんに先を越されました。しかも、より完成度の高いコードです。
まずは、私のコードは、元のコードとほぼと同じなので意味はすぐ理解できると思います。
それを理解した上で、imihitoさんのコードを、私との違いを意識しながら、読むと理解が捗ると思います。
上記のコードの改良版
Sub 取り込みテスト()
Dim myPath As String
Dim myFile As String
Dim FromBook As Workbook '集計元ブック
Dim ToSheet As Worksheet '集計先シート
Dim CurRow As Long '入力する行インデックス
Dim i As Long
Set ToSheet = ThisWorkbook.Worksheets("Sheet1") '
myPath = ThisWorkbook.Path & "\"
myFile = Dir(myPath & "*.xlsx")
Application.ScreenUpdating = False '画面更新の抑制
CurRow = 1
Do Until myFile = ""
Set FromBook = Workbooks.Open(myPath & "\" & myFile) '開いたブックを変数にセット
For i = 1 To FromBook.Worksheets.Count
With FromBook.Worksheets(i)
ToSheet.Cells(CurRow, 1).Value = myFile & "!" & .Name
ToSheet.Cells(CurRow, 2).Value = .Range("A2").Value
ToSheet.Cells(CurRow, 3).Value = .Range("D2").Value
End With
CurRow = CurRow + 1 '次の行に移動
Next i
FromBook.Close '集計元ブックを閉じる
myFile = Dir()
Loop
Application.ScreenUpdating = True
MsgBox "取り込み完了しました。"
End Sub