ExcelではCSVやTXTといったテキストファイルを扱う機会も多いのではないでしょうか。日々の業務の中で、ログファイルや外部システムからの出力ファイルなどをExcelに取り込んで分析・加工する作業は頻繁に発生します。これらの操作をVBAで自動化すれば、作業効率が飛躍的に向上します。
本記事では、Excel VBAでテキストファイルを開いて内容を読み込む方法について、初心者の方にもわかりやすく解説します。ファイルを読み込むだけでなく、データの整形やワークシートへの出力まで含めて、業務に直結する形でご紹介します。
目次
✅ Excel VBAでテキストファイルを開く基本方法
テキストファイルを開くには、主に以下の2つの方法があります。
Openステートメントを使う(VBAの標準構文)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メソッドで事前チェックを推奨。 |
ファイルの存在確認例
If Dir(filePath) = "" Then
MsgBox "ファイルが見つかりません", vbExclamation
Exit Sub
End If
実務での活用シーン
- 日次のログデータを自動取り込み
- 外部システムから出力されたCSVファイルの自動読み込み
- アンケート結果やセンサーデータのExcel出力
- プログラムエラーや稼働履歴の記録を分析
Excel VBAと組み合わせることで、テキストファイルの「集計」「整形」「レポート出力」までを一括して自動化できます。
まとめ
Excel VBAを使えば、テキストファイルの読み込みは思っている以上に簡単です。手作業でファイルを開いてコピー&ペーストしていた処理を、VBAによって一瞬で完了させることができます。
この記事の内容を押さえておけば、次のような対応ができるようになります。
Openステートメントで1行ずつ読み込みFileSystemObjectで柔軟にファイル処理- カンマ区切りのデータをSplitで分解
- ユーザーにファイルを選択させて読み込み
- 読み込み後にセルへ自動出力
業務での実践に合わせて、ぜひこれらのテクニックを取り入れてみてください。ファイルの種類や目的に応じて処理を変えることができれば、より柔軟で高機能なExcel業務の自動化が実現できます。