前提・実現したいこと
VBAで作成したcsvファイルを別Excelに取込む際、すべてのデータを文字列として表示したい。
発生している問題・エラーメッセージ
文字列データが日付形式で表示される。
試したこと
・データを”
で囲む
例)"01-01" → 1月1日
・各データの先頭に’
をつける
例)'01-01 → '01-01 (’
まで表示されてしまう)
※’
を置換&削除すると日付で表示される
・取込む際に各列の表示形式を「文字列」に設定すると解決するが、取込む度に設定するのは面倒なので不採用
csv出力のソースコード
VBA
Sub CSV出力_Click() Dim filePath As String ' 保存先のパス Dim firstRow As Long ' 開始行 Dim firstCol As Long ' 開始列 Dim lastRow As Long ' 終了行 Dim lastCol As Long ' 終了列6 Dim i As Long ' For文用 Dim j As Long ' For文用 Dim line As String ' 1行分のデータ ' 保存先のパスを取得 filePath = ActiveWorkbook.Path & Format(Now(), "yymmdd") & ".csv" ' 作成するファイルを開く Open filePath For Output As #1 ' CSV作成 With Sheets("csv出力シート") '「データ」シートの開始行を取得 firstRow = .ListObjects(1).Range.Cells(1, 1).row ' 〃 開始列を取得 firstCol = .ListObjects(1).Range.Cells(1, 1).Column ' 〃 終了行を取得 lastRow = .Cells(Rows.Count, 1).End(xlUp).row ' 〃 終了列を取得 lastCol = .Cells(6, Columns.Count).End(xlToLeft).Column For i = firstRow To lastRow line = "" ' 非表示と1列目が空白のデータは出力しない If .Rows(i).Hidden = False And .Range(.Cells(i, 1).Address).value <> "" Then For j = firstCol To lastCol line = line & """" & .Range(.Cells(i, j).Address).value & """" & "," Next Print #1, line End If Next End With ' 作成するファイルを閉じる Close #1 MsgBox "本マクロを起動したフォルダに、CSVファイルを作成しました。", vbInformation, "出力完了" End 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で開く
としました。間違っている個所がありますでしょうか?
まだ回答がついていません
会員登録して回答してみよう