Home » エクセルマクロ・Excel VBAの使い方 » 配列 » テキストファイルを読み込んでワークシートへデータを書き出すExcelマクロ

テキストファイルを読み込んでワークシートへデータを書き出すExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

CSV形式・TSV形式などのテキストファイルを読み込んで、イミディエイトウィンドウに出力するマクロをご紹介しました。

この考え方をベースに、もう少し実際にお仕事で使える形にしたマクロをご紹介しておきましょう。テキストファイルのデータを読み込んで、ワークシートへ書き出すマクロです。

ここでは書き出す処理を、行単位で行うマクロと、セル単位で行うマクロの2つをご紹介しておきます。

[スポンサードリンク]

データを読み込んで一行単位でワークシートに書き出すサンプルマクロ

以下のマクロを実行すると、定数・TXTに指定されたTSV形式のテキストファイル「c:\tmp\sample.txt」を読み込んで、新規ワークシートにデータが書き出されます。

Sub テキストファイルの読み込み_一行ごとにワークシートへ書き込み()

 Const TXT = "c:\tmp\sample.txt"

 Dim num As Long ' ファイル番号
 Dim rcd As String ' テキストファイルの1行分の文字列(1レコード)
 Dim arr() As String
 Dim r As Long ' 書き込みを行うワークシートの行番号

 num = FreeFile
 Open TXT For Input As num

 Sheets.Add Before:=Sheets(1)
 r = 1

 Do Until EOF(num)
  Line Input #num, rcd
  arr = Split(rcd, vbTab)
  Range(Cells(r, 1), Cells(r, UBound(arr) + 1)).Value = arr
  r = r + 1
 Loop

 Close num

End Sub

FreeFile関数でファイル番号を取得してファイルを開く部分は、既にご紹介している、イミディエイトウィンドウに出力するマクロと同じです。
 num = FreeFile
 Open TXT For Input As num

つづいて、アクティブブックの先頭にシートを追加して、データの書き出しを行う行番号を表す変数を初期化しています。
 Sheets.Add Before:=Sheets(1)
 r = 1

イミディエイトウィンドウに出力するマクロと同じく、Do~Loopループの中で1行ごとにデータを変数・rcdに読み込んでおいて、
 Do Until EOF(num)
  Line Input #num, rcd

ワークシートにデータを書き出すために、Split関数を使って、1行分のデータを、タブ文字ごとに区切って配列にします。
  arr = Split(rcd, vbTab)

配列に格納された1行分のデータをセルに書き出してから、
  Range(Cells(r, 1), Cells(r, UBound(arr) + 1)).Value = arr

行番号を表す変数・rをインクリメントしています。
  r = r + 1

テキストファイルを読み込んでセル単位でデータを書き出すサンプルマクロ

テキストファイルのデータを読み込んで、セル単位でデータを書き出すのなら以下のようなマクロです。

Sub テキストファイルの読み込み_セル単位でワークシートへ書き込み()

 Const TXT = "c:\tmp\sample.txt"

 Dim num As Long ' ファイル番号
 Dim rcd As String ' テキストファイルの1行分の文字列(1レコード)
 Dim arr() As String
 Dim r As Long ' 書き込みを行うワークシートの行番号
 Dim c As Long ' 書き込みを行うワークシートの列番号

 num = FreeFile
 Open TXT For Input As num

 Sheets.Add Before:=Sheets(1)
 r = 1

 Do Until EOF(num)
  Line Input #num, rcd
  arr = Split(rcd, vbTab)
  For c = 1 To UBound(arr) + 1
   Cells(r, c).Value = arr(c - 1)
  Next c
  r = r + 1
 Loop

 Close num

End Sub

全体の構造は先のマクロと同じですが、書き出す処理だけが異なります。

先のマクロでは行単位で書き出しを行っていましたが、
  Range(Cells(r, 1), Cells(r, UBound(arr) + 1)).Value = arr

このマクロではFor~Nextループを使ってセル単位で書き出しています。
  For c = 1 To UBound(arr) + 1
   Cells(r, c).Value = arr(c - 1)
  Next c

先にご紹介した1行ごとにデータを書き出すマクロでは、すべてのデータが文字列として書き出されますが、セル単位で書き出すマクロでは数値データは数値として書き出されます。

一見、セル単位で書き出すほうが良さそうに感じる方がいらっしゃるかもしれませんが、例えばテキストファイル内の「0001」といったデータは、このままの形で読み込みたいというニーズはあるはずですので、どちらを採用するかは、実際のデータ・業務を精査して決めてください。

まず配列関連の処理を理解しましょう

この記事でご紹介しているマクロは、いずれも配列を利用していますので、そもそも配列に慣れていない方は、ローカルウィンドウで配列に格納されているデータを確認しながら、配列について理解することをおすすめします。

Split関数とUBound関数二次元配列をワークシートへ一気に書き出す処理あたりを、先に理解しましょう。

関連語句
VBA, Visual Basic for Applications

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » テキストファイルを読み込んでワークシートへデータを書き出すExcelマクロ

「配列」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.