フォルダ内の複数ブックのデータとブック名を転記する
フォルダの中に複数のExcelファイル(ブック)が入っており、
それら全てのブックデータの転記を一括して行うマクロを現在使用しています。(後述)
<現在の利用状況>
・フォルダの中に複数のExcelファイル(ブック)が入っている。ファイルにつきシートは1つ(ひな形は同じ)
・ファイルを確認するまでデータが何行入っているか分からない
・貼り付ける際はシートの上部は意図的に消している
<改善希望>
・どのファイルから貼り付けたか分かるように、A列にファイル名を追記したい(どの行にも)
・できれば先頭の3文字のみ
VBA勉強中の初心者ですが、なるべく早く実装しないといけないので、困っています。。。。
ご教示頂けます様お願いいたします。
発生している問題・エラーメッセージ
ファイル名を転記するコードで以下のエラーが出てしまいます。
(該当のコードをコメントアウトすると<改善希望>以外の動作は最後まで行えます)
実行時エラー1004
Rangeメソッドは失敗しました:_Worksheetオブジェクト
該当のソースコード
VBA
1Sub データ集計() 2 3 '集計シートを変数に格納 4 Dim ws As Worksheet 5 Set ws = ActiveSheet 6 7 '集計シートを全て削除しておく 8 ws.Cells.Clear 9 10 '集計シートの最終行を取得しておく 11 Dim LastRow As Long 'Longは整数を入れる 12 LastRow = ws.Cells(Rows.Count, 5).End(xlUp).Row 13 14 15 'メッセージ 16 MsgBox "このブックと同じフォルダにあるブックを全て統合します" 17 18 19'---ファイルを開く前に、場所とファイル名の一覧を取得しておく 20 21 'このブックの保存されているフォルダのパス(番地;ディレクトリ)を変数に取得 22 Dim thisPath As String 23 thisPath = ThisWorkbook.Path 24 25 26 'ディレクトリにあるExcelのファイル名を取得 27 Dim fileName As String 28 fileName = Dir(thisPath & "\" & "*.xlsx") 29 30 31 '画面のちらつきを防止する 32 Application.ScreenUpdating = False 33 34 35 36'---ループで順番にファイルを開いてデータを取り込む 37 38 'ループカウンタ変数 39 Dim i As Long 40 41 42 'ファイル名が無くなるまで繰り返す 43 Do While fileName <> "" 44 45 '開くワークブックを変数に代入 46 Dim bufBook As Workbook 47 Set bufBook = Workbooks.Open(thisPath & "\" & fileName) 48 49 50 '開いたブックの第1シートの全データ --> 集計シートの最終行 51 bufBook.Worksheets(1).Range("B14").CurrentRegion.Copy Destination:=ws.Range("B" & LastRow) 52 53 54 '現時点の最終行を取得 55 Dim NEWLastRow As Long 56 NEWLastRow = ws.Cells(Rows.Count, 5).End(xlUp).Row 57 58 '開いたブックの名前をA列に追加 59 ws.Range(Cells(LastRow, 1), Cells(NEWLastRow, 1)) = Left(fileName, 3) 60 61 62 Dim LastRowSecond As Long 63 LastRowSecond = LastRow + 13 64 65 '最初のループ以外では、タイトル行を削除しておく 66 If i > 0 Then 67 ws.Rows(LastRow & ":" & LastRowSecond).Delete 68 End If 69 70 '開いたブックを閉じる 71 bufBook.Close SaveChanges:=False 72 73 '集計シートの最終行を再取得しておく 74 LastRow = ws.Cells(Rows.Count, 7).End(xlUp).Row + 1 75 76 77 'まだ返していないファイル名を順に返し次のファイル名が取り出される。 78 fileName = Dir() 79 80 i = i + 1 81 82 Loop 83 84 '画面のちらつき防止措置を終了 85 Application.ScreenUpdating = True 86 87End Sub 88 89
試したこと
以下は試しましたが、
各データの最終行にだけファイル名がつくようになりました。
'現時点の最終行を取得
'Dim NEWLastRow As Long
'NEWLastRow = ws.Cells(Rows.Count, 5).End(xlUp).Row
'開いたブックの名前をA列に追加 'ws.Range("A" & NEWLastRow) = Left(fileName, 3)
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/11 03:00