【VBA】マクロでテキストファイルの読み込み!区切り有無で解説!

f:id:yshgs_elec:20200902233512j:plain

数値計算やデータ分析を行っていると大量のテキストファイルをエクセル上に読み込んで加工することはよくあると思います。

 

そのようなテキストファイルの読み込み作業をVBAで自動化したい、と考えているものの、どうやったらいいのかわからない、という方は多いのではないでしょうか?

 

この記事では、そんな悩みを解決するために、VBA実行中にテキストファイルを読み込む方法をご紹介します。

 

スポンサーリンク

VBAでテキストファイルを読み込む方法

それでは早速ですが本題に入ります。

今回は使用する実行するマクロファイル(data_read_macro.xlsm)と同じフォルダの中に読み込みたいデータ(data_file.txt)が入っていることを想定してやってみましょう。

f:id:yshgs_elec:20200902224415j:plain

データファイルの中身は以下のようになっています。

f:id:yshgs_elec:20200902224704j:plain

 

このデータをマクロを使ってdata_read_macro.xlsmの中に読み込むわけですが、今回は以下の2パターンで読み込んでみましょう。

 

 

区切りなしで読み込む場合

まずは区切りなしで読み込む場合です。

要はスペースやタブが含まれている場合でも、一行分のデータは一つのセルの中に読み込む方法になります。

 

以下が実行コードです。

 

Sub open_text()
'変数の型を宣言
Dim base_file As String
Dim read_data As String

'今開いているファイルを記憶させる
base_file = ThisWorkbook.Name 'テキストファイルの開く read_data = "data_file.txt" Workbooks.OpenText Filename:= _ ThisWorkbook.Path & "\" & read_data _ , Origin:=932, startrow:=1, DataType:=xlDelimited, textQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=False 'データコピー Range(Cells(1, 1), Cells(5, 1)).Copy 'もとのファイルに戻って張り付ける Windows(base_file).Activate Cells(1, 1).Select ActiveSheet.Paste 'テキストファイルを閉じる Windows(read_data).Close End Sub

 

読み込むファイル名や、ファイルが保存されている場所などはご自身の状況に合わせて適宜変更してください。

また、テキストファイルの行数や指定した行のみを読み込む場合は、

Range(Cells(1, 1), Cells(5, 1)).Copy

この部分を適宜書き換えることで対応可能です。

今回はテキストファイルが5行であることがわかっていたのでこのような記述としています。

※読み込み領域の変更方法がわからない方はコメント欄から気軽に質問してください。 

 

以下がこのマクロの実行結果です。

テキストファイルの一行分が一つのセルに記入されていますね。

f:id:yshgs_elec:20200902230434j:plain

 

区切りありで読み込む場合

次は区切りありで読み込む場合です。

先ほどとは違い、テキストファイル内に空白が来るたびに、記入するセルを分けて読み込む方法をご紹介します。

 

やることは二つ。

一つは、さきほど紹介したVBAコードの中にあった、Falseの文字の一部をTrueに変えるということです。

基本的にはあなたが読み込みたいテキストファイルに応じてどうやって区切るかを決めていけば良いのですが、通常はConsecutiveDelimiter,Tab,Spaceの部分だけを書き換えておけば問題ないと思います。

 

もう一つは同じく先ほど紹介したVBAコードの中にあった、

Range(Cells(1, 1), Cells(5, 1)).Copyを

Range(Cells(1, 1), Cells(5, 3)).Copyに変更

⇒区切りありにしたことによって、データが記入される領域が変わりますので、それに合わせてマクロ上でも範囲を変更します。

 

念のためコード全体を記述しておきます。

 

Sub open_text()
'変数の型を宣言
Dim base_file As String
Dim read_data As String

'今開いているファイルを記憶させる base_file = ThisWorkbook.Name 'テキストファイルの開く read_data = "data_file.txt" Workbooks.OpenText Filename:= _ ThisWorkbook.Path & "\" & read_data _ , Origin:=932, startrow:=1, DataType:=xlDelimited, textQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, Space:=True, Other:=False 'データコピー Range(Cells(1, 1), Cells(5, 3)).Copy 'もとのファイルに戻って張り付ける Windows(base_file).Activate Cells(1, 1).Select ActiveSheet.Paste 'テキストファイルを閉じる Windows(read_data).Close End Sub

 

以下が区切りありの場合の実行結果です。

f:id:yshgs_elec:20200902231957j:plain

 

狙い通り、各セルに分割されて張り付けられていますね。

 

※以下の記事では、今回のようにテキストデータを読み込んだ後に編集⇒テキストファイルとして保存するという一連の流れを解説しています。

参考になると思いますので、ぜひこちらもご覧ください。

www.higashisalary.com

 

 

スポンサーリンク

終わりに

というわけで今回はVBAの実行中にテキストファイルを読み込む方法についてご紹介しました。ぜひこのスキルをマスターし、日々の業務を効率化していきましょう。

このブログでは、エクセルを中心にさまざまな業務効率化スキルを紹介しています。

■日々の業務を効率化したい。

■早く帰って子供と遊びたい。

こんな人はほかの記事も読んでみてください。

きっとお役に立てるはずです。

 

最後に・・・

この記事が役に立った、という方はぜひ応援よろしくお願いします。

  ↓  応援ボタン 

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

 Twitterもやっていますので興味があれば覗いてみてください。

 それではまた!!

 

オススメ記事

www.higashisalary.com

www.higashisalary.com

 

 

コメント

タイトルとURLをコピーしました