次の方法で共有

【アクセス2000】チェックボックスとテキストボックスとコンボボックスを組み合わせた検索について

Anonymous
2012-07-31T03:41:51+00:00

皆様、お世話になります。

本日はアクセス2000を使った、絞り込み検索についてご質問させてください。

【使用ソフト】アクセス2000

【OS】windowsXP

【システムの目的と概要】

目的:新規出店検討場所と類似している自社営業物販店を、300店舗の中から抽出したい。

概要:抽出する条件は「店舗面積」「店舗周辺の人口数」「従業者数」の3つ

画面イメージ

            (検索項目名)    (検討店舗の数値)      (抽出条件)       _________________________

                            (手入力)                     →|   サブフォーム

**□        面積     [        ]㎡    [         ]**→|  既存店舗一覧を表示

(↑チェックボックス)             (↑テキストボックス)   (↑コンボボックス)   →|  検索条件によって絞り込んで再表示

**□        人口     [        ]㎡    [         ]**→|

**□        従業者    [        ]㎡    [         ]**→|_________________________

フォーム名:近似店舗抽出システム テキストボックス名:BOXBI面積(or人口、従業者) コンボボックス名:コンボBI面積(or人口、従業者)

質問内容

上記はフォームイメージです。画面右側にサブフォームを配置し、既存店リストを表示させています。

絞りたい項目(面積or人口…)のチェックボックスを選択し、検討店舗の面積を手入力し、抽出条件を選んで(±10%、±20%、±30%の選択式)

再クエリボタンを押すと、右側のサブフォームに結果が表示させるイメージを考えております。

→面積のチェックボックスを選択し、面積を6000(㎡)と手入力、抽出条件を±30%を選択すると、面積が4200㎡~7800㎡の既存店舗が

抽出されるイメージです。

チェックボックスで「面積」だけ選択した場合は、面積条件のみで絞り込み、「面積」と「人口」のチェックボックスを選択した場合は

and条件で、面積と人口条件双方で絞り込みをしたいです。

サブフォームは、マスターテーブルから必要な項目をクエリ抽出し、表示させています。

クエリのデザインプレビューの抽出条件のところに、[Forms]![近似店舗抽出システム]!~から始まる命令文を追記するのだと思いますが

こちらをどう記述したらよいかアドバイスをお願いいたします。

長々とすみませんが、ご協力宜しくお願いいたします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2012-08-10T10:28:36+00:00

MukkuMuku さん、いつもアドバイスありがとうございます。

パダワン(アクセス) さん、再度返信していただきありがとうございます。

わたくしから追加でコメントさせていただきますね。

Access Club の情報ではあるのですが、似たような症状を見つけましたので、以下のサイトを参考にしてみてはどうでしょう。

テキストボックスからサブフォームにフィルタをかける

※ [次項] でページを変えることができます。

※ 一番最後のページが参考になるかもしれません。

サブフォームでのフィルター使用の抽出条件についてですが、こちらの件も以下のサイトを参考にしてみてください。

サブフォームでのフィルター使用の抽出条件文について

※ 始めのページの一番下の内容が参考になるかと思います。

上記のサイトにも書かれているのですが、クエリを元にしてデータシート形式のフォームを作成、メインフォームに新しく作成したフォームをサブフォームとして読み込んで抽出してみる方法を試してみてはどうでしょうか。

参考になればよいのですが、試された結果についても遠慮なく返信してみてくださいね。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2012-08-02T04:58:44+00:00

このような複雑かつ動的に条件数が変化する抽出は、クエリですると条件式が複雑になってしまい、メンテナンス性が悪くなるのでVBAで条件式を生成してフィルターを掛けるのがおすすめです。

例えば、各コントロール名を下記のようだと仮定して、

チェックボックス chk面積、chk人口、chk従業員

テキストボックス txt面積、txt人口、txt従業員

コンボボックス  cmb面積、cmb人口、cmb従業員

サブフォームコントロール sf店舗一覧

コマンドボタン cmd抽出

各コンボボックスの設定

値集合ソース 0.3;"±30%";0.2;"±20%";0.1;"±10%"

連結列 1

列数  2

列幅  0cm

サブフォームのレコードソースには抽出条件は設定しない。

cmd抽出のクリック時のイベントプロシージャに下記のように記述。

Private Sub cmd抽出_Click()

Dim stFilter As String

If chk面積 = True And IsNumeric(Me.txt面積) = True Then

stFilter = stFilter & " And (面積 Between " & Me.txt面積 * (1 - Me.cmb面積) & _

" And " & Me.txt面積 * (1 + Me.cmb面積) & ")"

End If

If chk人口 = True And IsNumeric(Me.txt人口) = True Then

stFilter = stFilter & " And (人口 Between " & Me.txt人口 * (1 - Me.cmb人口) & _

" And " & Me.txt人口 * (1 + Me.cmb人口) & ")"

End If

If chk従業員 = True And IsNumeric(Me.txt従業員) = True Then

stFilter = stFilter & " And (従業員 Between " & Me.txt従業員 * (1 - Me.cmb従業員) & _

" And " & Me.txt従業員 * (1 + Me.cmb従業員) & ")"

End If

Me.sf店舗一覧.Form.Filter = Mid(stFilter, 5)

Me.sf店舗一覧.Form.FilterOn = (stFilter <> "")

End Sub

この回答は役に立ちましたか?

0 件のコメント コメントはありません

6 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2012-08-08T06:01:28+00:00

    hatena19

    丁寧な返信ありがとうございました。

    アドバイスいただいた通り入力してみたのですが、エラーが発生し要因がわかりません

    実行ボタンを押したときに「実行時エラー'2455' 指定した式に、Filter プロパティに対する不正な参照が含まれます。」と表記されます。

    デバックボタンを押すと、最後の「Me.サブフォーム1.Form.Filter = Mid(stFilter, 5)」のところに黄色のハイライトが設定されています。

    サブフォームコントロール名(サブフォームの名前)は「サブフォーム1」なので、間違いはないとおもうのですが・・・。

    この説明で何か要因と思われる箇所はございますでしょうか?

    お手すきの時間にご返答いただけると嬉しく思います。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2012-08-02T02:25:30+00:00

    回答ありがとうございました。

    いきなりいろいろ聞きすぎてしまったのと、自分のレベルが低かったため、お答え頂いた内容が理解できませんでした。

    せっかくお答え頂いたのにすみません。

    また宜しくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2012-07-31T21:52:45+00:00

    MukkuMukuです。

    面積を例として

    フォーム:Form1

    チェックボックス:ck面積 (規定値:False)

    テキストボックス:txt面積 (ck面積=Trueの場合必須)

    コンボボックス:cmb面積 (0.3, 0.2, 0.1)

    した場合、コントロールソースクエリデザイナ上の面積フィールドの抽出条件は、

    (Between [Forms]![Form1]!txt面積*(1-[Forms]![Form1]!cmd面積) And [Forms]![Form1]!txt面積*(1+[Forms]![Form1]!cmd面積)) Or ([Forms]![Form1]!ck面積 = False)

    てな感じになるかな。ただし、仕上がるSQLは長ーくなるはず。

    フォーム側でクエリに渡すべき数値を作るとか、フィルタ条件文字列をマクロで組み上げの方が考えやすいのかもしれない。お好みですけど。

    んー、なんか違う気がするけど、時間がないので検討せず。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません