実践  エクセルマクロ(VBA)「ファイル読み込み(文字コード:UTF8,SJIS,改行コード:LF,CRLF)」

この記事の概要

エクセルマクロ(VBA)でテキストファイルを読み込み処理したいケースについて記載します。
文字コード、改行コードにより方法が異なるの備忘でまとめています。
どのオブジェクトで何ができるかを理解しておくのが重要です。

オブジェクトポイント
Scripting.FileSystemObject指定ディレクトリ配下のファイル名、フルパスの取得、再帰的に実施することが可能。ファイルのオープン、読み込みもできるが、UTF8対応していない。SJISならこれですべてできる。改行コードについてはCRLFなら1行づつ読み込むことが可能ですが、LFではそれができないので、spritなどで分割し1行づつ分ける必要があります。
ADODB.Stream文字コードを指定しての読み込みが可能

文字コード:UTF8,改行コード:LFの場合のサンプル

■実装内容
・ディレクトリ情報を取得
・ディレクトリ情報から個別のファイル情報を取得
・個別のファイルをオープンしバッファに内容を取得
・1行づつ処理するために、改行コード:LFでspritし任意のの処理

■実装サンプル
Dim objFSO As Object ‘FileSystemObjectの格納変数
Dim objFiles As Object ‘ディレクトリ情報格納(配下のファイル名などを取得できる)
Dim objFile As Object ‘ファイル情報格納
Dim fileBuff As String ‘ファイルの内容を格納
DIm lineTmp As Variant ‘ 配列の各要素に1行の内容をそれぞれ格納

’FileSystemObjectの生成
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set objFiles = objFSO.GetFolder(ファイルパス).Files

‘指定ディレクトリ以下のファイルオブジェクト設定ループ
For Each objFile In objFiles
‘ファイルをオープンし内容を格納
With CreateObject(“ADODB.Stream”)
.Charset = “UTF-8”
.Open
.LoadFromFile objFile.Path
 
fileBuff = .ReadText
.Close
End With

’ファイルの内容を1行づつに分割(改行コードLF)
lineTmp = Split(fileBuff,vbLF)
 For i=0 To UBound(lineTmp)-1

lineTmp(i) // ここに1行づつの情報がありますね
// やりたい処理を記載
Next i
Next objFile

文字コード:SJIS,改行コード:CRLFの場合のサンプル

■実装内容
・ディレクトリ情報を取得
・ディレクトリ情報から個別のファイル情報を取得
・個別のファイルをオープン
・1行づつのデータを取得

■実装サンプル
Dim objFSO As Object ‘FileSystemObjectの格納変数
Dim objFiles As Object ‘ディレクトリ情報格納(配下のファイル名などを取得できる)
Dim objFile As Object ‘ファイル情報格納
Dim lineTmp As String ‘1行の内容をそれぞれ格納
Dim intFree As Integer ‘ファイル番号取得用

’FileSystemObjectの生成
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set objFiles = objFSO.GetFolder(ファイルパス).Files

‘指定ディレクトリ以下のファイルオブジェクト設定ループ
For Each objFile In objFiles
intFree = FreeFile ‘空番号の取得
Open objFile.Path For Input As #intFree
Do Until EOF(intFree)
Line Input #intFree, lineTmp
‘ lineTmpに1行の情報が格納されているので、これの処理を記載
 Loop
Next objFile

タイトルとURLをコピーしました