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

f:id:yshgs_elec:20200902233512j:plain

この記事では、VBAを使って指定したテキストファイルをシート上に読み込む方法をご紹介していきます。

■スペースやタブ区切りで張り付ける場合

■1行、1セルで張り付ける場合

の2パターンに分けてやり方を解説していきます。

 

エクセルへのテキストファイルの読み込み作業はデータ分析なんかを行っていると頻繁に出くわす作業だと思います。

ぜひこの記事中のスキルをマスターし、日々の業務を効率化していきましょう。

 

それではやっていきましょう。

スポンサーリンク

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もやっていますので興味があれば覗いてみてください。

それではまた!!

コメント

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