Accessで、抽出条件を指定するフォームの作成は?

フォーム内で、「開始日: 1月4日 〜 終了日: 1月6日」などと指定して、期間内だけ集計して表示させたいです。
「○△にすればいい」というような「方法」ではなく、具体的なコードを希望しています。解決していただいた方1名様に、500ポイント贈呈いたします。
詳細は
http://www.geocities.jp/rstreaming/214.html

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

q.防御率 にWHERE句を追加すれば可能となります。

SELECT 〜〜〜〜

FROM 〜〜〜〜

WHERE 日付 Between Forms![現状呼び出し用]![開始日] And Forms![現状呼び出し用]![終了日]

GROUP BY 〜〜〜〜〜

〜〜〜〜〜の部分は既存の部分なので省略してます。

id:zaikk No.2

回答回数192ベストアンサー獲得回数2

コマンドボタンウィザードを使用して、フォームを開くボタンを作成すると、下記のようなコー

ドが生成されます。

------------------------------------

 stDocName = ”Frm結果”

 DoCmd.OpenForm stDocName, , , stLinkCriteria

------------------------------------

DoCmd.OpenForm という命令がフォームを開く命令なのですが、この命令の4つめの引数とし

て、SQL文のWHERE句に相当する条件を指定することができます。

サンプルプログラム中の下記のコードは stLinkCriteria に文字列で検索条件を格納します。

この例では、2つのフィールドに対する条件が、AND条件として作用します。

------------------------------------

 stLinkCriteria = ”true”

 Wktxt1 = Forms(”Frm検索条件”)!Txt商品コード.Value

 Wktxt2 = Forms(”Frm検索条件”)!Txt商品名.Value

 If IsNull(Wktxt1) Then

 Else

  stLinkCriteria = stLinkCriteria & ” and (商品コード = ’” & Wktxt1 & ”’)”

 End If

 If IsNull(Wktxt2) Then

 Else

  stLinkCriteria = stLinkCriteria & ” and (商品名 = ’” & Wktxt2 & ”’)”

 End If

------------------------------------

[Txt商品コード]と[Txt商品名]が、どちらも空の場合は stLinkCriteria の内容は ”True”

になるため、すべてのレコードが表示されます。

[Txt商品コード]のみに条件が入力された場合は、stLinkCriteria は ”True and (商品コー

ド = ’0001’)”のようになるため、入力された商品コードに一致するレコードのみ表示されま

す。

[Txt商品名]のみに条件が入力された場合は、stLinkCriteria は ”True and (商品名 = ’り

んご’)”のようになるため、入力された商品名に一致するレコードのみ表示されます。

[Txt商品コード]と[Txt商品名]の両方に条件が入力された場合は、stLinkCriteria

は ”True and (商品コード = ’0001’) and (商品名 = ’りんご’)”のようになるため、入力さ

れた商品コードと商品名に一致するレコードのみ表示されます。

無条件の際に ”True” を代入している理由は、”and” という文字列を接続する際の条件を複雑

にしないためでもあります。このようにしないと、前方の条件の有無を判断して”and” という

文字列を接続するかしないか判断することになります。

また、OR条件として接続する際は、最初の条件を ”True” ではなく ”False” にします。

(この場合、OR条件は正しく動作しますが、無条件の場合にすべてのレコードが表示されなくな

ります。)

------------------------------------

 stLinkCriteria = False”

 Wktxt1 = Forms(”Frm検索条件”)!Txt商品コード.Value

 Wktxt2 = Forms(”Frm検索条件”)!Txt商品名.Value

 If IsNull(Wktxt1) Then

 Else

  stLinkCriteria = stLinkCriteria & ” or (商品コード = ’” & Wktxt1 & ”’)”

 End If

 If IsNull(Wktxt2) Then

 Else

  stLinkCriteria = stLinkCriteria & ” or (商品名 = ’” & Wktxt2 & ”’)”

 End If

------------------------------------

部分一致条件とするには、Like演算子を使用します。

------------------------------------

 stLinkCriteria = ”true”

 Wktxt1 = Forms(”Frm検索条件”)!Txt商品コード.Value

 Wktxt2 = Forms(”Frm検索条件”)!Txt商品名.Value

 If IsNull(Wktxt1) Then

 Else

  stLinkCriteria = stLinkCriteria & ” and (商品コード like ’*” & Wktxt1 & ”*’)”

 End If

 If IsNull(Wktxt2) Then

 Else

  stLinkCriteria = stLinkCriteria & ” and (商品名 like ’*” & Wktxt2 & ”*’)”

 End If

