質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1839閲覧

【VBA】フォルダ内の複数ブックのデータとブック名の転記をしたい

ohagimaru

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/10/11 02:45

フォルダ内の複数ブックのデータとブック名を転記する

フォルダの中に複数の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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これでどうでしょうか。

VBA

1ws.Range(ws.Cells(LastRow, 1), ws.Cells(NEWLastRow, 1)) = Left(fileName, 3)

投稿2021/10/11 02:52

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ohagimaru

2021/10/11 03:00

おかげさまで解決できました! 素早い回答本当にありがとうございます。 ws.の付け忘れは盲点でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問