• ベストアンサー

Excelである文字列を読み込むと日付にされてしまうのを回避したい

 CSVファイルに以下のような文字列(全角、半角どちらでも)が ありまして、これをエクセルで開くと、下のように日付として解釈 されてしまうのですが、ファイルを開く時点でこれを回避する方法 はありますでしょうか。保存もCSVにするため、形式を文字列に することは出来ません。 1-1-9 1-1-11 1-1-14 1-1-16  ↓ 2001/1/9 2001/1/11 2001/1/14 2001/1/16

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 良くあるご質問です。 Excelが、なぜ、そのようなオプションを標準的に持たないのかは分りませんが、日本とアメリカの違いなのでしょうか?ただ、標準的に出力したものが読み込み時に、同じ文字/数字がサポートされないというのは、「自動キャスト機能」とかいうと思いますが、ありがた迷惑な話ですね。 そこで考えてみましたが、CSVインポートを良く使うようでしたら、マクロで対処すればよいと思いますね。使ってみた結果、自分自身、これは便利だと思いました。 後は、これをPersonal.xls(個人用マクロ)に入れて、ツールにボタンをつけてマクロ登録でもすればよいと思います。 インポートする場所は、セルポインターのある場所以降になります。 '<標準モジュールに登録してください> Sub OpenCSV()  'CSVファイルをテキストインポートするマクロ  Dim Fname As String, TextLine As String  Dim Fno As Integer, i As Long  Dim AC As Range  Dim myArray() As String  Set AC = ActiveCell  Fname = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv")  If Fname = "False" Then   Exit Sub  End If  Fno = FreeFile()  Open Fname For Input As #Fno  Do Until EOF(Fno)   Line Input #Fno, TextLine   'SpaceDelete TextLine ''スペースを抜くオプション   If Len(TextLine) > 0 Then    myArray = Split(TextLine, ",")    AC.Offset(i).Resize(, UBound(myArray) + 1).Value = myArray    Else    AC.Offset(i).Value = TextLine   End If   i = i + 1  Loop  Close #Fno  Set AC = Nothing End Sub ' Private Sub SpaceDelete(myStr As String) myStr = Replace(Application.Trim(myStr), Space(1), _      "", Compare:=vbTextCompare) End Sub Excel 2000以上です。それ以下ですと、配列のテキストを確保できません。また、そのままのマクロでは、カンマ区切りの間の空白値を取ることはしてませんが、コードの中ほどの'SpaceDelte のところの「'」を取り去ると、空白値が除去されます。

nihon_no_samurai
質問者

お礼

今回この方法を使わせていただきました。ありがとうございます!

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

あまりお勧めしませんが、文字列だと無理やり解釈させる 方法として、コーテーションでくくり、頭にイコールを つけるという方法があります。 CSV形式だと以下のような形式なると思います。 test,"=""1-1-9""",test CSVに出すときまたは、出した後にそのような変換が できるなら試してみる価値はあるかもしれません。 なお読み込んだあとに、シート全体をコピーして、 「形式を選択して貼り付け」で「値」貼り付けすると よいでしょう。

nihon_no_samurai
質問者

お礼

ありがとうございます!

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

直接読み込む場合は無理ですね。 読み込み前に拡張子を「txt」に変える。 「データ」「外部データの取り込み」「テキストファイルのインポート」で読み込む 「-」を日付にされない別の記号(「─」等)で設定する。

nihon_no_samurai
質問者

お礼

ありがとうございます!

回答No.1

テキストの読み込みウィザードが起動するようにして、毎回、該当 する列についてExcelが勝手に解釈しないよう指示するしかありませ ん。ファイル名の末尾を.txtに変更するってのがポピュラーです。 ExcelはCSVを閲覧もしくは編集するソフトとしてはあまり好ましく ありません。関連付けを変更して、軽快で余計なことをしないテキ ストエディタを使う方がいいですよ。 ソートなどでどうしてもExcelを使いたいのであれば、「番地だけで 1列にしない」など、データ構造の見直しをお薦めします。

