質問: Dir() Loop End Sub ```
回答: > > 変数が複数になると理解がおいついておりません。 > > > 変数は使いたい値に対するメモのようなものです。 メモの名前が適当だと何を表しているのかわかりにくいため、自分がわかりやすい名前を付けてあげると上手くようになると思います。 VBAのデバッグ時に便利な機能 ================ ローカルウィンドウ ローカル変数(プロシージャの中で作った変数)の中身を簡単に確認できるウィンドウです。 ステップ実行や、ブレークポイントと組み合わせると、今どんな状態なのか、を簡単に確認できます。 イミディエイトウィンドウ ローカルウィンドウで変数の中はある程度は見えますが、一部確認できないものもあります。 そのような場合は、イミディエイトウィンドウを使用すると、その場で簡単なコードを実行して結果を確認できます。 ``` 'イミディエイトウィンドウ内:値の確認 ?Range("A1").Value '~Valueまで入力してEnter→A1セルの値が表示される ``` ``` 'イミディエイトウィンドウ内:何か実行 Range("A1").Select '~Selectまで入力してEnter→A1セルが選択される ``` > > 1集計元のブック(元データが記載されている)の各シートのA2のセルをコピー → 集計先のB列に貼り付け > > > の部分だけサンプルを作ってみました。 若干変数過多の気はありますが参考になれば。 ``` Sub TEST2() 'コピー先のシート Dim copyToSheet As Worksheet Set copyToSheet = ThisWorkbook.Worksheets("Sheet1") '集計元A2セルのコピー先(開始位置) '適当な名前なので、値の意味を踏まえた名前にした方が良い Dim A2CopyToCell As Range Set A2CopyToCell = copyToSheet.Range("B1") 'xlsxファイルを検索するフォルダ(末尾\付き) 'ThisWorkbook.Path & "\" はなんども出てくるので先にまとめてしまう Dim searchFolderPath As String searchFolderPath = ThisWorkbook.Path & "\" '見つかったxlsxファイルの名前 Dim findXlsxName As String findXlsxName = Dir(searchFolderPath & "*.xlsx") Do Until findXlsxName = "" 'コピー元のブックを開く Dim copyFromBook As Workbook Set copyFromBook = Workbooks.Open(searchFolderPath & findXlsxName) 'For Each は「何かの集まり全て」(今回は`copyFromBook`のワークシート全て)に対して処理をする Dim ws As Worksheet For Each ws In copyFromBook.Worksheets '`ws`には 元のコードでの`Worksheets(i)`に相当するものが自動で入ります '1集計元のブック(元データが記載されている)の各シートのA2のセルをコピー → 集計先のB列に貼り付け Dim A2CopyFromCell As Range Set A2CopyFromCell = ws.Range("A2") 'コピー先のセルの値にコピー元のセルの値を入れる A2CopyToCell.Value = A2CopyFromCell.Value '次のコピー先のセルは、今のコピー先のセルから1行0列動いたセル(→1つ下のセル) Set A2CopyToCell = A2CopyToCell.Offset(1, 0) '2集計元のブック(元データが記載されている)のD2のセルをコピー → 集計先のC列に貼り付け 'TODO '3集計元のブック、シート名をA列にはりつけ 'TODO '集計元のブックの名前→copyFromBook.Name 'シート名→ws.Name Next ws findXlsxName = Dir() Loop End Sub ```