
前提・実現したいこと
VBAで作成したcsvファイルを別Excelに取込む際、すべてのデータを文字列として表示したい。
発生している問題・エラーメッセージ
文字列データが日付形式で表示される。
試したこと
・データを”
で囲む
例)"01-01" → 1月1日
・各データの先頭に’
をつける
例)'01-01 → '01-01 (’
まで表示されてしまう)
※’
を置換&削除すると日付で表示される
・取込む際に各列の表示形式を「文字列」に設定すると解決するが、取込む度に設定するのは面倒なので不採用
csv出力のソースコード
VBA
1Sub CSV出力_Click() 2 Dim filePath As String ' 保存先のパス 3 Dim firstRow As Long ' 開始行 4 Dim firstCol As Long ' 開始列 5 Dim lastRow As Long ' 終了行 6 Dim lastCol As Long ' 終了列6 7 Dim i As Long ' For文用 8 Dim j As Long ' For文用 9 Dim line As String ' 1行分のデータ 10 11 ' 保存先のパスを取得 12 filePath = ActiveWorkbook.Path & Format(Now(), "yymmdd") & ".csv" 13 14 ' 作成するファイルを開く 15 Open filePath For Output As #1 16 17 ' CSV作成 18 With Sheets("csv出力シート") 19 '「データ」シートの開始行を取得 20 firstRow = .ListObjects(1).Range.Cells(1, 1).row 21 ' 〃 開始列を取得 22 firstCol = .ListObjects(1).Range.Cells(1, 1).Column 23 ' 〃 終了行を取得 24 lastRow = .Cells(Rows.Count, 1).End(xlUp).row 25 ' 〃 終了列を取得 26 lastCol = .Cells(6, Columns.Count).End(xlToLeft).Column 27 28 For i = firstRow To lastRow 29 line = "" 30 ' 非表示と1列目が空白のデータは出力しない 31 If .Rows(i).Hidden = False And .Range(.Cells(i, 1).Address).value <> "" Then 32 For j = firstCol To lastCol 33 line = line & """" & .Range(.Cells(i, j).Address).value & """" & "," 34 Next 35 Print #1, line 36 End If 37 Next 38 End With 39 40 ' 作成するファイルを閉じる 41 Close #1 42 43 MsgBox "本マクロを起動したフォルダに、CSVファイルを作成しました。", vbInformation, "出力完了" 44 45End Sub
補足情報(FW/ツールのバージョンなど)
csvファイルを右クリック→プログラムから開く→Excel
でcsvファイルを取込むのでcsv出力する際のVBAの修正で解決したいのですが、方法はございますでしょうか。
Win 10
Excel 2019

VBA は触ったこともないので大ハズレかもしれませんが、schema.ini は試してみましたか?
JET / ACE プロバイダはデフォルトで最初の 8 行のデータをスキャンして各列のデータ型を推測しますが、その際、予期しない型に推測されてしまうことがあるのですが、それと同様なことが起こっていて「文字列データが日付形式で表示される」のかもしれません。
VB.NET + ADO.NET の話ですが、schema.ini というファイルを作り、それに文字コードや各列の型を指定して CSV ファイルと同じディレクトリに配置することにより、Shift_JIS 以外の文字コードへの対応や、上に書いた予期しない型への変換が避けられます。
schema.ini の存在を知らなかったので調べて試してみましたがなにも変化がありませんでした。
[220114.csv]
ColNameHeader=True
Format=CSVDelimited
Col1=番号 Text With 10
Col2=氏名 Text With 10
Col3=市町村 Text With 10
上記をメモ帳で作成→csvファイルと同じフォルダ内に保存→csvファイルをExcelで開く
としました。間違っている個所がありますでしょうか?

回答2件
あなたの回答
tips
プレビュー