- ベストアンサー
ACCESS VBA ヘッダなしCSVの入力について
- ACCESS VBAを使用してヘッダがないCSVファイルを入力する方法について教えてください。
- 商品管理.mdbというデータベースには、商品TBLというテーブルがあります。このテーブルには商品ID、納入日、仕入NO、管理コードの列があります。
- また、管理.csvというCSVファイルもあります。このファイルには納入日、仕入NO、管理コードの列があります。これらの列が一致した場合、管理.csvの管理コードを商品TBLの管理コードに入力したいです。現在は商品TBLにデータを追加することしかできていません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です 以下のようにしてみてどうなりますか。 Do Until objFile.AtEndOfStream strkanri = objFile.ReadLine MsgBox strkanri arrkanri = Split(strkanri, ",") objRecordSet.Filter = "納入日=" & arrkanri(0) _ & " AND 仕入NO ='" & arrkanri(1) & "'" Do While (Not objRecordSet.EOF) objRecordSet("管理コード") = arrkanri(2) objRecordSet.Update objRecordSet.MoveNext Wend Loop ※ 「仕入NO」がテキスト型であれば、' ' で arrkanri(1) の内容を囲います。 複数あるのであれば、絞り込まれた分を、ぐるぐる回します。
その他の回答 (2)
- 30246kiku
- ベストアンサー率73% (370/504)
#2です 記述間違いです。 Do While (Not objRecordSet.EOF) は While (Not objRecordSet.EOF) です。
- 30246kiku
- ベストアンサー率73% (370/504)
「納入日」「仕入NO」は、数値型と仮定します。 Do Loop 部分を以下にしてどうなりますか。 Do Until objFile.AtEndOfStream strkanri = objFile.ReadLine MsgBox strkanri arrkanri = Split(strkanri, ",") objRecordSet.Filter = "納入日=" & arrkanri(0) _ & " AND 仕入NO =" & arrkanri(1) If (objRecordSet.EOF) Then objRecordSet.AddNew objRecordSet("納入日") = arrkanri(0) objRecordSet("仕入NO") = arrkanri(1) End If objRecordSet("管理コード") = arrkanri(2) objRecordSet.Update Loop ※ 1度「納入日」「仕入NO」で絞込みします。 結果、なければ全部を追加し、あれば「管理コード」のみを更新します。 ただし、絞り込んだ際に1件しかないはず、、が前提条件となります。 「商品ID」との関係がわからないので、あった時だけとすると、 If (Not objRecordSet.EOF) Then objRecordSet("管理コード") = arrkanri(2) objRecordSet.Update End If の方が良いかも? データ量は見ていないので、使えるものなのかは判断してください。
お礼
30246kiku様 アドバイスありがとうございます、 希望の動きが出来ました。 また落とし穴的な注意点も非常に助かります。 もしよろしければ 2点ほど30246kiku様のアドバイスをお聞きしたいのですが、 ・仕入NOが0から始まるものもあるのでフィールドを文字型にしています、その場合対処法 ・商品TBLに同じ値の「納入日」「仕入NO」の行もあります、それらには同じ管理コードを 付け足していく場合の方法 お手間をかけますが、もう少しお付き合い願えれば大変ありがたいです。 なにとぞよろしくお願いいたします。
お礼
30246kiku様 貴重なアドバイスありがとうございます!! おかげさまで希望通りの動作が出来ました。 ありがとうございます。