次のコードを使用してExcelにクエリを実行し、特定の条件に一致する行を取得しています。
For i = 90 To Worksheets("My Sheet").Range("E65536").End(xlUp).Row
' This for loop is to iterate through the list of dates in the excel sheet
Value = Worksheets("My Sheet").Range("E" & i).Value - #1/1/1900# + 2
'Using the above line i am converting the date i want to filter the date
'into numeric
strQuery = "SELECT * FROM [My another sheet$A3:I" & LastRow & "] WHERE [Date1]< " &
Value & " AND ([somefield] = 'dog' or [somefield] = 'cat')"
' Here in the SQL query i am trying to see how many cats and dogs are satisfying with my date criteria
Set rs = New ADODB.Recordset
With rs
.ActiveConnection = cn
.Source = strQuery
.CursorType = adOpenDynamic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open
End With
' Executing the select query on excel as database using ADODB api
If rs.RecordCount = 0 Then
Else
rs.MoveLast
End If
Worksheets("My Sheet").Range("F" & i).Value = rs.RecordCount
rs.Close
' Moving to the next date in the list
Next
私はこのようなデータを持っています
- 2012年1月1日犬A
- 2012年2月1日猫B
- 2012年3月1日猫C
- 2012年4月1日ラットD
- 2012年5月1日猫E
- 2012年6月1日オウムF
私のリストにはこのような日付があります
- 2010年12月31日-ここで、この日付より前の日付でショップから購入された猫と犬の数を確認する必要があります
- 2011年12月31日-ここで、この日付より前の日付でショップから購入された猫と犬の数を確認する必要があります
forループの目的は、これらの日付を反復処理し、選択クエリを変更することです。これは、上記のコードから受け取った値です。
32
35
37
44
57
64
71
78
84
86
89
91
91
32
36
37
47
57
66
73
81
84
89
90
91
91
しかし、レコードカウントプロパティを使用する前にコマンドを発行する必要があるように、どこかで読んだ
これらの値を取得する必要が
rs.movelast
ありますが、それでも一部の反復で間違った結果が表示されます。
ループが原因で、同じレコードセットを使用しています。
カウントが必要であることがわかっている理由は、Excel列で同じフィルタリングを実行しただけで、異なるカウントが表示されているためです。
列でデータ型が変更されることはありません。つまり、各列のデータ構造は最初から最後まで同じです。
これについて私を助けてください。
質問が明確であることを願っています。詳細が必要な場合はお知らせください。