
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
エクセルで日付が逆に登録されています
Excel(エクセル)
-
EXCELVBAにて文字列にして「01」と表示させて、CSV形式で保存すると「1」になってしまう。
その他(プログラミング・Web制作)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
csvファイルでの日付設定「yyyy/mm/dd」が保存すると元に戻ってしまいます
Excel(エクセル)
-
6
エクセルVBA:日付データの変換がうまくいかない
その他(プログラミング・Web制作)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
VBAでシート書式の自動変換を作動させない方法
Excel(エクセル)
-
9
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
10
CSVファイルをExcelで開いた時、ハイフンで結ばれた数字が日付に変換されてしまう。
Excel(エクセル)
-
11
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
12
エクセルをCSVで保存すると2020/8/6が2021/8/6になってしまう
Excel(エクセル)
-
13
EXCEL VBAでのCSV出力について
その他(プログラミング・Web制作)
-
14
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
15
【Excel VBA】取り込んだファイルのファイル名を取得するには?
Visual Basic(VBA)
-
16
vbaのエラー対応(実行時エラー7:メモリが不足しています)
Visual Basic(VBA)
-
17
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
18
EXCELからCSVへ変換すると0が消えてしまいます
Excel(エクセル)
-
19
VBA:日付を配列に入れ別セルに転記するとデータ型が変わる
Visual Basic(VBA)
-
20
VBA ファイルを開くダイアログでの初期表示にファイルサーバーを指定
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
Office2021を別のPCにインスト...
-
エクセル 同じ数字を他の列に自...
-
大学のレポート A4で1枚レポー...
-
Excelで〇のついたものを抽出し...
-
ms teamsの日々のスケジュール...
-
パソコンWindows11 Office2021...
-
Microsoft Formsの「個人情報や...
-
【Excel VBA】PDFを作成して,...
-
エクセルで質問です。 ハイパー...
-
会社のOutlookにてメールを予約...
-
マクロ自動コピペ 貼り付ける場...
-
Office 2021 Professional Plus...
-
Excel テーブル内の空白行の削除
-
VBAファイルの保存先について
-
outlookのメールが固まってしま...
-
エクセルからメールを作れるか...
-
パソコンを買い替える際、前の...
-
office2019 のoutlookは2025年1...
-
エクセル:一定間隔で平均値を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
大学のレポート A4で1枚レポー...
-
Office2021を別のPCにインスト...
-
エクセル 同じ数字を他の列に自...
-
エクセルからメールを作れるか...
-
Microsoft365、ページ設定がで...
-
快活CLUBについて 私用で使う書...
-
パソコンWindows11 Office2021...
-
libreoffice calcで行を挿入し...
-
エクセルで質問です。 ハイパー...
-
outlookのメールが固まってしま...
-
Microsoft Formsの「個人情報や...
-
別シートの年間行事表をカレン...
-
Microsoft Formsでクイズの解答...
-
マクロ自動コピペ 貼り付ける場...
-
Excelで〇のついたものを抽出し...
-
Excel 日付を比較したら、同じ...
-
エクセルで特定のセルの値を別...
-
Officeを開くたびの「再起動メ...
-
office2019 のoutlookは2025年1...
おすすめ情報