• ベストアンサー

ACCESSで複数条件でデータ抽出するフォームの作成

ACCESS2000で複数の条件を入力し、該当するデータを抽出するフォームを作成しています。どんな方法がありますか?簡単に出来る方法をお教えください。 具体的には、売上明細データを検索します。あらかじめ テーブル:売上明細データ をいろいろなマスタを参照している クエリ:売上明細クエリ を元に抽出します 条件は売上日付の日付1と日付2の項目と、伝票区分の項目です。 フォームの頭にテキストボックスを3つ作成し、日付1~日付2までの売上日付で 入力された伝票区分のもののみを表示させたいのです。 検索というコンボボタンを配置し、クリック時にその下にクエリからの必要な表示項目を売上明細クエリから配置しています。 抽出する方法(条件の与え方)を教えてください。よろしくお願いいたします。

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

クエリの日付抽出条件欄に Between Nz(Forms!フォーム名!日付1,#1900/1/1#) and Nz(Forms!フォーム名!日付2,#2900/12/31#) 伝票区分の抽出条件欄に =Forms!フォーム名!伝票区分 or Forms!フォーム名!伝票区分 is null ボタンでフォームを再クエリします

viva123
質問者

補足

実際記述していただいたとおり設定をしたところ抽出できました! 本当にありがとうございます。 ところで次の問題がでてきました。検索ボタンと検索解除ボタンを設定しているのです。クエリで条件指定した場合、その条件の取り消しはどうすればよいのでしょうか。マクロの全レコードの表示も効かないし、マクロでフォームの日付1・日付2・伝票区分に値は代入できませんよね。どうすれば条件解除できるのでしょうか?重ね重ねよろしくお願いいたします!すみません初歩的な質問で・・・

その他の回答 (3)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

>Forms!フォーム名!日付1 is Null これを代入したのですか? これの値は日付1に何か入っているときにはFalseです そうじゃなくNullを代入するのですよ

viva123
質問者

お礼

ありがとうございました。少し勘違いしていたようです・・・ 無事解決しました。出来の悪い質問者ですみません! 本当にありがとうございました!これからもよろしくお願いいたします!

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>マクロでフォームの日付1・日付2・伝票区分に値は代入できませんよね。 値じゃなくNullを代入してから再クエリします

viva123
質問者

補足

もちろんNullを代入して再クエリをかけましたが解除できませんでした・・・ マクロのアクションの値の代入で Forms!フォーム名!日付1 is Null で同じく日付2、伝票区分を設定しました。その後再クエリをかけました。違うのでしょうか?重ねてすみません・・・

noname#140971
noname#140971
回答No.1

売上明細: ID___売上日付______明細区分___伝票番号 1____2007/10/25_____________0___2007100001 2____2007/10/26_____________0___2007100002 3____2007/10/27_____________1___2007100003 売上明細 クエリ: SELECT Month([売上日付]) AS 月次, * FROM 売上明細 WHERE (((Month([売上日付]))=10)); Private Sub コマンド_抽出実行_Click()   Dim dteSHiduke As Date   Dim dteEHiduke As Date   Dim intKubun  As Integer   Dim strWhere  As String      dteSHiduke = Nz(Me.抽出開始日, "1999/12/31")   dteEHiduke = Nz(Me.抽出終了日, "1999/01/01")   intKubun = NZ(Me.抽出区分, 0)   If dteSHiduke <= dteEHiduke Then     strWhere = "明細区分=" & intKubun & _           " AND 売上日付>=#" & dteSHiduke & "# AND 売上日付<=#" & dteEHiduke & "#"     Me.RecordSource = "SELECT * FROM [売上明細 クエリ] WHERE " & strWhere     Me.Requery   Else     MsgBox "抽出する日付が定かではありませんので中止します!"   End If End Sub   ・・・・・   If dteSHiduke <= dteEHiduke Then     Me.FilterOn = False     Me.Filter = "明細区分=" & intKubun & _           " AND 売上日付 BETWEEN #" & dteSHiduke & "# AND #" & dteEHiduke & "#"     Me.FilterOn = True   Else   ・・・・・ どっちでもOKです。 ただし、もしかしたら、ネットワークが混雑しないのは後者かもです。

viva123
質問者

お礼

いつもご丁寧な回答ありがとうございます!! 只今VBA特訓中で、とっても参考になりました。Private Sub以降の記述を何とか読解中です!でもSQLがまだこれからと言うところなので、十分に理解が出来てはいませんが、少しつかめてきたと思います。本当に詳しく解説いただき感謝感激です!これからもよろしくお願いします!

関連するQ&A