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