前提
WorkSheet(wsStart)からAccessDB(test)に不足するデータを追加したい。
それぞれ日付データを取得して突合させ、データを挿入する。
お知らせ
以前の質問を踏襲して、質問しています。(内容は別)
https://teratail.com/questions/1ib3tvqtd06z80
詳細
Excel
日付 | 数値1 | 数値2 | 数値3 | 数値4 |
---|---|---|---|---|
1/1 | 1000 | 2000 | 1000 | 2000 |
1/2 | 1000 | 2000 | 1000 | 2000 |
1/3 | 1000 | 2000 | 1000 | 2000 |
1/4 | 1000 | 2000 | 1000 | 2000 |
Access
日付 | 数値1 | 数値2 | 数値3 | 数値4 |
---|---|---|---|---|
1/1 | 1000 | 2000 | 1000 | 2000 |
1/2 | 1000 | 2000 | 1000 | 2000 |
目的とするAccessDB
日付 | 数値1 | 数値2 | 数値3 | 数値4 |
---|---|---|---|---|
1/1 | 1000 | 2000 | 1000 | 2000 |
1/2 | 1000 | 2000 | 1000 | 2000 |
1/3 | 1000 | 2000 | 1000 | 2000 |
1/4 | 1000 | 2000 | 1000 | 2000 |
データタイプはそれぞれ「日付/時刻型」と「数値型」です。
発生している問題・エラーメッセージ
error
1アプリケーション定義およびオブジェクト定義のエラーです。
該当のソースコード
vba
1 2Sub compare_and_copy_date() 3 4 Dim l As Long, lRow As Long 5 Dim wsStart As Worksheet: Set wsStart = ThisWorkbook.Sheets("start") 6 Dim myConn As New ADODB.Connection 7 myConn.Open ConnectionString:= _ 8 "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 9 "Data Source=C:\Users\test.accdb" 10 Dim myRS As New ADODB.Recordset 11 myRS.Open Source:="test", ActiveConnection:=myConn, _ 12 CursorType:=adOpenDynamic 13 14 '行すべてを表示 15 wsStart.Rows.Hidden = False 16 17 'Excelを降順に 18 Range(Columns(1), Columns(5)).Sort Range("A1"), xlDescending 19 20 'Excelから[日付]列を取得 21 lRow = wsStart.Cells(Rows.Count, "A").End(xlUp).Row 22 23 'Excelデータの最新日付を取得 24 With myRS 25 For l = 2 To lRow 26 .MoveFirst 27 .Find "日付=#" & Format(wsStart.Cells(l, 1).Value, "yyyy/mm/dd") 'Excelから日付データの取得 28 If .EOF Then '一致する日付がなければ、行データ追加 29 .AddNew 30 !日付.Value = wsStart.Cells(l, 1) 31 !数値1.Value = wsStart.Cells(l, 2) 32 !数値2.Value = wsStart.Cells(l, 3) 33 !数値3.Value = wsStart.Cells(l, 4) 34 !数値4.Value = wsStart.Cells(l, 5) 35 .Update 36 End If 37 Next l 38 End With 39 40 myRS.Close: Set myRS = Nothing 41 myConn.Close: Set myConn = Nothing 42 43End Sub 44
試したこと
・.MoveNextなどで調整:インデックス(日付)などを取得していると考えたため。
・取得の確認:Debug.Printでエクセル上の日付データなどが取得できているか確認。
・文法の確認:もう一度見直しや意味があっているのか確認した。
N/A対応
vba
1If myRS.EOF Then '一致する日付がなければ、行データ追加 2 myRS.AddNew 3 If IsError(wsStart.Cells(l, 1)) Then 4 Exit For 5 Else 6 myRS!日付.Value = wsStart.Cells(l, 1) 7 End If 8 If IsError(wsStart.Cells(l, 2)) Then 9 Exit For 10 Else 11 myRS!始値.Value = wsStart.Cells(l, 6) 12 End If 13 myRS.Update 14Else 15 Exit For 16End If
回答1件
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/12/07 05:21
2022/12/08 01:33
2022/12/08 02:48
2022/12/08 04:34
2022/12/08 04:54
2022/12/10 05:56
2022/12/10 11:14