ACCESS VBA ヘッダなしCSVの入力について
”商品管理.mdb”の中に
下のような”商品TBL”があります
商品ID 納入日 仕入NO 管理コード
9 20100305 25596
10 20100326 19229
11 20100412 65841
12 20100423 26845
上の商品TBLテーブルの管理コードを入れる元データとして
下のような”管理.csv”があります
20100326,20100305,123
20100326,20100326,456
20100326,20100412,222
20100326,20100423,1111
ヘッダーはありませんが
1列目:納入日、2列目:仕入NO、3列目:管理コード
になります。
やりたいことは
”商品TBL”の ”納入日”と”仕入NO”と
管理.csvの”納入日”と”仕入NO”(ヘッダーはありませんが1カラムと2カラム)
が一致した場合、管理.csvの管理コード(3カラム目)を
”商品TBL”の管理コードに入力したいのです。
色々参考にしているのですがやり方がわかりません
今何とか”商品TBL”に管理.csvを読み込ませる所までは出来ましたが
ただ単にデータを追加させる事が出来た程度です。
商品TBLと管理CSVを比較してマッチしたら管理コードを入力できる方法を
どなたか、お教え願います。
以下現在の状況です
Private Sub コマンド0_Click()
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const ForReading = 1
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open _
"Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source = c:\test\商品管理.mdb"
objRecordSet.Open "SELECT * FROM 商品TBL", _
objConnection, adOpenStatic, adLockOptimistic
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\test\管理.csv")
Do Until objFile.AtEndOfStream
strkanri = objFile.ReadLine
MsgBox strkanri
arrkanri = Split(strkanri, ",")
objRecordSet.AddNew
objRecordSet("納入日") = arrkanri(0)
objRecordSet("仕入NO") = arrkanri(1)
objRecordSet("管理コード") = arrkanri(2)
objRecordSet.Update
Loop
objRecordSet.Close
objConnection.Close
End Sub
No.2ベストアンサー
- 回答日時:
#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) の内容を囲います。
複数あるのであれば、絞り込まれた分を、ぐるぐる回します。
30246kiku様
貴重なアドバイスありがとうございます!!
おかげさまで希望通りの動作が出来ました。
ありがとうございます。
No.3
- 回答日時:
#2です
記述間違いです。
Do While (Not objRecordSet.EOF)
は
While (Not objRecordSet.EOF)
です。
No.1
- 回答日時:
「納入日」「仕入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」の行もあります、それらには同じ管理コードを
付け足していく場合の方法
お手間をかけますが、もう少しお付き合い願えれば大変ありがたいです。
なにとぞよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
ACCESS で 項目名を出力せずにエクスポートしたい
その他(データベース)
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
VBA 現在のセル番地を記憶、復...
-
1日に1人がこなせるプログラム...
-
Excel VBA素人です。VBAで図形...
-
access2003 クエリSQL文に...
-
access2021 VBA メソッドまたは...
-
【VB6】実行ファイルとした後、...
-
CString のGetAt で正しく文字...
-
C# コードビハインドについて
-
ホワイトノイズの生成コードに...
-
エクセルに見えない文字(JISX0...
-
sinカーブの表示のさせ方
-
JIPS-Eコードのコード表について
-
CheckBoxのコントロール配列に...
-
IF文、条件分岐の整理方法
-
Exel VBA 別ブックから該当デ...
-
Excel VBA 空白をセルを探して...
-
COBOLの文法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
1日に1人がこなせるプログラム...
-
Nullの使い方が不正です。
-
access2003 クエリSQL文に...
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
ACCESSユニオンクエリでORDER B...
-
VBAでファイルオープン後にコー...
-
ペンダントライトのコードの色...
-
Exel VBA 別ブックから該当デ...
-
変数名「cur」について
-
特定行の背景色を変えたいのですが
-
PreviewKeyDownイベントが2回...
-
access2021 VBA メソッドまたは...
-
Accessでの抽出で完全一致。
-
VBA リストボックス(複数条件...
-
オートフィルタで抽出結果に 罫...
-
access でエラーを回避するには?
-
1、Rstudioで回帰直線を求める...
おすすめ情報