コード的な質問というよりは、方法についての質問です。
まず、実現したいことですが、以下のようなものを想定しています。
以前質問:startとgoalのAセルの日付データを比較し、goalにないデータを start から行ごとコピペするプログラムを考えています。
=>startからAccessDBに変更。つまりstartとAccessDBのAセルの日付データを比較し、AccessDBにないデータを start から行ごとコピペするプログラムを考えています。そのためAccessからデータを取得する必要があります。
書籍を見ていると、比較するためのデータ取得のために、Accessの日付データを取得する方法とSQLによりデータを出力する方法があるかと思うのですが、どちらが良いのでしょうか?どちらでも取得できるデータは同じですか?一般的にはどちらで記載されることが多いでしょうか?よろしくお願いいたします。
こちら以前質問した続きです。
前回質問URLです。
質問1:https://teratail.com/questions/8x4hz58p7q8s21
質問2:https://teratail.com/questions/6w0221ourt8sda
したいことイメージ
元データ(start)
日付 | 数値データ | 数値データ |
---|---|---|
11/26 | 1234 | 4567 |
11/27 | 1234 | 4567 |
11/28 | 1234 | 4567 |
コピペ先データ(AccessDB)
日付 | 数値データ | 数値データ |
---|---|---|
11/26 | 1234 | 4567 |
11/27 | 1234 | 4567 |
コピペ先データ(コピペ後)
日付 | 数値データ | 数値データ |
---|---|---|
11/26 | 1234 | 4567 |
11/27 | 1234 | 4567 |
11/28 | 1234 | 4567 |
以下、コード参照
vba
1Sub compare_and_copy_date() 2 3 Dim L As Long, lRow As Long, M As Long, mRow As Long 4 Dim wsStart As Worksheet: Set wsStart = ThisWorkbook.Sheets("start") 5 Dim wsGoal As Worksheet: Set wsGoal = ThisWorkbook.Sheets("goal") 6 Dim myConn As New ADODB.Connection 7 8 myConn.Open ConnectionString:= _ 9 "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 10 "Data Source=C:\Users\test.accdb" 11 myRS.Open Source:="test", ActiveConnection:=myConn, _ 12 CursorType:=adOpenStatic 13 14 '行すべてを表示 15 wsStart.Rows.Hidden = False 16 '行の最終行を取得 17 lRow = wsStart.Cells(Rows.Count, "A").End(xlUp).Row 18 mRow = wsGoal.Cells(Rows.Count, "A").End(xlUp).Row 19 20 '日付に一致しないデータをコピペ(現状はエクセル別シートだがアクセスのテーブルに変更) 21 For L = 2 To lRow 22 For M = 2 To mRow 23 If wsStart.Cells(L, 1).Value = wsGoal.Cells(M, 1).Value Then 24 Exit For 25 End If 26 Next M 27 If M > mRow Then 28 wsStart.Rows(L).Copy Destination:=wsGoal.Cells(Rows.Count, "A").End(xlUp).Offset(1) 29 End If 30 Next L 31End Sub
回答1件
あなたの回答
tips
プレビュー