Excel

【Excel】VBAマクロでタブ区切りで読み込みや出力(テキストやCSVなど)する方法【ReadFile、SaveAs】

当サイトでは記事内に広告を含みます
いつも記事を読んでいただきありがとうございます!!! これからもお役に立てる各情報を発信していきますので、今後ともよろしくお願いします(^^)/

この記事では、ExcelのVBAマクロを使用してタブ区切りのテキストファイルやCSVファイルを効率的に読み込み、出力する方法について解説していきます。

ポイントとしては、`ReadFile`関数と`SaveAs`関数を使用することです。

初心者でも理解しやすいように、変数名を少し変わった表記にしてありますので、自身の使用に合わせて適宜修正してご使用ください。

それでは詳しく見ていきましょう!

 

vbaマクロでタブ区切りでテキストファイルを読み込みし、区切った状態でエクセル出力、別名保存する方法【ReadFile】

それではまず、タブ区切りでテキストファイルを読み込みし、区切った状態でエクセルファイルとして出力する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub ReadFile()
    Dim fso As Object ' ファイルシステムオブジェクトを扱う変数
    Dim ts As Object ' テキストストリームオブジェクトを扱う変数
    Dim textData As String ' ファイルから読み込んだデータを格納する変数
    Dim fileName As String ' ファイル名を格納する変数
    Dim folderPath As String ' フォルダパスを格納する変数
    Dim sh As Worksheet ' シートを扱う変数
    Set sh = ThisWorkbook.Sheets(1)
    folderPath = "C:\YourFolder\"
    fileName = Dir(folderPath & "*.txt")

    While fileName <> ""
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.OpenTextFile(folderPath & fileName, ForReading)
        textData = ts.ReadAll
        ts.Close

        ' データを行ごとに分割
        Dim lines() As String
        lines = Split(textData, vbCrLf)

        Dim i As Integer
        For i = 0 To UBound(lines)
            ' 各行をタブで分割
            Dim parts() As String
            parts = Split(lines(i), vbTab)

            ' シートに出力
            Dim j As Integer
            For j = 0 To UBound(parts)
                sh.Cells(i + 1, j + 1).Value = parts(j)
            Next j
        Next i

        ' "betsu"を前につけて別名保存
        sh.SaveAs folderPath & "betsu" & fileName, xlTextWindows

        fileName = Dir
    Wend
End Sub

コードのAlt+F8を押し、マクロ選択画面でReadFile関数を実行します。

このコードでは、指定されたフォルダ内のすべてのテキストファイルを読み込み、タブ区切りのデータをExcelシートに展開し、ファイル名に「betsu」を追加して別名保存します。

各行を行として読み込み、タブで分割されたデータをセルに格納しています。

 

vbaマクロでタブ区切りでcsvファイルを読み込みし、区切った状態で出力、別名保存する方法

続いては、タブ区切りでCSVファイルを読み込みし、区切った状態で出力する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub SaveAs()
    Dim fso As Object ' ファイルシステムオブジェクトを扱う変数
    Dim ts As Object ' テキストストリームオブジェクトを扱う変数
    Dim textData As String ' ファイルから読み込んだデータを格納する変数
    Dim fileName As String ' ファイル名を格納する変数
    Dim folderPath As String ' フォルダパスを格納する変数
    Dim sh As Worksheet ' シートを扱う変数
    Set sh = ThisWorkbook.Sheets(1)
    folderPath = "C:\YourFolder\"
    fileName = Dir(folderPath & "*.csv")

    While fileName <> ""
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.OpenTextFile(folderPath & fileName, ForReading)
        textData = ts.ReadAll
        ts.Close

        ' データを行ごとに分割
        Dim lines() As String
        lines = Split(textData, vbCrLf)

        Dim i As Integer
        For i = 0 To UBound(lines)
            ' 各行をタブで分割
            Dim parts() As String
            parts = Split(lines(i), vbTab)

            ' シートに出力
            Dim j As Integer
            For j = 0 To UBound(parts)
                sh.Cells(i + 1, j + 1).Value = parts(j)
            Next j
        Next i

        ' "betsu"を前につけて別名保存
        sh.SaveAs folderPath & "betsu" & fileName, xlCSV

        fileName = Dir
    Wend
End Sub

コードのAlt+F8を押し、マクロ選択画面でSaveAs関数を実行します。

この関数では、CSVファイルを読み込み、同様にタブで区切られたデータを処理し、新しい名前でCSVフォーマットで保存します。

 

まとめ VBAマクロでタブ区切りで出力(テキストやCSVなど)する方法【ReadFile、SaveAs】

ここでは【Excel】VBAマクロでタブ区切りで読み込みや出力(テキストやCSVなど)する方法【ReadFile、SaveAs】について解説しました。

マクロをマスターしてさらに快適な生活を送っていきましょう。