• ベストアンサー

「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月のデータを取得できるのでしょうか? ご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.4

もうひとつ、方法がありました。 テーブルを直にオープンするのではなく、クエリを経由させます。 そのクエリで、[日付]の月部分を列として抜き出しておきます。 クエリ1 のSQLビュー SELECT *, Month([日付]) AS 月 FROM テーブル1; rs.Open "クエリ1", cn, adOpenKeyset, adLockOptimistic rs.Filter = "[月] = " & Month(Date)

noname#150256
質問者

お礼

すごいですね! いろんな方法があるのですね 大変参考になりました。ご回答ありがとうございます。

その他の回答 (3)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

ごめんなさい。 検証せずに書いてしまいました。 確かに 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 にするしかないかも。 失礼しました。

noname#150256
質問者

お礼

どちらを試してもちゃんとできました!!!!!! 再度ご回答ありがとうございます。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

> rs.Filter = ("日付 = " & "'" & Month(Date) & "'") を rs.Filter = "Month([日付]) = " & Month(Date) にしてみてください。 (今月という意味でしたら)

noname#150256
質問者

補足

ご回答ありがとうございます。 rs.Filter = "Month([日付]) = " & Month(Date) を試してみたら 「引数が間違った型か、許容範囲外、または競合しています。」 というエラーになってしまいました。 どうすればいいでしょう?

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

2月って、2009/02/01~2009/02/28と言うような条件を与える必要があるような感じがしますけど。 的はずれでしたらごめんなさい。(ADOの使用経験皆無なので)

noname#150256
質問者

お礼

なるほど! ということはBetweenを使うのかな?いろいろ試してみます。 ありがとうございます。

関連するQ&A