質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%

解決済

Excel csvファイル取込時、文字列が日付に自動変換されるのを防ぐ方法

D0NKAMA
D0NKAMA

総合スコア28

2回答

0評価

1クリップ

453閲覧

投稿2022/01/14 03:10

前提・実現したいこと

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SurferOnWww

2022/01/14 03:30

VBA は触ったこともないので大ハズレかもしれませんが、schema.ini は試してみましたか? JET / ACE プロバイダはデフォルトで最初の 8 行のデータをスキャンして各列のデータ型を推測しますが、その際、予期しない型に推測されてしまうことがあるのですが、それと同様なことが起こっていて「文字列データが日付形式で表示される」のかもしれません。 VB.NET + ADO.NET の話ですが、schema.ini というファイルを作り、それに文字コードや各列の型を指定して CSV ファイルと同じディレクトリに配置することにより、Shift_JIS 以外の文字コードへの対応や、上に書いた予期しない型への変換が避けられます。
D0NKAMA

2022/01/14 04:46

schema.ini の存在を知らなかったので調べて試してみましたがなにも変化がありませんでした。 [220114.csv] ColNameHeader=True Format=CSVDelimited Col1=番号 Text With 10 Col2=氏名 Text With 10 Col3=市町村 Text With 10 上記をメモ帳で作成→csvファイルと同じフォルダ内に保存→csvファイルをExcelで開く としました。間違っている個所がありますでしょうか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る