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.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
・・・
という風に処理していくことになるかと思います。
どうでしょうか?
No.2
- 回答日時:
アクセスのVBAで取り込むという意味だと思いますがいかがですか?
このような場合、LineInputで1行ずつ取り込んで、ロジックで分割していきます。
Instrで、「""」「",」「"",」などの位置を調べて、データを切り出すことができます。
まず、行頭が「"」だけか「""」なのか。
フラグをセットするといいかと思います。
If Instr(strLine,Chr(34) + Chr(34)) = 1 then
intFlg = 1 '2個でくくられている
Endif
とかですね。
次に、「",」か「"",」の前までがデータになるので、その位置を調べて、1つ前までをMid()などで切り出します。
次のデータを切り出すには、文字検索の開始位置を指定する方法か、前の処理済の部分をRight()でカットしてしまう方法で対処します。
データの中に「,"」や「,""」が含まれる場合は、うまく対処できない可能性があります。
(データフィールドの終わりと同じ文字列になってしまうため)
それにしても大変ですね。
列数が長いときは、テーブルを分けて関連付けしてしまうといいんじゃないかと思いますが、アクセス自体はほとんど使ったことがないのでよくわかりませんです。
No.1
- 回答日時:
VBのバージョンが6.0だと仮定して・・・
1.CSVファイルをLine Inputで読み込む。
2.読み込んだデータをSplit関数で配列に取り込む。
3.後は好きなようにテーブルにINSERTする。
の繰り返し。
としてはどうでしょうか?
(VB6.0でない場合は2のSplit関数は使えませんが・・・)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Excel(エクセル) セルを参照して条件で値をコピーする 3 2023/02/08 17:45
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) PowerQueryで行数の指定はできますか? 2 2022/08/26 11:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
【VBA】配列に数式を仕込む方法...
-
VBA listBoxについて
-
VBAでの100万行以上のデータの...
-
SUMPRODUCT関数を用いた最小値
-
エクセル 条件を指定した標準...
-
[エクセル]連続する指定範囲か...
-
配列の受け渡しについて
-
[VBA]改行入りのセルの値を配列...
-
読み込みで一行おきに配列に格納
-
ノーツのデータをVBScriptで取...
-
DataSetから、DataTableを取得...
-
Excel オートフィルタのリスト...
-
VBS 複数ファイル複数行を配列...
-
エクセルVBAで変数をセルに一行...
-
array関数で格納した配列の型を...
-
vba:一覧表から自動転記をしたい
-
.NET - 配列変数を省略可能の引...
-
スプレットシートのGetTextにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
VBA listBoxについて
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
VBA 配列に格納した値の平均の...
-
配列のSession格納、及び取得方...
-
【VBA】ユーザーフォーム リス...
-
エクセルでエラーを無視して一...
-
SUMPRODUCT関数を用いた最小値
-
Excel VBA 配列の分割について
-
Excelのオートフィルタで抽出し...
-
VB6.0 ファイルの一括読込み
-
Excel オートフィルタのリスト...
-
VBAで指定期間の範囲を抽出し、...
おすすめ情報