- ベストアンサー
Access2000 csvファイルのインポート
- Access2000のVBAを使用してcsvファイルを用意されたテーブルにインポートをする方法について説明します。
- インポートする際に注意が必要な条件として、特定のフォルダに存在する全てのCSVファイルを読み込み、3フィールド目の値が「3」のものだけをインポートします。
- さらに、255文字以上のフィールドがある場合は、インポートしてもしなくてもよいです。インポート定義を設定し、フィールドの判別をする方法についても説明します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>ある決められたフォルダに複数のファイルが存在している、そこから全てのCSVファイルを読み込み、 Dir関数を使ってみてください。 http://homepage2.nifty.com/kasayan/vba/dir.htm >3フィールド目(1行目はタイトル行)の値が「"3"」のものだけインポートする。 テーブルから”3”だけ選択ならクエリでなら出来ますよね? それをアクションクエリにしてください。 >あるフィールドには、255文字以上のフィールド(改行文字あり)があります。このフィールドはインポートしてもしなくてもよい どちらでも構わないのならメモ型としてインポートしてしまえば良いのでは。 消す方が後で付け足すよりも簡単です。 ループ開始 Dir関数で、CSVファイル名を一個ずつ取得して それをあらかじめ作っておいた空の一時的なテーブルにインポートする。 クエリを走らせ、”3”だけのを本来のテーブルに格納する RunSqlだと非同期的に行われるので 今回はDocmd.RunSql ではなく、Executeの方を使ってください。 http://www.geocities.jp/cbc_vbnet/Sql/action.html 一時テーブルのレコードを削除 次のループへ戻る。 ご参考まで。
その他の回答 (1)
- nicotinism
- ベストアンサー率70% (1019/1452)
255文字以上のフィールドの中にある改行コードが、CRLF だと どこまでが『一行』なのか判別つかないので ADODB.Stream でも無理なんじゃないかな? 一旦、Accessにインポートしてから必要なフィールドだけを取り出すしか手は無いと思います。 ”3”というのが左から三つ目のフィールドを指していて、そのフィールド名が不定名なら currentdb.TableDefs("テーブル名").Fields(3).Name で取得できます。 256文字以上のフィールドは同様に currentdb.TableDefs("テーブル名").Fields(Index番号).Type で取得できます。 12 (dbMemo)ならメモ型。 http://www.geocities.jp/cbc_vbnet/tips/Tabli_Field.html あと、残る問題は、Access がCSVファイルをインポートする際に データの空読みを行ってからデータ型を決定するのですが 最初の十数行の後に別のデータ型に相当するモノがあった場合には 既に決定されたデータ型とは異なるのでインポートエラーテーブルに出力されます。 これはレジストリの変更を行えば空読みの際に全てのレコードを読むように設定出来るらしい (試してません) http://office.microsoft.com/ja-jp/access-help/HP001032166.aspx 私からは以上です。 ご参考まで。
お礼
ありがとうございます。 言葉足りずの所がありました。申し訳ございません。 インポート前に”3”を判別するのは、”3”とそれ以外ではインポートのフィールド数が異なるためです。また、Split関数を使用してフィールドの値を取得しようとしましたが、問題の255文字以上のフィールドに改行コードが入っていてうまく取得できません。 本当に言葉足りずですみませんでした。