• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAでCSVファイルを読込むと何故か文字列が日付に変換さ)

Excel VBAでCSVファイルを読込むと何故か文字列が日付に変換されて困っています

zap35の回答

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答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 あとはいらない行を削除してできあがり。削除しなくても一応は動くはずですけど。

hjonathan
質問者

お礼

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 とても参考になりました。ありがとうございます。 色々とお騒がせいたしました。 ありがとうございました。

関連するQ&A

  • エクセル97で作成したファイルをcsvファイルに変換すると?

    エクセル97で作成したファイルをcsvファイルに変換すると住所の地番を入力したセルが、日付に変換されてしまいます。どのように設定をすればいいのでしょうか。 一つのセルに 1-3-5 と入力をして、csvファイルに変換すると 2001/3/5 となってしまいます。もちろんエクセルでのセルの書式設定は、文字列に設定しております。 1-3-5と変換されるためには、あとどのように設定すればいいのでしょうか?よろしくお願いいたします。

  • エクセルVBA:日付データの変換がうまくいかない

    久しぶりにVBAプログラムでハマってしまったので、教えてほしいです。 (1)エクセルシート上のボタンを押す (2)セルの内容を読み込む (3)CSVファイルに出力する というプログラムを組んでいるのですが、variant型で作った 日付のデータの形が変になってしまいます。 入力時は yyyy/mm/dd なのですが、出力されたCSVファイルを見ると、 mm/dd/yyyy と勝手に変換されていました。 何とか修正しようと試みたのですがうまくいきません。 ソースを書き込みます。 Dim data_input(11) As Variant '項目数11項目 Dim i As Integer Dim j As Integer Dim mydir As String Dim conv_data As Variant 'データ変換用 Dim rng As Variant Dim input_date As Date '入力日付(日付型) Dim conv_date As Variant '変換後の日付(ヴァリアント型) i = 0 For i = 0 To 8 data_input(i) = Worksheets("画面").Cells(4 + i, 3) Next i 'A列の一番下のセルを検索する e = Worksheets("local_data").Cells(1, 1).End(xlDown).Row '終端検索(空白のセルまで検索) '日付のデータはそのままCSV化するとおかしな表示となってしまうので、テキスト文字列に変換する 'For Each rng In Range("A1:A10") 'テキスト文字列に変更します。 ' rng.Value = "'" & rng.Text←何故か上手くいかなかった 'Next rng e = e + 1 '最終行+1 For i = 0 To 8 '申込日の時は文字化する為、別処理にする If (i = 0) Then input_date = data_input(i) tmp = CVar(input_date) 'Date型からVariant型に変換し、文字データとして書き込む 'tmpのデータを解体して組み替える 'split? Dim MyStr() As String 'この地点では月/日/年 MyStr() = Split(tmp, "/") '年/月/日に戻す MyStr (0) '月 MyStr (1) '日 MyStr (2) '年 '再結合する tmp = MyStr(2) & "/" & MyStr(0) & "/" & MyStr(1) Worksheets("local_data").Cells(i, i + 1) = tmp 'Worksheets("local_data").Cells(e, 1) = tmp Else Worksheets("local_data").Cells(e, i + 1) = data_input(i) '上部で入力したデータを書き込む End If Next i どうにかyyyy/mm/ddの形で日付が表示されるようにしたいのですが・・・・・ どなたか助言をお願いします。

  • EXCELの日付データを文字列に変換したい

    EXCELの和暦形式の日付データを文字列に変換する方法を教えてください。 たとえば、H17.9.2をそのまま文字列に変換したいのです。 最初から文字列データとして入力すれば問題ないのですが、日付データ(標準)として入力されたデータを書式→セル→文字列で変換するとシリアル値に変わってしまいます。(H17.9.2→38597) どうしたらよいのでしょうか。お願いします。

  • 文字列を日付に変換

    エクセル2003を使っています。 あるセルに'2009/6/19等が入っています。 頭に'が入っているため、日付とは認識せずに文字列として認識している為、困っています。 どうやれば、日付に変換できるでしょうか? 関数やVBAでも良いので、やり方を教えて頂けないでしょうか?

  • CSVでファイルを出す方法

    excelにデータをVBAを使い書き出しています。例えば、 cells(行1、列1).Value=data1 cells(行1、列2).Value=data2 cells(行1、列3).Value=data3 cells(行2、列1).Value=data4 cells(行2、列2).Value=data5 ...... と1行書き込んだら次の行へ、次の行へといった具合に書き込んでいます。 excelなので直接セルを指定して書き込むことができていますが、excelの かわりにcsvとして書き込みをしたい場合、どのような処理をしてテキストに 出せばよいのでしょうか?

  • Excelで日付の書式を指定文字列に変換

    Excelで日付の書式を指定文字列に変換 セルから日付情報を得て、文字列でyyyymmddに変換するには、どのようにすればいいでしょうか。VBA・関数のどちらでもかまいません。よろしくお願いします。

  • Excel(csv) で入力した文字が日付になってしまいます。

    Excel(csv)で住所を管理しています。 一つのセルに1-1-1のように入力をし、 次回そのファイルを開くと2001/1/1と表示され、 セルの書式設定の表示形式をみると日付になっています。 文字列にしてみても、36892というような 数字にしかならず、元の打ったデータがなんだったか わからなくなってしまいます。 なんとかこの現象を回避する方法はありますでしょうか? よろしくお願いします。

  • VBAでセルデータの転記(文字列)

    VBAでセルのデータを下記のように他のセルに持っていく場合、文字として入れてある数字(例えば先頭に0がつくようなもの)は、自動的に数値に変えられて0が消えてしまいます。 また、長いものは指数表示になってしまい、15桁を超えるものは後ろが0になってしまいます。 持っていく先のセルを文字列に設定しておけばいいのでしょうが、持っていく元データが全て文字列ではなく、数値の場合もあります。 元データが数値であれば数値として、文字列であれば文字列として持っていくにはどうすればいいのでしょうか? Sub test() Cells(3, 3).Value = Cells(1, 1).Value End Sub

  • エクセル 文字列(数値)を日付データに変換

    システムからCSVデータを抽出したのですが、日付データと時刻データが数値としてあります。これを日付、時刻データに変換したいのですが良い方法はありますでしょうか。 A1     20070601 → 2007/6/1 B1 1230   → 12:30 としたいのです。 データは1万件以上あるため、手入力で「/」を入れて いくわけにはいかず困っています。 またA1セルを「left関数」などで分割してから、 「&」で結合させても文字列として認識して うまくいきません。 何か良い方法がないかよろしくご教示を お願いします。

  • ExcelでCSVを日付を読み込むと化ける

    こんにちは。CSVファイルをExcelに読み込むと日付のところが文字化けをしてしまいます。 A1に2012/04/05 というデータを読み込むと、1905/7/4 とA1では表示されてしまいます。これはなぜこのような現象が起こるのでしょうか? セルの書式を「日付」にしても解消されません。