nihon_no_samurai
質問者

お礼

ありがとうございます!

関連するQ&A

  • excelで日付を文字列として保存したい

    excel(たぶんかなり新しいバーション)を使っています。 最近のexcelはバージョンすら、見方がわかりません。 さて、日付を"2015-01"という書式で、テキストファイルとしてアップロードしないといけなくなりました。2015-09 と入力すると 2015/9/1 として保存されてしまうので、セルの書式を 文字列にし、2015-09  や 2016-12などとうちこんでから.csvで保存しました。 このファイルを開けると、それらがすべて2015/09とか2016/12として保存されています! これを セルの書式を 文字列 に変更すると42248 とかになってしまいます。 そんなこんなで一日つぶしています。マイクロ●●●社は社会に、もはや善よりも悪をもたらしているように信じていますが、それはさておき、2015-01をあるがままの文字列として.csvに保存するにはどうすればよいのでしょうか。' を頭につけるて、ファイルをアップロードすると規則違反なので、別の方法をお教えください。

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

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

  • エクセル表示形式を日付から文字列にする方法

    こんにちわ。 あるホームページ上から、CSV形式でデータ自動でダウンロードしています。 それをエクセル形式で保存し、ソフトに取り込みます。 ホームページからダウンロードしたデータの日付部分の表示形式が、 自動的に「日付」になっていて ソフトにいれたときに日付部分が「40340」等の訳のわからない数字になってしまします。 ソフトに取り込む前に、形式が「文字列」だと、うまくいくので 文字列に変更したいのです。 何千件とデータがありますので、 手書きで打ち直すのには時間がかかりすぎてしまいます・・・。 取り込み前に コピー、貼り付けや色々試してみましたが、 取り込んだときと同じように「40340」となってしまいます。 なにか良い方法がないでしょうか。。。

  • Excel 2000 のマクロで、日付や文字列を変換する方法について

    Excel 2000 のマクロを使用して、以下のようなことをしようとしているの ですが、方法がよく分かりません。 1.日付タイプのセルに「2008/8/2」と入力されている日付を、数値タイプの   「20020802」に変換したい。 2.文字列タイプのセルに「横浜市西区1-2-3ABCホームズ」と入力されている   文字列を「横浜市西区1-2-3ABCホームズ」に変換したい。   (半角を全角に変換したい) よろしくお願いします。

  • EXCELで日付を文字列として取り出すには

    EXCELで日付形式のセルの内容を、そのイメージのまま文字列にするにはどうすれば良いでしょうか。何かうまい方法があれば教えてください。 例えば、2006/01/05 と表示されている日付をそのまま文字列として 取り出したいのです。単にセルの書式設定で文字列に変えただけでは 38722とタイムスタンプの値らしきものに化けてしまうので困っています。

  • エクセルの日付への自動変換を止めさすには

    "1-2-3","2-24" という文字列の入ったCSVファイルを エクセルで開くと 2001/2/3 2月24日 というように 自動で日付と判断されてしまい、そのまま上書きすると 日付データとして確定してしまいます。 エクセルで開いても、該当のセルの値が 1-2-3 2-24 の文字列として使いたいのですが、 エクセルの「書式・セルの書式・表示形式」で、”文字” にしても、うまく出来ません。

  • エクセル 文字列を日付に変更したい

    勘定奉行21を使っています。 総勘定元帳をエクセルにエクスポートして、編集することが多いのですが、日付が文字列になってしまって困っています。これを正しい日付として認識させたいです。 エクセルに出力される日付の例 16 430 16 8 1 161020 など、和暦で表示されていて、月日は一桁の場合は半角スペースが入るようになっています。 スペースが入っているものは文字列として、3番目のようにスペースがないものについては161020という数値として認識されます。 現在行っている方法 A列に上記が入っているとして、B列に数式を入れます。 1)A列を選択し、置換えで半角スペースを"0"(ゼロ)にします。 2)B列に空白の列を挿入します。 3)B列に以下の式を入れ、下までコピーします。 =IF(A6="","",DATEVALUE("H"&MID(A6,1,2)&"/"&MID(A6,3,2)&"/"&MID(A6,5,2))) 4)B列を書式を選択して貼り付けで値にします。 5)A列を削除します。 6)A列の書式設定でユーザー設定「ge.mm.dd」と入れます。 ※B列より右側には15行ほど他のデータが入っています。 ※この日付がA6から下へ続いているのは毎回同じなのですが、出力する時によって全体の行数は増減します。 ※数式のIF部分については、値の貼り付けにした時に、エラーが残ってしまうので入れてあります。 ※H16.01.20の様な表示形式にしたいです。 今のことろは、上記をマクロで記録して、貼り付け用のシートを作って毎回使えば良いか…と考えているのですが、どうもスマートな気がしません。 他に何か良い方法が思いつく方がいらっしゃいましたら、宜しくお願い致します。 ちなみにVBAは分かりません(^^;

  • エクセル 文字列になっている日付を日付データにしたい

    エクセル2002を使用しています。 他のシステムからCSV形式で出力されたデータの日付(生年月日)が、ほとんどは文字列(テキスト型)で、一部日付データになっています。 表示は、昭和50年1月12日という具合になっています。 これを、文字列も全て日付データ(そのセルを選択した場合、セルでは元号表示でも、数式バーでは1985/1/12というように西暦で表示)になるようにはできるでしょうか。 隣に作業列を設けても良いと思っています。 データは、約300件(300人)分あります。 たまに日付データとして登録されている者の理由は不明ですが、元のシステムの登録時に西暦で生年月日登録したのかもしれません。 よろしくお願いします。

  • エクセル・文字列で保存されているデータを日付にしたい

    人からもらったデータです。 日付が文字列で保存されていて20060322という書き方で沢山入力されている列があります。 2006/03/22の表示に変更したいです。 列を指定して書式、セル、表示形式、日付、種類で変更してみようとしましたが、できませんでした。 そういえば、テキストデータを読み込む時、表示形式を指定し忘れて勝手に日付になってしまった文字列(数なのですが)を、後で文字列にするとおかしな数になってしまったことがありました。。。 保存されている表示形式を上手に変更する方法はありますでしょうか? 教えてください。

  • 困っています!! ExcelをCSVファイルにしたあと。

    ご存知の方にとっては恥ずかしいくらいの質問かもしれませんが、どうか教えて下さい! win xp、Office2000を使用しています。 Excelでデータの編集が終わったあとに、ファイル形式をCSVで保存するよう言われ、入力後に「ファイルの名前を付けて保存」→ファイルの種類で「CSV」を選択して保存を致しました。 その際、ファイル名は「英小文字のみ.csv」にしています。 保存後、確認の為に再度そのファイルを開いたところ、 1、文字幅に合わせて大きさを変えた列幅が基準値に戻ってしまっている。 2、「文字列」を使用して、ゼロから始まる数字を打ち込んだ列がゼロを表示しない(01>1)、数字を全角で打ち込んでいるのに半角に戻ってしまう(15>15)。 という状態になってしまいます。 テキストエディタで確認したところ、きちんとカンマで区切られてはいるのですが、上記の2に関しては、半角になったままだったりと、入力した状態での表示ではありませんでした。 保存する際に、 「英小文字のみ.csv」はCSV(カンマ区切り)と互換性のない機能が含まれている可能性があります。 というメッセージが出ます。 Excelに関しては、まったくといっていいほど初心者です。苦手で逃げていた自分が悪いのですが…。 今回CSVというファイル形式も初めて知りました…。 NETで調べたりしてみたのですが、どうしてもわかりません。 CSVにしたあとに、通常1のようになってしまうものなのでしょうか? また、入力したままの状態が表示されるようにするには、どうしたらよいのでしょうか? ご存知の方がいらっしゃいましたら、ぜひお知恵を貸してください! よろしくお願い致します!

専門家に質問してみよう