------------------------------------

以上

id:donmabo No.3

回答回数26ベストアンサー獲得回数1

http://www.hatena.ne.jp/1108352216#

人力検索はてな - Accessで、抽出条件を指定するフォームの作成は? フォーム内で、「開始日: 1月4日 〜 終了日: 1月6日」などと指定して、期間内だけ集計して表示させたいです。 「○△にす..

その他から

1は クエリ【q_防御率】のデザインビューで「防御率」を右クリックして「プロパティ」を選び,フィールドプロパティ(クエリプロパティになったら,もう一度フィールドをクリック)で書式を「固定」にする。

2は クエリプロパティの「並べかえ」に「q_防御率.防御率」を入れる。

期間指定の方法

仮に,提示されたフォーム名を「防御率」(自分で試したもので,ついこうしてしまったので),テキストボックス名を「開始日」「終了日」とします。

クエリ【q_防御率】のデザインビューで,「成績」テーブルの「日付」を下のデザイングリッドに「非表示」で追加し,集計欄は「Where条件」に。

そして,下の抽出条件に

  Between [Forms]![防御率]![開始日] And [Forms]![防御率]![終了日]

を入れます。

フォームが開いていない状態でこのクエリを開こうとすると「開始日」を聞いてきますが,開始日,終了日を入れてからボタンをクリックする形で使えば問題ありません。

id:radio3

先の方へのコメントが書けなくなってしまったので、こちらに記入させていただきます。

kn1967様

ありがとうございます。ただ、[cmd防御率]クリックしても望みの結果になりません。

zaikk様

ありがとうございます。良さそうなのですが、プロシージャを修正してみましたが、期待通りになりません。

donmabo様

ありがとうございます! その他の1,2 みごとに解決できました! ありがとうございます。期間指定のほうは、動かなくはないのですが、全期間を集計(期間指定なし)する時に、いちいち開始、終了日を入力するのは不便です。

2005/02/14 17:46:28
id:donmabo No.4

回答回数26ベストアンサー獲得回数1

ポイント70pt

http://homepage3.nifty.com/ohno-atlas/index.htm

大野悟の部屋(パソコン編)

回答時にエラーがでたので,(二重回答とか)おかしくなっていたらごめんなさい。

URLはダミーです。

>全期間を集計(期間指定なし)する時に、いちいち開始、終了日を入力するのは不便です。

全期間用のボタンを作るとかいろいろな対応のしかたがありますが,

たとえば,テキストボックスをあと2つ作り,「集計開始日」「集計終了日」とします。この2つは書式の可視プロパティを「いいえ」にします。同時に,【q_防御率】のデザインビューのBetweenで使った「開始日」「終了日」を「集計開始日」「集計終了日」に変更します。

また,チェックボックスを1つ作り,「全期間」とします。

【q_防御率】をもとに,たとえば「防御率表示」という名前のフォームが作ってあったとして,[防御率]ボタンのクリック時イベントを次のようにします。(全期間を1/1〜1/31として)

Private Sub 防御率_Click()

With Me

If .全期間.Value = True Then

.集計開始日 = #1/1/2005#

.集計終了日 = #1/31/2005#

Else

.集計開始日 = .開始日

.集計終了日 = .終了日

End If

End With

DoCmd.OpenForm ”防御率表示”, acFormDS

End Sub

全期間チェックボックスがクリックしてあれば,開始日,終了日がどうなっていても,全期間が表示されます。

老婆心ながら,「開始日」の既定値としてシーズン開始日,「終了日」の既定値として「Date()」を入れてあるとは思いますが,念のため……。

また,その他の2ですが,先ほどのはご質問に限定した答えです。「並べかえ」を防御率だけではなくいろいろやりたい場合,クエリ【q_防御率】をもとにした「フィールドがまったく同じ」クエリをもう1つ作ってください。そこで,「並べかえ」を指定すれば,Accessから文句をいわれることはありません(もちろん,ここで防御率による並べかえもできます)。

id:radio3

ありがとうございます。結構特殊なやり方が必要なんですかね... 一般的な望みだと思ってるのですが... 開始日:1/4 終了日:1/7 で、表示が全期間というのはよろしくないような...

解決できないので、質問しなおします。ありがとうございました。

2005/02/14 23:42:10

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません