次の方法で共有

日付が入ったCSVデータのExcel2010への取り込みについて

Anonymous
2013-10-24T04:36:37+00:00

メモ帳で開くと"H25/10/01","H25/09/10"のように表示されるデータが入っているCSVファイルがあります。

このCSVデータを日付としてExcel2010に取り込みたいのですが、うまくいきません。

        Do Until EOF(1)

      Line Input #1, buf

      temp = Split(buf, ",")

      n = n + 1

       Cells(n, 1).Value = temp(0)

              Cells(n, 2).Value = temp(1)

              Cells(n, 3).Value = temp(2)

   Loop

にするとExcelのセルには「"H25/10/01"」がそのまま入り、

セルの書式設定で日付形式に変更しても何も変わりません。

temp(0)のTypeNameがStringになっていたので、DateValueを使って

Cells(n, 1).Value = DateValue(temp(0))のように変更してみたのですが、

今度は「型が一致しません」というエラーが出てしまいます。

CSVをExcel に読み込んで、最終的にはこのセルをH25.10.1のような形で

表示させたいのですが、どのようにすればいいのでしょうか?

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2013-10-25T05:32:48+00:00

提示のコードは

>   .Cells(I, 1) = CDate(Replace(wAry(0), """", "")

は最後の ) が落ちていてシンタックスエラーになりますが、これは投稿時のミスだと思います。

もし、このコードで動かしておられて変な動きをしているということですと、多分手打ちされたデータに余計な ”

とか ,  が含まれているだけだと思います。

メモ帳に新規に↓のデータを丸ごと貼り付けてやってみてください。

"H25/10/1","1","4"

"H25/9/30","5","6"

"H25/11/30","7","8"

なお、すべてのデータに ” クォートが含まれているのでしたら、Splitする前に Replaceをかけて”を

消しちゃった方がよろしいかと思います。

本論には関係ないのですが、プログラムをデバッグする場合、Excelとかシステムがおかしいと思い込んだらまず行き止まりです。

もちろんシステムに不備がありそこを踏んじゃうことも稀にはあるのですが、ほぼ100%自分が間違ったことをやってます。

この場合はご自分で作成されたデータが本当に考えたとおりになっているか確認するのが第一ステップです。

見た目正しいと思われても、新規ファイルで再作成してみるとかいうこともありです。

古いファイルを使いまわすと余計なブランクとか行替などの非表示文字がまぎれていたりとかいろいろ起こりえます。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

9 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2013-10-24T08:21:06+00:00

    何度もご回答いただき、ありがとうございます。

    教えていただいたコードを丸ごと貼り付けて動かしてみると

    きちんと動きます。

    ただ、何だかとても申し上げにくいのですが、

    追記でご指摘いただいた通りCSVファイルの日付のデータは

    「"H25/10/01","H25/09/11","",""」のように""がついています。

    もしかしてこれが原因で、実はとても簡単に解決してしまうようなことなのでしょうか?

    よく理解できていないために大切な部分の説明が抜けてしまっていたようで

    本当に申し訳ありません。

    何度もお手数ですが、この場合の対処方法を教えていただけると

    助かります。

    余計なお手間をおかけしてしまったみたいでとても心苦しいのですが

    どうかよろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2013-10-24T07:39:47+00:00

    おかしいですね。

    面倒ながら↓と全く同じものをやってみてください。

    1.どこかに適当なフォルダを用意して、その中にxxx.csv と言うテキストファイルを作る

    2.テキストファイルには2行

    H25/10/1,1,4

    H25/12/31,5,6

     と入れる

    3.同じフォルダにxlsmファイルを作り、コードとしては丸ごと↓を張り付ける

    Sub aaa()

    Dim wBuff As String, wAry As Variant, I As Long

    I = 0

    Open ThisWorkbook.Path & "\xxx.csv" For Input As #1

      Do Until EOF(1)

        Line Input #1, wBuff

        wAry = Split(wBuff, ",")

        I = I + 1

        With ActiveSheet

          .Cells(I, 1) = CDate(wAry(0))

          .Cells(I, 2) = wAry(1)

          .Cells(I, 3) = wAry(2)

        End With

      Loop

    Close #1

    End Sub

    これは私の環境では2003でも2010でも正常に動いたものです。

    追記:

    もしかして、CSVファイルの日付は”で囲われているとかいうことではないですよね?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2013-10-24T06:44:38+00:00

    ご返信ありがとうございます。

    さっそくメモ帳に手打ちをして読み込ませてみたところ、

    既存のCSVファイルを読ませた場合と同じ結果になりました。

    CSVファイルは他社から提供されているものなので

    残念ながらどのように作成されたのかは分かりません。

    最後に教えていただいたテストをすると、無事に日付形式に変更されました。

    自分で作成したプログラムでCDateも試してみましたが、

    DateValueもCDateもどちらも型が不一致という理由で機能しません。

    sakuda様と同じテストをすればA2、A3がきちんと日付になるのですが

    どこで結果が違ってくるのか私には見当がつきません。

    何が理由で解決するにはどうすればいいのかを教えていただけると

    うれしいです。

    お手数をおかけして申し訳ありませんが、よろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2013-10-24T05:11:36+00:00

    ちょっと、こんなテストをしてみました。

    Sub bbb()

    Dim wBuff As String, temp

    wBuff = "H25/10/1,1,3"

    temp = Split(wBuff, ",")

    With ActiveSheet

      .Range("A1") = temp(0)

      .Range("A2") = DateValue(temp(0))

      .Range("A3") = CDate(temp(0))

    End With

    End Sub

    DateValueもCDateもちゃんと機能します。(A1は文字列になっちゃいます)

    今作成されているプログラムに、メモ帳で手打ちして作成したCSVファイルを読ませた場合どうでしょうか?

    もし、それでOKになるようなら、本物のデータファイルのエンコードの問題か、日付のところになにか非表示の文字が入っているということになります。

    そのCSVファイルはどのように作成されたものなのでしょうか?

    また、次のようなテストをしてみてください。

    1.現在のプログラムで読み込んだ結果のシートで、全く関係のない空のセルを選択してコピー(要するに表示形式が標準の空セル)

    2.文字列の日付になったセルまたは範囲を選択

    3.選択した範囲を右クリックして⇒形式を選択して貼り付け⇒加算

    もし、単に文字列データになっているだけならこれで日付形式に変わるはずです。

    これが変わらないということでしたら、データにゴミが入っている疑いが濃くなると思います。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません