VBAで自動化 VBA一覧 ファイル・印刷操作 ファイル操作

【VBA】テキストファイルを開く方法|読み込み・活用まで一括解説

ExcelではCSVやTXTといったテキストファイルを扱う機会も多いのではないでしょうか。日々の業務の中で、ログファイルや外部システムからの出力ファイルなどをExcelに取り込んで分析・加工する作業は頻繁に発生します。これらの操作をVBAで自動化すれば、作業効率が飛躍的に向上します。

本記事では、Excel VBAでテキストファイルを開いて内容を読み込む方法について、初心者の方にもわかりやすく解説します。ファイルを読み込むだけでなく、データの整形やワークシートへの出力まで含めて、業務に直結する形でご紹介します。

✅ Excel VBAでテキストファイルを開く基本方法

テキストファイルを開くには、主に以下の2つの方法があります。

  1. Open ステートメントを使う(VBAの標準構文)
  2. FileSystemObject を使う(Microsoft Scripting Runtime)

どちらも一長一短ありますが、基本的な流れは次の通りです。


Open ステートメントを使う方法

最もシンプルな方法で、VBA標準のファイル操作命令です。

基本構文

Open ファイルパス For Input As #番号

Input は読み取り専用を意味します。#番号は任意のファイル番号です(例:#1)。

サンプルコード:1行ずつ読み込んでシートに出力

Sub ReadTextFileWithOpen()
    Dim filePath As String
    Dim lineText As String
    Dim rowNum As Long
    Dim fileNum As Integer

    filePath = "C:\Users\UserName\Documents\sample.txt"
    fileNum = FreeFile

    Open filePath For Input As #fileNum

    rowNum = 1
    Do Until EOF(fileNum)
        Line Input #fileNum, lineText
        Cells(rowNum, 1).Value = lineText
        rowNum = rowNum + 1
    Loop

    Close #fileNum

    MsgBox "テキストファイルを読み込みました", vbInformation
End Sub

このコードでは、テキストファイルの各行を順番に読み取り、ExcelのシートのA列に1行ずつ出力しています。


✅ FileSystemObject(FSO)を使う方法

より柔軟な操作が可能で、改行コードの扱いや書き込み処理などでも多く利用されます。

事前準備

メニューバーから
「ツール」→「参照設定」→「Microsoft Scripting Runtime」
にチェックを入れてください。

サンプルコード

Sub ReadTextFileWithFSO()
    Dim fso As FileSystemObject
    Dim ts As TextStream
    Dim filePath As String
    Dim lineText As String
    Dim rowNum As Long

    Set fso = New FileSystemObject
    filePath = "C:\Users\UserName\Documents\sample.txt"
    Set ts = fso.OpenTextFile(filePath, ForReading)

    rowNum = 1
    Do While Not ts.AtEndOfStream
        lineText = ts.ReadLine
        Cells(rowNum, 1).Value = lineText
        rowNum = rowNum + 1
    Loop

    ts.Close
    MsgBox "FileSystemObjectで読み込み完了", vbInformation
End Sub

この方法では、コードが見やすく拡張性が高いため、ログ解析や複雑なデータ抽出に適しています。


✅ CSVやタブ区切りのデータに対応するには?

テキストファイルの中には、カンマ(CSV)やタブ(TSV)で区切られているものがあります。こうしたファイルを行・列に分けてExcelへ出力するには、文字列の分割処理が必要です。

・Split関数でカンマ区切りを配列に分解

Sub ReadCSVAndSplit()
    Dim filePath As String
    Dim fileNum As Integer
    Dim lineText As String
    Dim rowNum As Long
    Dim items() As String
    Dim i As Integer

    filePath = "C:\Users\UserName\Documents\sample.csv"
    fileNum = FreeFile
    Open filePath For Input As #fileNum

    rowNum = 1
    Do Until EOF(fileNum)
        Line Input #fileNum, lineText
        items = Split(lineText, ",")
        For i = 0 To UBound(items)
            Cells(rowNum, i + 1).Value = items(i)
        Next i
        rowNum = rowNum + 1
    Loop

    Close #fileNum
    MsgBox "CSVファイルをセルに出力しました", vbInformation
End Sub

このように、テキストファイルの各行を「Split」で分割して、列方向に展開することができます。


✅ テキストファイルの選択ダイアログを表示するには?

ファイルパスを毎回コードに書くのは不便です。ユーザーがファイルを選べるようにすると、より実用的になります。【VBA】ダイアログを開いてファイルを開く方法|ユーザーに選ばせて安全に自動化

Sub OpenTextFileWithDialog()
    Dim filePath As Variant
    filePath = Application.GetOpenFilename("Text Files (*.txt), *.txt")

    If filePath <> False Then
        MsgBox "選択されたファイル:" & filePath
        ' ここに読み込み処理を追加可能
    Else
        MsgBox "キャンセルされました", vbExclamation
    End If
End Sub

このように、汎用的な読み込み処理のベースとして利用できます。


■ 読み込み時の注意点

テキストファイルを扱う際には、以下のような注意点があります。

注意点内容
文字コードShift-JIS、UTF-8 などに注意。FSOでは自動判別されないため要確認。
改行コードvbCrLf(Windows)と vbLf(Unix系)で動作が異なる場合あり。
空白行の扱い空行をスキップするロジックを入れるとより安定。
ファイルの存在確認Dir関数やFileExistsメソッドで事前チェックを推奨。

ファイルの存在確認例

【VBA】オブジェクトの存在を確認する方法

If Dir(filePath) = "" Then
    MsgBox "ファイルが見つかりません", vbExclamation
    Exit Sub
End If

実務での活用シーン

  • 日次のログデータを自動取り込み
  • 外部システムから出力されたCSVファイルの自動読み込み
  • アンケート結果やセンサーデータのExcel出力
  • プログラムエラーや稼働履歴の記録を分析

Excel VBAと組み合わせることで、テキストファイルの「集計」「整形」「レポート出力」までを一括して自動化できます。


まとめ

Excel VBAを使えば、テキストファイルの読み込みは思っている以上に簡単です。手作業でファイルを開いてコピー&ペーストしていた処理を、VBAによって一瞬で完了させることができます。

この記事の内容を押さえておけば、次のような対応ができるようになります。

  • Openステートメントで1行ずつ読み込み
  • FileSystemObjectで柔軟にファイル処理
  • カンマ区切りのデータをSplitで分解
  • ユーザーにファイルを選択させて読み込み
  • 読み込み後にセルへ自動出力

業務での実践に合わせて、ぜひこれらのテクニックを取り入れてみてください。ファイルの種類や目的に応じて処理を変えることができれば、より柔軟で高機能なExcel業務の自動化が実現できます。

    -VBAで自動化, VBA一覧, ファイル・印刷操作, ファイル操作