ヒガサラblog

サラリーマン向けに、仕事を効率良く進めていくための方法についてご紹介しています。プログラミングから対人スキルまでを幅広く掲載中。

ヒガサラblog

【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()
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()
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

 

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

 

終わりに

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

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

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

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

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

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

 

最後に・・・

このブログはブログ村に参加しています。

この記事が役にたった、今後もいろんなスキルを紹介してほしい、という方は以下のボタンをポチって頂けると私のモチベーションがあがりますのでよろしくお願いします。

 

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

 

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

 

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

 

それではまた!!

 

関連記事

www.higashisalary.com

www.higashisalary.com