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テーブルに取り込む良い方法を教えてください。
No.1
- 回答日時:
VBのバージョンが6.0だと仮定して・・・
1.CSVファイルをLine Inputで読み込む。
2.読み込んだデータをSplit関数で配列に取り込む。
3.後は好きなようにテーブルにINSERTする。
の繰り返し。
としてはどうでしょうか?
(VB6.0でない場合は2のSplit関数は使えませんが・・・)
No.2
- 回答日時:
アクセスのVBAで取り込むという意味だと思いますがいかがですか?
このような場合、LineInputで1行ずつ取り込んで、ロジックで分割していきます。
Instrで、「""」「",」「"",」などの位置を調べて、データを切り出すことができます。
まず、行頭が「"」だけか「""」なのか。
フラグをセットするといいかと思います。
If Instr(strLine,Chr(34) + Chr(34)) = 1 then
intFlg = 1 '2個でくくられている
Endif
とかですね。
次に、「",」か「"",」の前までがデータになるので、その位置を調べて、1つ前までをMid()などで切り出します。
次のデータを切り出すには、文字検索の開始位置を指定する方法か、前の処理済の部分をRight()でカットしてしまう方法で対処します。
データの中に「,"」や「,""」が含まれる場合は、うまく対処できない可能性があります。
(データフィールドの終わりと同じ文字列になってしまうため)
それにしても大変ですね。
列数が長いときは、テーブルを分けて関連付けしてしまうといいんじゃないかと思いますが、アクセス自体はほとんど使ったことがないのでよくわかりませんです。
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
・・・
という風に処理していくことになるかと思います。
どうでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
array関数で格納した配列の型を...
-
エクセルで、絶対値の平均を算...
-
EXCEL VBA 2次元配列に格納さ...
-
【VBA】 動的な変数(定数)の指定
-
VB6.0 ファイルの一括読込み
-
仮想リストコントロールの表示
-
数字をコンマで区切った文字列...
-
過去ログの配列について質問
-
配列がとびとびである場合の書き方
-
UNIQUE関数について。
-
VBA 配列に格納した値の平均の...
-
以下のプログラムについて教え...
-
Datatableへの代入
-
Excelのセルの色指定をVBAから...
-
【Excel】見たことのない数式が...
-
[エクセル]連続する指定範囲か...
-
【VBA】配列に数式を仕込む方法...
-
テキストファイルを配列に
-
VBAでの100万行以上のデータの...
-
定数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
エクセルで、絶対値の平均を算...
-
表にフィルターをかけ、絞った...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
配列がとびとびである場合の書き方
-
VBA 配列に格納した値の平均の...
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
読み込みで一行おきに配列に格納
-
Excel オートフィルタのリスト...
-
iniファイルのキーと値を取得す...
-
【VBA】ユーザーフォーム リス...
-
Split関数でLong配列に格納する...
-
配列のSession格納、及び取得方...
-
VB6.0 ファイルの一括読込み
-
Dictionaryを使い4つの条件の一...
-
INDEX(D:D,L3)の意味は?
-
SUMPRODUCT関数を用いた最小値
おすすめ情報