Access クエリのデータ型について

このQ&Aのポイント
  • AccessでPablic変数を日付範囲指定、クエリの抽出条件に指定したのですが、「抽出条件でデータ型が一致しません。」とのエラーメッセージで抽出出来ません。
  • デバッグの為、"GetDate()"の戻り値を、メッセージボックスで表示してますが、戻り値は正常とおもわれますが、「抽出条件でデータ型が一致しません。」でクエリが実行できません。
  • どうすれば、日付範囲をPablic変数から指定出来るか、お教え頂けましたら幸いです。ちなみに、Pablic変数にしているのは、他のクエリでもこの日付範囲を使いたい為です。もし、ほかに良い処理方法が有れば、ご教授ください。
回答を見る
  • ベストアンサー

Access クエリのデータ型について

AccessでPablic変数を日付範囲指定、クエリの抽出条件に指定したのですが、「抽出条件でデータ型が一致しません。」とのエラーメッセージで抽出出来ません。 【処理フロー】 1.フォームで、開始日と終了日をPublic変数へ格納 2.データ抽出クエリの日付条件に"GetData()"Public Functin VBAで変数を格納した値をクエリの抽出条件に返す。 《変数》 '開始日の宣言 Public sDate As Date '終了日の宣言 Public eDate As Date 《GetData()》 Public Function GetDate() MsgBox "開始日は、" & sDate & vbCrLf & "終了日は、" & eDate GetDate = ">=#" & sDate & "# And <=#" & eDate & "#" MsgBox ("Where文は、" & GetDate) End Function デバッグの為、"GetDate()"の戻り値を、メッセージボックスで表示してますが、戻り値は正常とおもわれますが、「抽出条件でデータ型が一致しません。」でクエリが実行できません。 ここを参考に、上記仕様にしました。 http://www.tsware.jp/tips/tips_369.htm どうすれば、日付範囲をPablic変数から指定出来るか、お教え頂けましたら幸いです。 ちなみに、Pablic変数にしているのは、他のクエリでもこの日付範囲を使いたい為です。 もし、ほかに良い処理方法が有れば、ご教授ください。

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

  • ベストアンサー
回答No.1

GetDate = ">=#" & sDate & "# And <=#" & eDate & "#" と文字列を & で結合してますので、GetDate の返り値は文字列になります。 おそらく日付型のフィールドの抽出条件にこの関数を設定していると思われますので、当然「抽出条件でデータ型が一致しません。」とのエラーになります。 >=#2013/1/1# And <=#2014/1/1# というような式を返したいと期待しているのだと思いますが、 そもそも関数は値しか返すことはできません。 Public変数を使いたいのなら、 Public sDate As Date Public eDate As Date Public Function GetSDate() As Date GetSDate = sDate End Function Public Function GetEDate() As Date GetEDate = eDate End Function として、クエリの日付型フィールドの抽出条件の式を下記のようにします。 >= GetSDate And <= GetEDate

sujinosuke00
質問者

お礼

意味もちゃんと理解しないで、"&"で安易に結合していたのが原因でした。 お教え頂いた内容で、完璧に実現できました。 ありがとうございます。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

投稿時にMsgBoxのWhere文を書いて欲しいですね。 Date型なんだからFormat文で整形でしょうね。 Where条件に#で囲んだ日付を書く時、元が英語圏のソフトだけに mm/dd/yyyy が良いらしい。

sujinosuke00
質問者

お礼

そうなんです、Format文も考えたんですが、参考に出来るサイトが見つからず、安易に"&"で結合して返そうしました。 ご意見ありがとうございました。

