EXCEL VBA:テキスト形式でCSV読み込み 

CSVファイルから電話番号等を読み込むと、先頭の0(ゼロ)が欠けてしまうことがある
その時、対象の列だけテキスト形式で読み込めないか調べたところ、ようやく対応方法が見つかったのでメモしておく

<ポイント>

TextFileColumnDataTypesで読込の書式を指定できる
・指定の仕方は、配列を作り、そこに指定する
  例:3列目だけテキスト形式で読み込む
    Array(xlGeneralFormat, xlGeneralFormat, xlTextFormat)
  すべての列の形式を指定する必要はない
・指定できる形式は、一般、テキスト、日付形式がある

<サンプルコード>

Sub csvdata_read()

    'ファイル名取得
    Dim fileName, sheetName As String
    fileName = getFileName() 'ファイルダイアログでファイル名を指定する
    If fileName = "" Then Exit Sub

    'シート名作成
    sheetName = Mid(Dir(fileName), 3, 8) 'CSVファイル名の一部をシート名に利用する
    'MsgBox sheetName

    'シート名存在確認 存在していれば削除する
    Dim ws As Worksheet, flag As Boolean
    For Each ws In Worksheets
      If ws.Name = sheetName Then flag = True
    Next ws
    If flag = True Then Worksheets(sheetName).Delete

    'シートの追加
    Set ws = Worksheets.Add
    ws.Name = sheetName
     
    'CSV読み込み
     With ws.QueryTables.Add(Connection:="TEXT;" & fileName, Destination:=ws.Range("A1"))
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileParseType = xlDelimited
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileColumnDataTypes = Array(xlYMDFormat, xlGeneralFormat, xlTextFormat)
            .Refresh BackgroundQuery:=False
    End With

End Sub

Function getFileName() As String
'ファイルダイアログでファイル名を取得する
   
    Dim objDialog As FileDialog
    Set objDialog = Application.FileDialog(msoFileDialogOpen)
    
    objDialog.Filters.Clear
    objDialog.Filters.Add "CSVテータ", "*.csv"
    objDialog.Show
    
    If objDialog.SelectedItems.Count > 0 Then
       getFileName = objDialog.SelectedItems.Item(1)
    Else
       getFileName = ""
    End If

End Function

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です