この記事では、 あるフォルダ内にある複数のテキストファイルを、エクセルシート上に一括読み込みする方法をご紹介していきます。
最終的な完成イメージは以下の通りです。
やっていく内容としては、
①テキストファイルが置いてあるフォルダをセルに記入しておく
②読み込みたいテキストファイルの名前もセルに記入しておく
③VBAを使って、②で記入したファイルを開いてエクセルシート上に読み込む
というものです。
あなたのやりたいことと一致していればぜひ続きをご覧ください。
それでは早速やっていきます!
※やりたいことと一致はしてるんだけど、VBAの使い方がわからない、という方は以下の記事を参考にまずはVBAが使える状況にしていきましょう。
手順①:エクセルシートに情報記入
この記事では、あるフォルダ内にある複数のテキストファイルを一括読み込みしていきますので、まずはそれらのデータが置いてある場所、データのファイル名をそれぞれエクセル上に記入しておくようにしています。
今回は以下の画像のように
A2セルにテキストファイルがおいてある場所
A4セル以降に開きたいファイルの名前を記入しています。
※今回は3つのファイルしか開きませんが、A4セル以降に間隔なく名前を記入していれば、いくらでも読み込めるようにしています。
また、これは必須ではありませんが、今回はテキストファイルを読み込む場所も事前に準備をしておきました。(F列以降)
出力場所は基本的にはどこでも問題ありませんが、A列に記載してある情報が上書きされないような場所にしておいてください。
手順②:VBAコードを記述
事前準備が終わったら、次はVBAコードを記入していきます。
この記事で紹介するVBAコードは、以下の画像に対応するように作成しております。
あなたの状況に応じて
・データ保存フォルダ&データ名が記入されているセルの指定
・出力したいデータの行列数
・出力する場所
などは適宜変更してください。
※まずは私とまったく同じ状況をつくってやってみるのがわかりやすいと思います。
そこから少しづつVBAコード変更を加えていったときに、どのように結果が変化していくのかを見ていくと理解が深まるでしょう。
というわけで、以下が今回の状況に対応したテキストファイルを連続でエクセルシートに読み込むことができるVBAコードです。
◆VBAコードサンプル
Sub read_some_text()
'変数の型を宣言
Dim i As Integer
Dim base_file As String
Dim base_folder As String
Dim read_data As String
'今開いているファイルを記憶させる
base_file = ThisWorkbook.Name
'ファイルが置いてある場所を記憶させる
base_folder = Cells(2, 1)
'繰り返し処理の開始
i = 0
Do Until Cells(5 + i, 1) = ""
'テキストファイルを開く
read_data = Cells(5 + i, 1)
Workbooks.OpenText Filename:= _
base_folder & "\" & read_data _
, Origin:=932, startrow:=1, DataType:=xlDelimited, textQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, Space:=True, Other:=False
'データコピー(ここのRange以降は状況に応じて変更する)
Range(Cells(1, 1), Cells(4, 2)).Copy
'もとのファイルに戻って張り付ける
Windows(base_file).Activate
Cells(4, 6 + i * 3).PasteSpecial Paste:=xlPasteValues
'テキストファイルを閉じる
Windows(read_data).Close
'繰り返し処理
i = i + 1
Loop
End Sub
要所で注釈をつけておりますので、ひとつひとつ読んでみてください。
ざっくりと処理の流れが把握できるはずです。
※テキストファイルの読み込みに関してもう少し詳しく知りたい方は、以下の記事も参考になるはずです。
【VBA】マクロでテキストファイルの読み込み!区切り有無で解説!
手順③:マクロを実行する
最後に、先ほど作成したVBAコードを実際に動かして、ファイルを読み込めるか確認してみましょう。
実行前はこんな状況ですね。
この状況から
開発タブ⇒マクロ⇒read_some_textを選択⇒実行
でマクロを実行します。
以下が実行結果です。
しっかりと3つのテキストファイルが一括読み込みされていることが確認できました。
おわりに
というわけで今回は複数のテキストファイルを連続でエクセルシートに読み込む方法(VBAコード)をご紹介しました。
このような作業を頻繁に行うという方はぜひこのページをブックマークしておいてもらえると嬉しいです。
このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
・日々の残業時間を減らしたい。
・業務をもっと効率的にこなしたい。
・もっと勉強する時間を作りたい。
こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。
この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント
素人質問で申し訳ないのですが,
指定のテキストファイルが開くにも関わらず,元シートのデータが指定した範囲でコピーされてしまいます
どうすればいいでしょうか?
ご質問ありがとうございます(^^)
ファイルが開く前に処理が進行しているのかもしれないですね。
その場合、ファイルを開いたあとに以下の1秒程度待つというような処理を追加すれば解決すると思います。
Application.Wait Now()+TimeValue(“00:00:01”)
あるいはファイルを開いたあとに
Windows(read_data).Activate
を追加しても解決するかもですね。
後日修正結果をコードに反映させようと思いますが、急ぎのようでしたらご自身で処理を追加してみていただけますでしょうか。
初めまして。vbaコードサンプルをそのままコピーして実行してみたのですが「変数が定義されていません」と出てしまいました。何か追加で入力が必要なのでしょうか。
ご質問ありがとうございます。
変数iを定義するのを忘れていましたね(^_^;)
変数の型を宣言するところに
Dim i As Integer
を追加すればいけると思います(^^)
またエラーが出たら教えてください。