関連するQ&A

  • Access クエリで変数を参照するとき

    モジュールのPublic変数をクエリから参照するとき、 Public Function getdata() As Integer getdata = 1 End Function と記述しておけき、 クエリの抽出条件をgetdata()にしておくと クエリの抽出条件に 「1」 と書いたのと同じになりますが、 クエリの抽出条件の欄に「1 Or 2 Or 3」とした時と同じ状況を作りだしたい時、 モジュールの方には Public Function getdata() As Integer  getdata = 1 Or 2 Or 3 End Function 「・・・・Integer」ではマズイわけで、なんと記述したらよいか教えて下さい。

  • VBA 日付型を8桁数値へ変換

    VBAの中で、Date型の日付をバッチファイルに渡す時に、8桁数値へ変換したいのですが、0埋めのやり方が分からずに困っております。 Date型 yyyy/mm/dd 8桁数値 yyyymmdd Private Sub cmdBSubmit_Click() Dim rc As Integer Dim sDate As Date Dim eDate As Date '開始日・終了日処理 sDate = DateAdd("d", -5, txtsDate) eDate = DateAdd("d", 5, txteDate) Debug.Print "----------------------" Debug.Print "開始日-5:" & sDate Debug.Print "終了日+5:" & eDate 'パブリック変数へ、日付格納 sDateP = Year(sDate) & Month(sDate) & Day(sDate) eDateP = Year(eDate) & Month(eDate) & Day(eDate) Debug.Print "----------------------" Debug.Print "開始日:" & sDateP Debug.Print "終了日:" & eDateP rc = MsgBox("開始日 : " & sDate & vbCrLf & _ "終了日 : " & eDate & vbCrLf & _ "抽出を開始します宜しいですか?", vbYesNo + vbQuestion, "確認") If rc = vbYes Then '集計バッチを実行 'MsgBox "実行" Call 抽出 Else '中止 MsgBox "中止" End If End Sub 'パブリック変数へ、日付格納 sDateP = Year(sDate) & Month(sDate) & Day(sDate) eDateP = Year(eDate) & Month(eDate) & Day(eDate) この書き方だと、月・日が一桁の場合、例えば「2013/01/01」だと、”201311”になってしまいます。 これを、"20130101"にしたいのですが、どう書けば宜しいでしょか? 最初から、8桁日付で入力すればよいのでしょうか、入力した日付の前後5日を自動的に増やす必要がある為に上記の仕様にしてます。

  • Accessのクエリについて

    お世話になります。 テーブル内の[出荷日]というフィールドに対して、 「出荷日1ヶ月前のレコード」を抽出しようと考えてます。 クエリ実行時に「日付」をパラメータ入力して、 その日付より1ヶ月前の出荷日のデータを出したいのです。 フィールドに対する抽出条件として、 <=[日付]-30 という条件を指定して実行したのですが、うまく いきませんでした。 どのように設定すればよいでしょうか? ご教授よろしくお願いします。

  • Access2000:クエリに値(抽出条件値)を返す

    クエリに抽出条件として、 Between [いつから?(例:200504)] And [いつまで?(例:200504)] と指定してあります。 マクロに登録されたクエリを実行すると必要パラメータとしてダイアログがたちあがるものです。 これを自動的にVBAで日付を算出し、上記クエリに値を返すことをしたいのですが記述方法がわかりません。 VBAで作成した関数の戻り値を上記クエリの抽出条件の欄に返す方法はありますか? よろしくお願いいたします。

  • アクセスのクエリで困ってます。

    契約日から6ヶ月めの日付をだして、さらにその日を検索したいんですが・・・ テーブルに契約日のデータがあります。 クエリで、    フィールドに6ヶ月: DateSerial(Year([竣工金入金日]),Month([竣工金入金日])+7,Day([竣工金入金日]))    抽出条件にBetween [開始日] And [最終日] としました。 抽出条件を入れなければ正常に値がでましたが、 抽出条件を入れると  ”式が正しく入力されていないか、複雑すぎるために評価出来ません。たとえば、数式に複雑な要素が多すぎます。変数に式の一部を割り当て、式を簡単にして下さい。” という、エラーメッセージが出てしまいます。 解消する方法を教えて下さい。

  • Accessのクエリのデータ抽出のエラー?について

    お世話になります。 Accessのクエリでのデータ抽出について教えてください。 テーブルからフィールドを商品コードと出荷日の2つを選択し、 集計を使用して、商品コードでグループ化して、出荷日で最大にします。 すると、抽出条件で商品コードを指定すると抽出できるのですが、抽出条件で 指定せずすべてのデータを抽出すると出てこない商品コードがあります。 たとえば[A]という商品コードを抽出条件に指定すると抽出できるのですが、 抽出条件で指定せずすべてのデータを抽出するとこの[A]という商品コードが 抽出されません。 何が理由なのかお分かりになりましたらどうぞよろしくお願いいたします。 当方SQLがわかりませんのでクエリのデザインビューでご説明いただけますと 幸いです。

  • ACCESSのクエリについての質問です。

    社員名簿のクエリの方法で悩んでいます。社員名簿のテーブルには「入社日」「退職日」と産前産後休暇や怪我等で長期休暇をとる従業員も少なくないものですので「長期休務開始日」「復職日」の4つの日付があります。 たとえば9月1日から9月30日に在籍していた社員をクエリで抽出するために 「入社日」の抽出条件に→ <=#2008/09/30# 「退職日」の抽出条件に→ >=#2008/09/01# Or Is Null と入社退社に対しては分かるのですが、 「長期休務開始日」「復職日」をどうしたらいいか分かりません。(半日悩みました) アクセスに詳しい方よろしくお願いします。 よろしくお願いします。

  • パラメータークエリの抽出ができません

    アクセスで、抽出条件に「>=[いつから] And <=[いつまで]」と日付の範囲指定をしてデータを抽出するクエリを作りましたが、表示されるパラメータに日付を入力して実行してもすべてのデータが表示されてしまいます。 どうしてでしょうか?

  • Access パラメータクエリの抽出条件で、月日だけの入力で2007年のデータを抽出したい

    Access のパラメータクエリで2007年の4/29~5/6までを月と日の指定だけで(4/29~5/6)選べるように記述するにはどのように書けばよいですか? 日付列の抽出条件に5/3などと記述すると2009年と判定され抽出できません。 一応抽出条件に、 2007\"/" & [(4/29~5/6)] と書いてみたのですがうまくできませんでした。 お願いします。

  • SQL Server2005のクエリで「今週のデータ」を抽出したいので

    SQL Server2005のクエリで「今週のデータ」を抽出したいのですがうまく出来ません。 between datename (weekday, getdate()) on datename(weekday, getdate() +6 ) 「今週の」という条件は、本日の日付から週始めの月曜日を算出して、その値にプラス6をした日曜日までのデータを取得、という感じで行いたいのですが、 肝心の月曜日の求め方が分かりません。 参考書やネットを調べても分からなかったため、この場をお借りして質問させていただきました。 何卒ご教授お願いいたします。