ray88’s diary

お仕事で困ったとき用の自分用の覚書

VBA ファイルシステムオブジェクト・OpenTextFile

■FileNameで表されるテキストファイルを開きTextStreamオブジェクトを返す
TextStreamオブジェクトの主なプロパティとメソッド

Function OpenTextFile(FileName As String,[IOMode As IoMode = ForReading],[Create As Boolean = False],[Format As Tristate = TristateFalse]) As TextStream

VBA FileSystemObjectの主なプロパティとメソッド - ray88’s diary

【引数1】IOModeには入出力モードを表す列挙型IOModeの値を指定する
f:id:ray88:20210722133102p:plain

【引数2】Createには引数 FileName で指定されたファイルが存在しない場合に新しいファイルを作成するかどうかを True / False で指定sる。 既定値は False (新規作成しない)

【引数3】・Formatには開くファイルの文字コードを表す列挙型Tristateの値を指定する
f:id:ray88:20210722133724p:plain
■サンプルコード

Sub ReadTextFile()
    
Dim Fso As Object           'ファイルシステムオブジェクト格納用
Dim St As Object            'テキストストリームオブジェクト格納用
Dim buf As Variant          '1行分の文字列格納用
Dim dataArray As Variant    '1行分の各項目を配列にして格納
Dim targetPath As String    '対象テキストファイルパス

'FileSystemObjectをインスタンス化
Set Fso = CreateObject("Scripting.FileSystemObject")

'読込対象テキストファイルパス
targetPath = "C:\デスクトップ\ダミー.CSV"

Set St = Fso.OpenTextFile(targetPath, 1, False, -2)

  'ファイルの最後まで繰り返し
  Do Until St.AtEndOfStream
         '1行分のデータを読み取り
       buf = St.ReadLine
       '1行分のデータをカンマ区切りで配列に格納
       dataArray = Split(buf, ",")
        '先頭行(項目名)以外の場合、値確認のログ出力
       If St.Line <> 0 Then
           MsgBox St.Line & "行目:" & dataArray(0) & " :" & dataArray(1) & " :" & dataArray(2)
       End If
        '3行目以降は繰り返し処理を抜ける
       If St.Line > 3 Then
           Exit Do
       End If
Loop

  'ファイルを閉じる
  St.Close
End Sub