基礎から学ぶVBAプログラミング教室

もりさんのお題を解きながら楽しく勉強しよう

スポンサーリンク

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

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

この記事で紹介すること

タブ区切りカンマ区切りのテキストファイル(拡張子.txt)をエクセルシートに書き出すマクロの紹介です

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


✔ このマクロのメリット
取り込み対象のテキストファイルを「ファイルを開くダイアログ」でユーザが自由に指定できます

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

ソースコード

以下のコードを標準モジュールに貼り付けて実行します

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)
    '~~~
Loop

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

Open txtName For Input As #1

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

テキストの1行を丸ごと読み込んで変数bufに格納

Line Input #1, buf

「タブ区切り」のファイルの場合、目に見えないTab文字も含めて一行を丸ごと変数に格納します。
f:id:excel-accounting:20180823114349p:plain:w500


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

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

aryLine = Split(buf, vbTab)

Split関数変数bufをvbTabで区切ってaryLineに格納します。
vbTabはTab文字を表します。

f:id:excel-accounting:20180823114602p:plain:w500

※カンマで区切る場合はこのように記載します
aryLine = 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

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

スポンサーリンク