Access2003のテーブルにCSVをインポートしたいと思います。テーブルに挿入する前に文字列チェックをするので、

1件づつファイルデータを読み込んでデータチェックを行っています(見出しはありません)。

読み込むテキストは下記。
あいうえお,かきこくえこ,さしすせそ,
ABCDEFG,EFGHIJ,KLMNOPQRST,
1000,20,000,5000000,
テキスト以上

VBAコード
FF = FreeFile
Open FileName For Input As #FF
Do Until EOF(FF)
Input #FF, _
A,B,C 'A,B,Cは文字列型変数

'ここでA,B,Cのデータをチェック。アポストロフィーが入っていたら除去など

SQL =""
SQL ="insert into TABLE1 VALUES(A,B,C)
Loop

このコードを実行すると、「20,000」でエラーが発生します。「20,000」にカンマが入っているので当然なのですが、
このエラーを発生させない為にはどういった処理をすればよいでしょうか?1件や2件であればCSVを直接なおせば
良いですが、件数が大量にあるので手でなおすわけにもいかなかったりします。

回答の条件
  • 1人2回まで
  • 登録:2010/01/26 13:43:29
  • 終了:2010/01/29 23:11:44

回答(5件)

id:degucho No.1

degucho回答回数253ベストアンサー獲得回数672010/01/26 13:58:45

ポイント70pt

3列固定フォーマットで2列目にカンマ入り数字が入る可能性がある、

ということでいいのでしょうか?


・InputではなくLineInputで1行読んでSplit()で配列に入れる

・配列の要素数が4つあったら2個目と3個目を合体、4つ目を3個目として扱う


http://www.red.oit-net.jp/tatsuya/vb/Open.htm#LineInput

http://jeanne.wankuma.com/tips/vb6/string/split.html

id:akaired

問題は実際には100列あって、問題のある列が99列目にあります・・・

そしてアルファベットと数値、漢字、平仮名のコンビネーションの中に「,」があります。

ただ、カンマといっても99列目にあるカンマは半角カンマではなく全角カンマです「,」。

半角カンマならわかるのですが、全角カンマもVBA側でカンマと判定されてしまいます・・・

2010/01/26 16:34:27
id:frkw2004 No.2

ふるるP回答回数192ベストアンサー獲得回数212010/01/26 16:11:04

ポイント10pt

数値がカンマ編集されているのはどういうときでしょうか。

3列のデータに対し、4列以上のデータが混入している可能性がある、ということですよね。

そのカンマが多いのは数値をカンマ編集されているからとして、実際にどこがデータの区切りなのかが判らなければ、対応できないでしょう。

例えば、

1000,2,000,100,500

とあった場合、1000と2000と100500なのか1000と2000100と500なのか区別できませんね。例では1行に対し全て全角の行、全てアルファベットの行、全て数字の行、となっていますが、それはただしいのでしょうか? 数字とアルファベットが混ざっていることはないでしょうか?

2番目の数字だけがカンマ編集されている、という前提があれば、degucho さんの方法をもう少し発展させて(1行の配列の要素数が4つではなく5つ以上もありえるでしょう)で出来ると思います。

2列目のデータが例えば1,000,000 となっていればheke2mee さんの方法も可能ですが、

例えば1,234,000とかになると1,234が残ってしまうので失敗します。

id:akaired

問題はCSVは別の所で作られ、送られてきます。それをアクセスで取り込みたいと思っていたのですが、送られてきたCSVの中に予期せぬカンマが混じっていたため、これをどうやって処理するか質問させていただきました。アルファベットと数字が入り混じっている場合もあります。Excelだったら処理できるのですが、CSVでどうやって処理するか悩みどころです。

2010/01/26 16:29:00
id:frkw2004 No.3

ふるるP回答回数192ベストアンサー獲得回数212010/01/26 21:03:23

全角カンマを半角カンマとして、データ区切りと誤認識することだけが問題であるなら、Line InputとSplit関数で解決するでしょう。

実際の問題は、このCSVファイルを作る側にあります。数値はカンマ編集させない、文字列の中にカンマが含むケースがあるなら、文字列の列に対しては"で括る、等読み取られることを考慮したつくりにしないといけません。

ファイルフォーマットについてCSVファイル作成側と話し合った方がいいでしょう。

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 otfkbr 1 0 0 2010-01-27 04:52:29
2 rei_ishiguro 2 0 0 2010-01-27 23:05:19
  • id:heke2mee
    回答出来ないようなので、こちらに書きます。

    数値の0が0パディングされて000と言うかたちで出力されることがないなら
    ,000,を000,で置き換えればいけるのではないですか
  • id:kn1967
    >全角カンマもVBA側でカンマと判定されてしまいます

    split のヘルプを見たりして
    回答1で提示されている方法を今一度確認してみてくださいな。
    ヒントは vbBinaryCompare です。


    回答拒否されてるし、そもそも回答1の方法で解決する話なので、
    以上、勝手に足跡を残すだけとします。(久々に、はてなを眺めてますが、
    「他ユーザーの設定による回答拒否」はやっぱ問題あると思うよ。
     そんな機能に頼らずに、自分の目で回答者の過去の回答を確認しようよ。)


  • id:akaired
    heke2meeさん、kn1967さん
    アドバイスありがとうございます!!参考にさせて頂きます!
  • id:takejin
    どうやって","で区切られている「範囲」を特定するのでしょうか。
    質問の例では、
    1000,20,000,5000000,
    ですから、
    1000,20 000 5000000
    にはなりませんが、
    100,200,250,500,
    なんてなってしまうと、分離する論理が導出できません。
    全角をうっかり半角で打たれてしまったら、手も足も出ない場合がありそうです。
    区切り記号を変えてもらうか、数字はカンマなしのどちらかにしてもらわないと、
    解決にならないと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません