
Excel VBAでCSVファイルを読込むと何故か文字列が日付に変換されて困っています。
すごく困っております。どなたか教えて下さい。
状況を申し上げますと、以下のようなCSVデータがあります。
"住所1","住所2"
"東京都港区青山","1-24-11"
このとき、別なCSVにデータを移すという単純なものです。
通常は、
WsCount.Cells(1, 1).Value =Cells(2,1).value
WsCount.Cells(1, 2).Value =Cells(2,2).value
で、セルにある文字をそのまま、新しいシートのセルに移すだけのことですが、
何故か、"1-24-11"が日付に変換され、"2011/1/24"に変わってしまいます。
デバックなどで、途中経過を見ても既に日付にかわっており、
どうにも対応ができません。
以前は""で囲んである文字は、文字のまま認識していたと思いますが、
何故か今回はうまくいきません。
ちなみに、Excel2007です。
どなたか、教えて下さい。
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
ヒントです
Office2007で「データ」→「外部データの取り込み」→「テキストデータ」を選択すると、フィールド毎の取り込みの型を指定できます(文字列型にすれば日付型には変換されません)
この操作を「マクロ記録」してみてください。こんなマクロが生成されます。
Sub Macro1()
'
' Macro1 Macro
'
With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\Temp\sample.csv", _
Destination:=Range("$A$1"))
.Name = "sample"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
あとはいらない行を削除してできあがり。削除しなくても一応は動くはずですけど。
zap35様、m_and_dmp様、MARU4812様
色々とご助言頂きありがとうございました。
できました。
結局、zap35様のご回答がきっかけとなり、以下のような処理を実行しました。
元CSVファイルをxls形式に読込むときに文字データとしてセルを.NumberFormatLocal = ”@”で
読込みます。(最初は元CSVファイルを直接開く方法で実施していました)
その後、判定加工処理をして得られた結果を別なワークシートにやはり.NumberFormatLocal = ”@”を
利用して書き出します。
その後、ワークシートをCSV形式で出力保存させるというやり方です。
この方法で、住所の"1-2-3"や電話番号の"03-XXXX-XXXX"や日付を"2010-10-01 12:34:56"なども全て正常に処理できました。
ちなみに参考になったサイトです。
http://homepage2.nifty.com/e-ka/win32/index.htm
とても参考になりました。ありがとうございます。
色々とお騒がせいたしました。
ありがとうございました。
No.4
- 回答日時:
Excel が余計な変換をするのは有名な話です。
手入力でセルに"1-24"とか入力しても日付に変更されると思います。
(Excel2003では"1-24-11"は手入力で変換されませんでした。)
"(1)"は -1 になったりします。
手入力だと、オートコンプリートも影響します。
"(c)""(r)"が丸付きに変換されます。
他にもたくさんありますよ。
『csv excel 自動変換』といったキーワードで WEB 検索して
勉強される事をお勧めします。
『excel 自動変換』で検索すればオートコンプリートの問題が
検索されます。
既に回答のある「外部データの取り込み」の設定で回避可能
ですが、列毎の設定が必要ですし、Excel のバージョンによって
動作が変わると嫌なので、私はもう、VBA でテキストファイル
として直接読み込むことにしてしまってます。
その上で、セルに入れる場合はデータの先頭にアポストロフィ(')
をつけてしまう場合もありますね。
この回答への補足
m_and_dmp様、zap35様、MARU4812様
いろいろとご指南頂きありがとうございます。
色々試してみましたが、決定打が見つかりません。
以前、同様なマクロを何度も作成しており、何故、いままでこのような
問題が発生しなかったか不思議な気分です。
ヒントはzap35様のご指摘頂いたCSVファイルを文字形式で読込む処理です。
まだ、最終的にわかったわけではないですが、時間が経過しているので
皆様に失礼があってはいけないかと思い書き込ませて頂きます。
現在は、Schema.iniを利用して対応する方法を模索しております。
実は、上記住所以外にも(見落としておりましたが、電話番号など03-XXXX-XXXXのように
"03"の部分でも"0"が欠落するなど難題山すみです。
元々やりたいことは、CSVからあるデータを加工し、再度CSVに吐き出す処理です。
したがって、読込時点でこのような現象が発生するのと、CSV出力時点でも同様な問題が
発生するため、この出力方法についても検討しなければなりません。
Schema.iniを利用するとCSVの形式そのものをコントロールできそうなので
チャレンジしておりますが、中々うまくいきません。
もう少し、頑張ってみようかと思いますが、もし、ご経験があれば、ご教授いただけると
うれしいです。
ご協力ありがとうございます。
何卒、宜しくお願い申し上げます。
No.2
- 回答日時:
CSVファイルを開く時点で日付に変換されてしまっているとしますとエクセル上で処理するのは難しいですね。
結果が良ければ良いという方法なら、
DDateという変数に読み込んで、
mm、dd、yyに分離し、
mm-dd-yy と結合して表示させます。
以下は、エクセル上で試したのでマクロになるとコードが変わるかも知れません。
mm=Month(DDate)
dd=Day(DDate)
yy=Year(DDate)-2000
ChoBanGo=mm&"-"&dd&"-"&yy
表示が 1-24-11となっていさえすれば、実際の値は問題にしないならば、
セルの表示形式を mm-dd-yyにするだけで良いと思います。
どちらも最後の -11 の部分がなかったりすると、結果がおかしくなります。
No.1
- 回答日時:
コードが1行増えますが、セルの内容をStringで宣言した変数に読み込んでから別のセルに書き出してみたらいかがでしょうか?
この回答への補足
m and dmpさん
ご回答頂きまして、ありがとうございます。
小生もご指摘の方法は、既に実行してみましたが駄目でした。
読込むところで既に日付になってしまっています。
現在、CSVを開いてからデータを他のワークシートに移す処理をしています。
なので、CSVをファイルを開く時点で日付に変換されてしまっているような
感じです。(勿論、他のエディターでは、確実に"1-24-11"になっております。
他に何か方法があれば、お伝授下さい。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Excel(エクセル) csvファイルをExcel形式で読み込むには 2 2023/07/03 13:09
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
このQ&Aを見た人はこんなQ&Aも見ています
-
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
エクセルで日付が逆に登録されています
Excel(エクセル)
-
EXCELVBAにて文字列にして「01」と表示させて、CSV形式で保存すると「1」になってしまう。
その他(プログラミング・Web制作)
-
-
4
エクセルVBA:日付データの変換がうまくいかない
その他(プログラミング・Web制作)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
csvファイルでの日付設定「yyyy/mm/dd」が保存すると元に戻ってしまいます
Excel(エクセル)
-
7
VBAでシート書式の自動変換を作動させない方法
Excel(エクセル)
-
8
CSVファイルをExcelで開いた時、ハイフンで結ばれた数字が日付に変換されてしまう。
Excel(エクセル)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
11
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
12
【vba】日付の形式が勝手に変わってしまう。
Excel(エクセル)
-
13
EXCEL VBAでのCSV出力について
その他(プログラミング・Web制作)
-
14
【Excel VBA】取り込んだファイルのファイル名を取得するには?
Visual Basic(VBA)
-
15
vba 時間の引き算 例えば 15:00から16:15の間の時間は1時間15分ですが、vbaのコード
Visual Basic(VBA)
-
16
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
17
エクセルをCSVで保存すると2020/8/6が2021/8/6になってしまう
Excel(エクセル)
-
18
EXCELからCSVへ変換すると0が消えてしまいます
Excel(エクセル)
-
19
VBA:日付を配列に入れ別セルに転記するとデータ型が変わる
Visual Basic(VBA)
-
20
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
大学のレポート A4で1枚レポー...
-
【Excel VBA】PDFを作成して,...
-
エクセルで英文字に入れた下線...
-
マクロ自動コピペ 貼り付ける場...
-
英数字のみ全角から半角に変換
-
別シートの年間行事表をカレン...
-
Office2021を別のPCにインスト...
-
outlookのメールが固まってしま...
-
Office 2021 Professional Plus...
-
エクセルで特定のセルの値を別...
-
MSオフィス2013にMS365が上書き...
-
Microsoft365について
-
Microsoft Formsの「個人情報や...
-
エクセルVBAで1004エラーになり...
-
office2019 のoutlookは2025年1...
-
表の作成について
-
Excel テーブル内の空白行の削除
-
MicrosoftOfficeの1ユーザー2...
-
エクセルでXLOOKUP関数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
英数字のみ全角から半角に変換
-
Office2021を別のPCにインスト...
-
エクセル ○○以上○○以下の関数を...
-
Office 2021 Professional Plus...
-
会社PCのメールが更新されない
-
outlookのメールが固まってしま...
-
Excelデータで必要な部分だけを...
-
表の作成について
-
マイクロソフト 一時使用コード...
-
エクセル ○○以上○○以下で、条件...
-
データの文字コードを確認するには
-
【Excel VBA】PDFを作成して,...
-
別シートの年間行事表をカレン...
-
office365って抵抗感ないですか?
-
office2019 のoutlookは2025年1...
-
Microsoft Formsの「個人情報や...
-
マクロ自動コピペ 貼り付ける場...
-
エクセル 関数の数値の入れ方を...
-
エクセル すべて+5をしたい
おすすめ情報