
お世話になります。
Windows XP SP3、Access2003 で
CSVファイルをインポートする処理をつくっています。
読み込むCSVファイルが大きく、必要ないフィールドが多いのですが、
下記のようにLine Input で全部読み込んで
Splitでカンマ区切りでバラしてvarData(Variant型)にいれて
レコードセット(インポート先の既存テーブル)に入れる時に、
必要に応じてデータ型を変更して
フィールド指定ししていれるようにしています。
ところが、CSVファイルの中のデータで数件ほど
ちゃんと読み込めないものがあり、
レコードセットにいれるときにエラーでとまってしまいます。
調べてみると、フィールドで取得した値がずれており、
前の方の複数のフィールドでNull値があった場合?に
ずれ込むことがあるようです。
どうしたらこの現象はなおせるのか教えてください。
それとも・・・
このようにフィールド指定してレコードセットに入れ込むよりも
一度CSVファイルの全レコードを他のテーブルにインポートして、
そこからインポート先の既存の本テーブルにいれたほうがいいのでしょうか?
よろしくお願いいたします。
Open ---- For Input As----
Line Input #lngFileNum, strData
インポート先のテーブルをレコードセットで開く
DAO、トランザクション使用
Do Until EOF(lngFileNum)
Line Input #lngFileNum, strData
'データを配列へ
varData = Split(strData, ",")
With rs
.AddNew
!番号 = CLng(varData(0))
!名称 = varData(1)
!受付日 = DateValue(varData(8))
!種別 = varData(10), ""
!登録番号 = CLng(varData(11))
(以下略)
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
No4です。
No4の続きとして。
フィールド名は質問の通りの抜き出し番号になっていませんが、
リンクしたCSVをT1、追加先テーブルをT2として、以下のようなクエリ
で追加。
INSERT INTO T2 ( 番号, 名称, 受付日, 種別, 登録番号 )
SELECT CLng([フィールド1]) AS F1, T1.フィールド2, DateValue([フィールド3]) AS F3, T1.フィールド4, CLng([フィールド5]) AS F5
FROM T1;
あるいは、
>前の方の複数のフィールドでNull値があった場合
この意味が分かりづらいのですが、もしかしたら、
インポートしようとしているフィールドにNullデータ
が存在する、という意味ならば、
INSERT INTO T2 ( 番号, 名称, 受付日, 種別, 登録番号 )
SELECT IIf(IsNull([フィールド1]),Null,CLng([フィールド1])) AS F1, IIf(IsNull([フィールド2]),Null,[フィールド2]) AS F2, IIf(IsNull([フィールド3]),Null,DateValue([フィールド3])) AS F3, IIf(IsNull([フィールド4]),Null,[フィールド4]) AS F4, CLng(Nz([フィールド5])) AS F5
FROM T1;
これで対応できるものかな、というところですかね。
No.4
- 回答日時:
CSVをリンクテーブルとしてはどうですか。
「外部データの取り込み」から「テーブルのリンク」
を選択し、「ファイルの種類」を「テキストファイル」
とし、ファイルのあるフォルダを選択し、当該ファイルを
クリックするとウィザードが表示されます。
そこで、設定を選択し、フィールド区切り記号、
文字列の引用符を設定し、フィールドの情報で、
必要のないフィールドにチェックを入れてスキップ
を設定し、OKとして最後まで進み、リンクを設定します。
あとは、普通のテーブルとして別テーブルに
追加クエリなりでデータを移し変えて加工するなり、
そのまま参照テーブルとして使用することも
できます。
No.3
- 回答日時:
前述のリンクです。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
>前の方の複数のフィールドでNull値があった場合?に
>ずれ込むことがあるようです。
原因がはっきりしていないので、はっきりさせること。
インポート機能は、あくまでも標準機能。
ちょっとイレギュラー、不正データがあると対応できないものも多いです。
カンマ区切りがどうしてもダメなら
1行単位で読み込むとか一時的にスペース等にして代替処理、
別のアプローチも検討です。
No.2
- 回答日時:
今の方向で進めるなら・・・
Ubound(varData) で確認して×ならレコードセットに入れないで
エラー行として別のテキストファイルに書き込んでから
次の行に進むとか。
varDataの要素を一個ずつチェックするのは面倒ですねぇ。
ん~後は何だろ。
別案を検討されていますが、こちらでも
テキストを Access にインポートした際に 区切り位置がずれる場合の対処方法
http://support.microsoft.com/default.aspx?scid=k …
などがありますので、『前門の狼、後門の虎』かもしれない。
試してみる価値は大いにありそうですけどね。
インポートさえ出来てしまえば、あとは焼くなと煮るなとこっちの勝手気まま (^^ゞ
具体的に何処のステップで止まってしまうのか。
(エラールーチンはコメントアウトして)エラー番号。
エラーになる実際のstrDataの内容とかが分かれば識者から回答があるかもしれない。
No.1
- 回答日時:
参考
エクセルでお仕事
のサイト、VBA応用を参考
ズレるなら
それを使わない手でやる
か
それでやってもいいように仕向ける
怪しいと思われる,,を,"",に変えても同じですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- XML PHP.laravelについて 1 2023/07/06 15:26
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
差込印刷での全角表示について...
-
Accessのハイパーリンクをクリ...
-
クエリーで、全角混じりデータ...
-
Word差し込み印刷のハイフン(...
-
実行時エラー '3464': 抽出条件...
-
クエリで割り算する方法を教え...
-
エクセルデータをワードで差し...
-
ACCESSで条件によってフォーム...
-
列を移動させるvbaコードを教え...
-
アクセス:Yes/No型→チェックい...
-
sqlserverにはグループ集計のfi...
-
strWhereの意味を教えてください。
-
エクセルにおける「フィールド...
-
奇数・偶数ページごとに差し込...
-
フィールドの更新がない
-
アクセスの操作について
-
Oracleのシングルクォーテーション
-
アクセスのクエリでパラメータ...
-
「Access2007」でレポートが作...
-
アクセス レポート テキスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
差込印刷での全角表示について...
-
エクセルにおける「フィールド...
-
エクセルデータをワードで差し...
-
クエリで割り算する方法を教え...
-
フィールドの更新がない
-
ACCESSのデータに自動で半角ス...
-
ACCESSで条件によってフォーム...
-
Acsess アクセス のクエリで...
-
Accessのハイパーリンクをクリ...
-
実行時エラー '3464': 抽出条件...
-
クエリーで、全角混じりデータ...
-
アクセスの操作について
-
Word差し込み印刷のハイフン(...
-
varchar型の入力できる最大文字...
-
ACCESS 重複データを1...
-
sqlserverにはグループ集計のfi...
-
「Access2007」でレポートが作...
-
ACCESSで複数の写真ファイルを...
-
奇数・偶数ページごとに差し込...
-
ACCESSでフィールド名の変更(...
おすすめ情報