Access2000のVBAを使用してcsvファイルを用意されたテーブルにインポートをしたいのですが、
やっかいな条件があります。
ある決められたフォルダに複数のファイルが存在している、そこから全てのCSVファイルを読み込み、3フィールド目(1行目はタイトル行)の値が「"3"」のものだけインポートする。
あるフィールドには、255文字以上のフィールド(改行文字あり)があります。このフィールドはインポートしてもしなくてもよい
今までは、インポート定義を設定してインポートしていたのですが、csvファイルを判別して、インポート前にフィールドの判別をする方法がわかりません。また、255文字以上の対応もうまくいきません。
No.1ベストアンサー
- 回答日時:
>ある決められたフォルダに複数のファイルが存在している、そこから全ての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
一時テーブルのレコードを削除
次のループへ戻る。
ご参考まで。
ありがとうございます。
言葉足りずの所がありました。申し訳ございません。
インポート前に”3”を判別するのは、”3”とそれ以外ではインポートのフィールド数が異なるためです。また、Split関数を使用してフィールドの値を取得しようとしましたが、問題の255文字以上のフィールドに改行コードが入っていてうまく取得できません。
本当に言葉足りずですみませんでした。
No.2
- 回答日時:
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_Fie …
あと、残る問題は、Access がCSVファイルをインポートする際に
データの空読みを行ってからデータ型を決定するのですが
最初の十数行の後に別のデータ型に相当するモノがあった場合には
既に決定されたデータ型とは異なるのでインポートエラーテーブルに出力されます。
これはレジストリの変更を行えば空読みの際に全てのレコードを読むように設定出来るらしい
(試してません)
http://office.microsoft.com/ja-jp/access-help/HP …
私からは以上です。
ご参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- Excel(エクセル) Power Query で取り込むデータのパスを相対パスに出来ませんか? 3 2022/04/05 18:31
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- XML PHP.laravelについて 1 2023/07/06 15:26
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- Chrome(クローム) ブラウザのブックマークの同期の仕方についてお尋ねします。 1 2022/08/10 16:44
- Access(アクセス) Access2016のExcelインポートの機能のことで教えてください 1 2022/09/11 14:58
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INT64対応のprintf系関数はあり...
-
accessでフィールド追加のあと...
-
クリスタルレポートで文字列の...
-
Access 2010で実行時エラー3061
-
ACCESSで視覚的タイムテーブル...
-
Accessのフィールド名に半角括...
-
クリスタルレポート(8.5)の書式...
-
Access VBA 添付型フィールド
-
2次元のdictionary
-
Access 追加クエリについて
-
DataTableに特定のフィールドが...
-
NULLを含む文字列の結合で...
-
c言語で自分のホームディレク...
-
アクセス ADO Null以外のレコ...
-
DataTableのselectメソッド
-
日付と文字列を条件としてDLook...
-
AccessVBAで他テーブルのデータ...
-
2つ目のレコードの値を取得す...
-
ノーツ:ユーザ名から別名を取...
-
ADOでNullフィールドの抽出
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでフィールド追加のあと...
-
Accessのフィールド名に半角括...
-
INT64対応のprintf系関数はあり...
-
テキストファイルのフィールド...
-
2つ目のレコードの値を取得す...
-
DataTableに特定のフィールドが...
-
Access 2010で実行時エラー3061
-
Access VBA 添付型フィールド
-
日付と文字列を条件としてDLook...
-
AccessのDAOでフィールド名を配...
-
ACCESSで日別集計をする場合
-
Accessの画像挿入のVBAコード
-
アクセスでADO 並べ替えが適用...
-
クリスタルレポートで文字列の...
-
オートナンバー型を抽出条件に...
-
テーブルのデータ型の変更がで...
-
ACCESSデータベースにV...
-
ADOでNullフィールドの抽出
-
Access クエリで変数を参照する...
-
AccessVBAで他テーブルのデータ...
おすすめ情報