Excel/VBA

TOP

テキストファイルの読み込み

テキストファイルの読み込みをする方法の説明画像です

※当記事で使用しているデータは全て架空のサンプルデータです

テキストファイルを読み込む方法

VBAでテキストファイルを読み込むには、Openメソッドを使用するのが一般的です。

下記の構文のようにフリーのファイルナンバーを取得し、Openメソッドを指定します。

テキストファイルの読み込みをする方法の説明画像です

下記のサンプルコードがテキストファイルにある文字を1行ずつ読み込み、セルに記入する例です

サンプルコード


Sub テキストファイル読み込み()

    Dim TextPath As String
    Dim FileNumber As Long
    Dim FileLine As String
    Dim LineArr As Variant, CntArr As Long
    
    '読み込むテキストファイルのパスを指定します
    TextPath = "C:\Users\○○\Desktop\SAMPLE.txt"
    
    'フリーのファイルナンバーを取得します
    FileNumber = FreeFile
    
    '配列を宣言します
    CntArr = 0
    ReDim LineArr(CntArr)
    
    ' Inputモードでテキストファイルを開きます
    Open TextPath For Input As FileNumber
    
    'テキストファイルを1行ずつ読み込み配列に格納していきます
    Do While Not EOF(FileNumber)
        
        Line Input #FileNumber, FileLine
        
        '読み込んだテキストを配列に格納します
        ReDim Preserve LineArr(CntArr)
        LineArr(CntArr) = FileLine
        CntArr = CntArr + 1
        
    Loop
    
    'ファイルを閉じます
    Close FileNumber
    
    '配列に格納したテキストをセルに記入します
    Range(Cells(1, 1), Cells(UBound(LineArr) + 1, 1)).Value = WorksheetFunction.Transpose(LineArr)
    
    MsgBox "テキストファイルの読み込みが完了しました", vbInformation, "読み込み完了"
    
End Sub
        

実行結果

テキストファイルの読み込みに成功しました

実行結果を表した画像です

文字コードがUTF-8のテキストファイルを読み込む方法

文字コードがUTF-8の場合、上記の読み込み方法で実装すると文字化けをしてしまいます。
UTF-8の場合はADODB.Streamを使用して読み込みを行います。

サンプルコード


Sub テキストファイル読み込みUTF8()

    Dim TextPath As String
    Dim Stream As Object
    Dim FileContent As String
    Dim LineArr As Variant
    
    '読み込むテキストファイルのパスを指定します
    TextPath = "C:\Users\○○\Desktop\SAMPLE_UTF-8.txt"
    
    'ADODB.Streamオブジェクトを作成します
    Set Stream = CreateObject("ADODB.Stream")
    
    'ストリームのプロパティを設定します
    Stream.Type = 2          'テキストストリーム
    Stream.Charset = "UTF-8" 'UTF-8を指定
    Stream.Open
    
    'ファイルをロードします
    Stream.LoadFromFile TextPath
    
    'ファイル内容を文字列として読み込み
    FileContent = Stream.ReadText
    
    '読み込んだテキストファイルを配列に格納します。(改行で区切る)
    LineArr = Split(FileContent, vbLf)
    
    '読み込んだテキストをセルに記入します。
    Range(Cells(1, 1), Cells(UBound(LineArr) + 1, 1)).Value = WorksheetFunction.Transpose(LineArr)
    
    'ストリームを閉じる
    Stream.Close
    
    'リソースを解放します
    Set Stream = Nothing
    
End Sub
        

実行結果

文字化けをせずにテキストファイルの読み込みが行えました

実行結果を表した画像です

関連記事