• ベストアンサー

VBでCSVファイルを取り込み、Accessに格納する方法

VBから、csvファイルを取り込んで、Accessのテーブルに格納したいので すが、Input# でうまくいきません。 csvファイルは、基本的に,区切りですが 1)値の両端を"でくくる。 2)値として"がある場合は、""に変換する。 という仕様です。(ExcelでCSVファイルを作るときと同じ) 3)先頭13列が、上記のような仕様   さらに14列目から290列目までは数値データで、値を""でくくらない。 データ例として、 "aaa","""値""",""",,","""値2,,""","bbb",・・・"ccc",0,1,2,・・・,276 === ====== ==== ========== === === = = = ===  1 2 3 4 5 13 141516 290 1の値:aaa 2の値:"値"," 3の値:",, 4の値:"値2,," 5の値:bbb としてテーブルに取り込みたいです。 Access2000では、255列以上は取り込めないため、 14列目以降の値を9個ずつ別レコードに分けています。 つまり、22列のテーブルにレコード化しています。 レコード1:列1~13の値+列14~22の値 レコード2:列1~13の値+列23~31の値 ・・・ 255列の制限は仕方ないとしても、上記のようなCSVファイルを VBでAccessテーブルに取り込む良い方法を教えてください。

  • yasu1
  • お礼率20% (2/10)

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

  • ベストアンサー
  • tom777
  • ベストアンサー率77% (14/18)
回答No.3

