文字コードと区切り文字を判別して、csvファイルを読み込むマクロ

タイトルのマクロは、以下です。

' 文字コードと区切り文字を判別して、csvファイルを読み込むマクロ
Sub 使用例3()
    ' ファイル選択ダイアログを表示して、ユーザーにCSVまたはテキストファイルを選ばせる
    Dim SettingFileName As Variant
    SettingFileName = Application.GetOpenFilename(FileFilter:="テキスト,*.csv;*.txt", _
                                        Title:="ファイルの選択")

    ' 選択されたファイルのパスを取得
    Dim filePath As String
    If SettingFileName = False Then
        ' ユーザーがファイルを選ばなかった場合、マクロを終了
        Exit Sub
    Else
        filePath = SettingFileName
    End If
    
    ' データを取り込むシートのセル範囲を指定
    Dim rng As Range
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1")

    ' 改行コード・文字コード・区切り文字を取得
    Dim arr As Variant
    arr = GetCode(filePath)

    ' 取得した文字コードを変数に格納
    Dim charSet As String
    charSet = arr(3)
    
    ' 取得した区切り文字を変数に格納
    Dim delimiter As String
    delimiter = arr(1)
    
    ' csv_to_sheet_QueryTablesサブルーチンを呼び出して、CSVファイルをシートに取り込む
    Call csv_to_sheet_QueryTables(filePath, rng, charSet, delimiter)
End Sub

ファイル選択ダイアログの表示

    ' ファイル選択ダイアログを表示して、ユーザーにCSVまたはテキストファイルを選ばせる
    Dim SettingFileName As Variant
    SettingFileName = Application.GetOpenFilename(FileFilter:="テキスト,*.csv;*.txt", _
                                        Title:="ファイルの選択")
  1. Application.GetOpenFilenameメソッドを使用して、ユーザーにCSVまたはテキストファイルを選ばせます。FileFilterパラメーターで選択できるファイルの種類を指定し、Titleパラメーターでダイアログのタイトルを設定します。選択されたファイルのパスがSettingFileNameに格納されます。

ファイルパスの取得と確認

    ' 選択されたファイルのパスを取得
    Dim filePath As String
    If SettingFileName = False Then
        ' ユーザーがファイルを選ばなかった場合、マクロを終了
        Exit Sub
    Else

ユーザーがファイルを選択しなかった場合(SettingFileNameFalseの場合)、マクロを終了します。選択された場合、ファイルパスをfilePathに格納します。

データを取り込むセル範囲の指定

    ' データを取り込むシートのセル範囲を指定
    Dim rng As Range
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1")

データを取り込むシートとセル範囲を指定します。この例では、シート名を”Sheet1″、セル範囲を”A1″としています。

ファイルの文字コードと区切り文字の取得

    ' 改行コード・文字コード・区切り文字を取得
    Dim arr As Variant
    arr = GetCode(filePath)

GetCode関数を呼び出して、ファイルの文字コード(arr(3))、区切り文字(arr(1))、改行コード(arr(2))を取得します。このマクロでは、文字コードと区切り文字のみを使用します。

GetCode関数は、以下を引用してください。

取得した文字コードと区切り文字の変数への格納

    ' 取得した文字コードを変数に格納
    Dim charSet As String
    charSet = arr(3)
    
    ' 取得した区切り文字を変数に格納
    Dim delimiter As String
    delimiter = arr(1)

GetCode関数から取得した文字コードと区切り文字を、それぞれcharSetdelimiter変数に格納します。

CSVファイルのデータをシートに取り込む

    ' csv_to_sheet_QueryTablesサブルーチンを呼び出して、CSVファイルをシートに取り込む
    Call csv_to_sheet_QueryTables(filePath, rng, charSet, delimiter)

csv_to_sheet_QueryTablesサブルーチンを呼び出して、ファイルパス、セル範囲、文字コード、区切り文字を指定し、CSVファイルのデータをシートに取り込みます。

csv_to_sheet_QueryTablesサブルーチンは、以下から引用してください。

このマクロは、ユーザーが指定したCSVまたはテキストファイルを自動的に適切な形式で読み込み、指定されたシートにデータを取り込むことができます。

Follow me!