前提
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
アプリケーション定義およびオブジェクト定義のエラーです。
該当のソースコード
vba
Sub compare_and_copy_date() Dim l As Long, lRow As Long Dim wsStart As Worksheet: Set wsStart = ThisWorkbook.Sheets("start") Dim myConn As New ADODB.Connection myConn.Open ConnectionString:= _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:\Users\test.accdb" Dim myRS As New ADODB.Recordset myRS.Open Source:="test", ActiveConnection:=myConn, _ CursorType:=adOpenDynamic '行すべてを表示 wsStart.Rows.Hidden = False 'Excelを降順に Range(Columns(1), Columns(5)).Sort Range("A1"), xlDescending 'Excelから[日付]列を取得 lRow = wsStart.Cells(Rows.Count, "A").End(xlUp).Row 'Excelデータの最新日付を取得 With myRS For l = 2 To lRow .MoveFirst .Find "日付=#" & Format(wsStart.Cells(l, 1).Value, "yyyy/mm/dd") 'Excelから日付データの取得 If .EOF Then '一致する日付がなければ、行データ追加 .AddNew !日付.Value = wsStart.Cells(l, 1) !数値1.Value = wsStart.Cells(l, 2) !数値2.Value = wsStart.Cells(l, 3) !数値3.Value = wsStart.Cells(l, 4) !数値4.Value = wsStart.Cells(l, 5) .Update End If Next l End With myRS.Close: Set myRS = Nothing myConn.Close: Set myConn = Nothing End Sub
試したこと
・.MoveNextなどで調整:インデックス(日付)などを取得していると考えたため。
・取得の確認:Debug.Printでエクセル上の日付データなどが取得できているか確認。
・文法の確認:もう一度見直しや意味があっているのか確認した。
0 コメント