すいません。ちゃんと読んでませんでした。もう一度。 "aaa","""値""",""",,","""値2,,""","bbb" をSplitでばらすと 配列0の値:"aaa" 配列1の値:"""値""" 配列2の値:""" 配列3の値: 配列4の値:" 配列5の値:"""値2 配列6の値: 配列7の値:""" 配列8の値:"bbb" となりますので、配列0番目から順にダブルクゥオートの数 をチェックしていくことになると思います。 配列0はaaaでOK 配列1も""値""でOK(後で""を"に変換する必要あり) 配列2は"が一つなのでおかしい。 よって、配列2と3をカンマでつなぐ。(""",) でもまだおかしいので、配列2と3と4をカンマでつなぐ。(""",,") 配列2,3,4は"",,でOK ・・・ という風に処理していくことになるかと思います。 どうでしょうか?

その他の回答 (2)

  • i-touch
  • ベストアンサー率40% (170/415)
回答No.2

アクセスのVBAで取り込むという意味だと思いますがいかがですか? このような場合、LineInputで1行ずつ取り込んで、ロジックで分割していきます。 Instrで、「""」「",」「"",」などの位置を調べて、データを切り出すことができます。 まず、行頭が「"」だけか「""」なのか。 フラグをセットするといいかと思います。 If Instr(strLine,Chr(34) + Chr(34)) = 1 then intFlg = 1 '2個でくくられている Endif とかですね。 次に、「",」か「"",」の前までがデータになるので、その位置を調べて、1つ前までをMid()などで切り出します。 次のデータを切り出すには、文字検索の開始位置を指定する方法か、前の処理済の部分をRight()でカットしてしまう方法で対処します。 データの中に「,"」や「,""」が含まれる場合は、うまく対処できない可能性があります。 (データフィールドの終わりと同じ文字列になってしまうため) それにしても大変ですね。 列数が長いときは、テーブルを分けて関連付けしてしまうといいんじゃないかと思いますが、アクセス自体はほとんど使ったことがないのでよくわかりませんです。

  • tom777
  • ベストアンサー率77% (14/18)
回答No.1

VBのバージョンが6.0だと仮定して・・・ 1.CSVファイルをLine Inputで読み込む。 2.読み込んだデータをSplit関数で配列に取り込む。 3.後は好きなようにテーブルにINSERTする。 の繰り返し。 としてはどうでしょうか? (VB6.0でない場合は2のSplit関数は使えませんが・・・)

関連するQ&A

  • CSVファイルをAccessに取りこみたい

    以下のような2つのCSVファイルがあるとします。 【hoge1.csv】 aaa,bbb,ccc,ddd 1,2,3,4 【hoge2.csv】 aaa,bbb,ddd,eee,fff 1,2,4,5,6 Accessをあまり使用したことがないので教えていただきたいのですが、 hoge1.csv、hoge2.csvを、以下のような形で Accessの1つのテーブルにインポートする事はできるのでしょうか? ---------------------------- | aaa | bbb | ccc | ddd | eee | fff | | 1 | 2 | 3 | 4 |  |  | | 1 | 2 |  | 4 | 5 | 6 | ---------------------------- ※「aaa」「bbb」…をフィールド名としたいです vb等でプログラムを自作するしかないのでしょうか? 何か良い方法がありましたら教えてください。お願いします。

  • VBでCSVファイルを読み込む方法(最速方法は?)

    こんにちは。VB6.0(SP5)、Windows2000でVBの勉強をしています。 VBのテキストボックスに入力したデータをCSVファイルに保存する時、もうすでに登録されていたらエラーを出したいと思っています。 そこで、CSVファイルを読み込み、同じかどうか確認したいと思っていますが、どの方法で処理するのが早く効率的なのでしょうか。 ファイル形式・・・csvで50行×3列 ----------- aaa,1,2 bbb,3,4 ・・・50行程度のデータ ----------- テキストボックスに入力したデータ・・・例えば"ccc" 1.Open ファイル名 For Input As #fileNum でEOFまで読み、配列に入れ、その後1列目のデータが"ccc"かどうか確認する 2.Open ファイル名 For Input As #fileNum で読みながら、1列目のデータが"ccc"かどうか確認し、EOFまで繰り返す 3.DAOを利用し、SELECT文であるかないか確認する(DAO2.5) の3つの方法を試してみましたが、あるパソコンで行うとDAOが早いのに別のパソコンだとDAOが1番遅いなど、どれが効率的なのかよくわかりませんでした。 このような処理をしたい場合、みなさんはどのような方法で処理されますか? 上記以外の方法でも構いません。アドバイスよろしくお願いします。

  • アクセスで複数レコードを1レコードにできますか?

    アクセスで複数レコードを1レコードにできますか? お世話になります。 お教えください。 以下のようなレコード(テーブル)があります。 氏名 日付  金額 aaa 5/12 200 aaa 5/24 500 bbb 5/01 300 ccc 5/04 100 これを aaa 5/12 200 5/24 500 bbb 5/01 300 ccc 5/04 100 のようにデータを表示(クエリで)したいのですが どのようにしたらいいでしょうか?

  • CSVに外部テキストファイルを列として追加する方法

    こんにちは。 CSVファイル(base.csv)の先頭列に、別のテキストファイル(add.txt)の中身を新規の列として挿入したいと考えているのですが、よい方法がわかりません。。。 どうのような方法を使えば対応することができるでしょうか? どうぞよろしくお願いいたします。 ■CSVファイル(master.csv) title,developer_name,seller_name,primary_genre_name,application_url AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE ■テキストファイル(add.txt) id 000 111 222 333 ↓ ■目標としたファイル(master.csv) id,title,developer_name,seller_name,primary_genre_name,application_url 000,AAA,BBB,CCC,DDD,EEE 111,AAA,BBB,CCC,DDD,EEE 222,AAA,BBB,CCC,DDD,EEE 333,AAA,BBB,CCC,DDD,EEE

  • vbs csv編集 プログラム

    vbsで以下のように編集したいです。 <編集前>    A     B      C 1 aaa@aaa.jp bbb@bbb.jp ccc@ccc.jp 2       bbb@bbb.jp ccc@ccc.jp 3             ccc@ccc.jp <編集後>    A     B      C      D 1 aaa@aaa.jp aaa@aaa.jp bbb@bbb.jp ccc@ccc.jp 2 bbb@bbb.jp       bbb@bbb.jp ccc@ccc.jp 3 ccc@ccc.jp             ccc@ccc.jp <編集後> (1)A列に値がある場合は、その値をA列にコピーする。 (2)A列に値がなく、B列に値がある場合は、その値をA列にコピーする。 (3)B列に値がなく、C列に値がある場合は、その値をA列のコピーする ※A、B、C列すべてに値がある場合は、A列の値をA列(編集後)にコピーする。 上記可能でしたら、コードのご教示お願いいたします。

  • CSVファイルをperlプログラムで処理する場合

    すみません、度々perl初心者のものです。 CSVファイルを1行ずつ読み込んで処理をしたい場合、 1項目内のデータの中に改行がある場合、 どのような方法で対処出来るでしょうか? 例えば "aaa,bbb,ccc ddd,eee,fff" 上記のようにcccとdddの間に改行が入ってるため 本当は1レコードのはずなのに2レコードとして 処理を行ってしまう。 perlで何かやり方はあるのでしょうか? csvを加工するのもよいのですが、データが多量に あるため、プログラム上でなんとかしたいと思うのですが。。。 すみません、宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Access(office2000)

    accessを用いてあるデータをまとめたい(集計)のですが、 うまくいきません。 tableが3つあり、各2つフィールドがあります。 どのtableも同じ構成でフィールド1には氏名、フィールド2には数(整数)が入っています。 構成は同じものの、データが異なります。 それぞれのtableのフィールド1は同値のものが多々存在します。 例: table1は name| num1 ---------- aaa | 10 | bbb | 12 | table2は name| num2 ---------- aaa | 8 | bbb | 19 | table3は name| num3 ---------- aaa | 20 | bbb | 5 | ccc | 5 | としたとき、 name| num1| num2|num3 | 計 ---------------------------- aaa | 10 | 8 | 20 | 38 bbb | 12 | 19 | 5 | 36 ccc | 0 | 0 | 5 | 5 となるようにしたいのです。 どのようにすれば値を集計できるでしょうか? よろしくお願いいたします。

  • CSVファイルの指定部分をエクセルに取り込みたい

    複数のCSVファイルをエクセルに、VBAを使用して取り込みます。 CSVファイルの形式は決まっているのですが、キーワード行から指定行分のみを取り込みたいです。 データ形式は、 A1 aaa bbb ccc B1 aaa bbb ccc C1 aaa bbb ccc A1 a1a b1b c1c  :  : という感じで、キーワードA1行以下から次のキーワードより上のデータをエクセルに取り込みたいです。 どうぞよろしくお願いいたします。

  • CSVファイルの「”」について

    VB6でCSVファイルを読み込みたいのですが、 以下のような項目だと、1項目として読み込むことができません。 例) AAA,"BBB,CCC,"" """,DDD "BBB,CCC,"" """ を1項目として読み込みたいのですが ダブルコーテーションの括りの中に、更にダブルコーテーションがあると うまくいかないみたいです。 何か方法がありますでしょうか? Open DownLoadFile For Input As #1 Len = 32000 Input #1, rec Do Until EOF(1) 処理1 Loop close #1

  • CSV形式のファイルを読み込んでテーブルに格納するには?(BULK INSERT、BCP、DTS)

    VisualBasicのカテゴリでも質問したのですが、 こちらの方が回答がつく可能性が高いのではと思い、こちらにも書き込みました。 今、 "aaa","bbb","ccc"  のような形で1レコードのCSVファイルがあります。 これをSQLServer2000上のテーブルに読込みたいのですが、 10件ほどの少ないレコードなら 各フィールドごとを変数に入れて読込み、 それをループさせてINSERT INTO すればよいのですが・・・。 大量の件数の場合時間がかかりすぎてしまいます。 それで、BULK INSERT、BCP、DTS などの利用を考えているのですが、 まず、何よりこの質問です。 (1)このようなファイル形式のものを上記の方法で読込めるのか? 実現可能なのかをまずお聞きしたいです。 どなたか、成功されている方はいらっしゃいますか? (2)BCPでファイルのフォーマットを指定したファイルを用意して試みたところ、 ""で区切られているため、その部分もフィールドに取り込まれてしまい、 binaryデータが切り詰められましたとなってしまいます。 この回避方法はないでしょうか? (3)""が余計なので、これを変換して読込むことは可能ですか? DTSはVisualBasic上からコマンドとして利用したいです。 batファイルを用意してもいいです。 困っています。どなたか助けてください。