IT女子がお届けするオフィスワーク効率化・VBA技術紹介

ノンプログラマーによるノンプログラマーのためのやさしい解説付き

スポンサーリンク

【ExcelVBA】テキストファイルを取り込んでエクセルシートに書き出すマクロ

f:id:excel-accounting:20180415154019p:plain:w450

この記事で紹介すること

システムなどから出力したテキストファイルの内容をExcelシートに書き出すマクロの紹介です。

テキストファイル(拡張子が.txt)は下記の2種類が多いですね。
①タブ区切り
②カンマ(,)区切り

テキストファイルのままだと読みにくいので、これをエクセルシートに書き出します。

f:id:excel-accounting:20180621204827p:plain:w450


【実装条件】
①取り込む対象のテキストファイルは、「ファイルを開くダイアログ」でユーザが自由に指定できること

②テキストファイルのデータ量(列数・行数)はファイル毎に変動する

ソースコード

Sub テキスト読み込み()
    
    Dim txtName As String
    txtName = Application.GetOpenFilename("テキストファイル,*.txt")
    
    If txtName <> "False" Then
        Open txtName For Input As #1
    End If
    
    Dim r As Long
    r = 1 '1行目から書き出す
    
    Do Until EOF(1)
    
        Dim buf As String
        Line Input #1, buf
        
        Dim aryLine As Variant '文字列格納用配列変数
        aryLine = Split(buf, vbTab) '読み込んだ行をタブ区切りで配列変数に格納
        
        Dim i As Long
        For i = LBound(aryLine) To UBound(aryLine)
            'インデックスが0から始まるので列番号に合わせるため+1
            Cells(r, i + 1) = aryLine(i)
        Next
        
        r = r + 1
    
    Loop
    
    Close #1
    
    MsgBox "終了しました。"

End Sub

文法解説

上記のソースコードのポイント部分を図解していきます。

テキストファイルの最終行まで処理を繰り返す

Do Until EOF(1)

EOF関数でテキストファイルの最終行まで繰り返します。
(1)は、テキストを選択して開いたときに付けた番号です
Open txtName For Input As #1

(参考)Office TANAKA - Excel VBA関数[EOF関数]


1行丸ごと読み込んで変数bufに格納

Line Input #1, buf
f:id:excel-accounting:20180619163202p:plain

「タブ区切り」というのは、実際には、目に見えないTab文字で区切られている状態のことです。

「カンマ区切り」の場合は「カンマ」という文字が目に見えるのでイメージしやすいですね。
f:id:excel-accounting:20180619163511p:plain

変数bufの中身をTabで区切ってaryLineに格納

aryLine = Split(buf, vbTab)
f:id:excel-accounting:20180618220740p:plain

vbTabはタブ文字を表します。

※カンマ,区切りのテキストファイルの場合、
Split(buf, ',')
で同様の処理ができます。

aryLineの中身を一文字ずつセルに書き込み

For i = LBound(aryLine) To UBound(aryLine)
Cells(r, i + 1) = aryLine(i)
Next

f:id:excel-accounting:20180618221308p:plain

★ポイント★
①LBoundとUBoundで配列の下限~上限を取り出します。

②配列aryLineのインデックス番号は0から始まるので、セルの列番号に合わせるために+1します。

ここまでの処理で1行書き込みができました。
f:id:excel-accounting:20180618223705p:plain:w400

あとはLoopで最終行まで繰り返します。

ファイルを閉じる

Close #1

最後にファイルを閉じるのを忘れずに!

スポンサーリンク