- ベストアンサー
「2月」でフィルタをかけたい。
オフィス2003です。 テーブル1の 日付フィールドには「yyyy/mm/dd hh:nn」形式でいくつかの日付の入力されたレコードがあります。 エクセルのADOを使って テーブル1から「2月」のレコードをフィルタをかけて抽出したいのですがうまく行きません。 Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\db1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = ("日付 = " & "'" & Month(Date) & "'") rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub を実行すると「種類が一致しません」というエラーになります。 どうすれば2月のデータを取得できるのでしょうか? ご教授よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
もうひとつ、方法がありました。 テーブルを直にオープンするのではなく、クエリを経由させます。 そのクエリで、[日付]の月部分を列として抜き出しておきます。 クエリ1 のSQLビュー SELECT *, Month([日付]) AS 月 FROM テーブル1; rs.Open "クエリ1", cn, adOpenKeyset, adLockOptimistic rs.Filter = "[月] = " & Month(Date)
その他の回答 (3)
- 30246kiku
- ベストアンサー率73% (370/504)
ごめんなさい。 検証せずに書いてしまいました。 確かに Filter ではエラーになりますね。 Filter で行うには以下の様にするしかないようです。 Dim dt As Date dt = DateValue(Format(Date, "yyyy/mm/01")) rs.Filter = "[日付] >= #" & Format(dt, "yyyy/mm/dd") & "# AND [日付] < #" _ & Format(DateAdd("m", 1, dt), "yyyy/mm/dd") & "#" ([日付] >= #2009/02/01# AND [日付] < #2009/03/01# を作ります) でもこれでは、今年の今月という意味になってしまうので、今月にこだわるのなら > rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic を rs.Source = "SELECT * FROM テーブル1 WHERE Month([日付])=" & Month(Date) & ";" rs.Open , cn, adOpenKeyset, adLockOptimistic にするしかないかも。 失礼しました。
お礼
どちらを試してもちゃんとできました!!!!!! 再度ご回答ありがとうございます。
- 30246kiku
- ベストアンサー率73% (370/504)
> rs.Filter = ("日付 = " & "'" & Month(Date) & "'") を rs.Filter = "Month([日付]) = " & Month(Date) にしてみてください。 (今月という意味でしたら)
補足
ご回答ありがとうございます。 rs.Filter = "Month([日付]) = " & Month(Date) を試してみたら 「引数が間違った型か、許容範囲外、または競合しています。」 というエラーになってしまいました。 どうすればいいでしょう?
- n-jun
- ベストアンサー率33% (959/2873)
2月って、2009/02/01~2009/02/28と言うような条件を与える必要があるような感じがしますけど。 的はずれでしたらごめんなさい。(ADOの使用経験皆無なので)
お礼
なるほど! ということはBetweenを使うのかな?いろいろ試してみます。 ありがとうございます。
お礼
すごいですね! いろんな方法があるのですね 大変参考になりました。ご回答ありがとうございます。