MS Access Tips/Sample and VBA and Blog customize etc...

オプショングループで複数のYes/No型フィールドを対象に抽出する

Yahoo!知恵袋 に下記のような質問がありました。(少し改変してます。)サンプルを作成して動作確認したので備忘用としてアップしておきます。

名簿というテーブルにID、名前、連絡先・・・etcの他に、Yes/No型の 犬、猫、猿、鳥、他 という様に好きな動物をチェックをつける項目があります。これは複数可能になってます。「ジャンル別フォーム」というフォームを作り、フォームヘッダーにオプショングループを配置して、「犬」、「猫」、「猿」、「鳥」、「他」、「ALL」 というトグルボタンを配置して、それを選択することで、該当するデータを表示されるようにしたい。

オリジナルは、ACCESS オプショングループを使った表示方法についてです。

FrmOptionFilter.png

難易度:

サンプル1

テーブル名 名簿
フィールド ID、名前、連絡先、・・・の他に、犬、猫、猿、鳥、他 のYea/No型のフィールドがある。

フォーム名 ジャンル別フォーム
ヘッダーに、オプショングループ「フレーム1」を配置。
その中に、トグルボタンを6個配置する。

標題  オプション値
---------------------
犬   1
猫   2
猿   3
鳥   4
他   5
ALL   6

オプショングループ「フレーム1」の「規定値」プロパティは、6

フォームのレコードソースは、名簿 にして、ビルドボタンを押します。クエリのデザインビューが開きますので、そこで、必要なフィールドを表示させて、さらに下記のフィールドを追加します。

フィールド Choose(Nz([Forms]![ジャンル別フォーム]![フレーム1],6),[犬],[猫],[猿],[鳥],[他],True)
テーブル 名簿
表示
抽出条件 True

オプショングループの「更新後処理」プロパティのリストから [イベント プロシージャ] を選択して、ビルドボタンを押します。 VBAウィンドウが開きますので、そこに、 と記述します。

サンプル2

クエリを使わずに、FilterプロパティをVBAで設定するサンプルです。

テーブル、フォームは サンプル1 と同じですが、フォームのレコードソースは テーブルか抽出条件なしのクエリにします。

サンプルファイルが下記からダウンロードできます。
FrmOptionFilter_07.zip (Access 2007-2010 形式 - 30kb)
FrmOptionFilter.zip (Access 2002-2003 形式 - 24kb)
FrmOptionFilter_2k.zip (Access 2000 形式 - 21kb)


拍手する

8 Comments

はる says..."チェックボタンを複数選択して抽出"

はじめまして。
いま、アクセスで上記と同じような仕組みで抽出条件を作成しています。

帳票フォームにチェックボックスを使い、7項目をそれぞれ抽出しています。

それぞれのチェックボックスをYes/Noすることで抽出可能ですが、
2つ以上をチェックして集計したようにするには、どのように行えばよいのでしょうか。

現在は
Me.Filter = "あ=true"
Me.FilterOn = (Me!あ = True)

をそれぞれに『クリック時』にコードを記述しています。

ご教授いただけますようにお願いいたします。

2010.03.29 16:04 | URL | #4RtvEo.U [edit]
はる says..."追記です"

この検索する情報としては、個人情報で先ほどの
"あ" "い" "う" "え" "お" "か" "き" を抽出したあとに
さらに性別で絞り込みたいと思います。

性別は、コードで情報を持たせています。男性"1" 女性"2" です。

これも同じように、チェックボックスで選択後に

"あ"の中で、男性のみ抽出 や "う"の中で女性のみ抽出を
行えればと考えています。

続けてよろしくお願いいたします。

2010.03.29 16:14 | URL | #4RtvEo.U [edit]
hatena says..."具体的に情報を"

> それぞれのチェックボックスをYes/Noすることで抽出可能ですが、
> 2つ以上をチェックして集計したようにするには、どのように行えばよいのでしょうか。

「2つ以上をチェックして集計したようにする」というのが
具体的にどのような意味なのかちょっと理解できません。

"あ" "い" "う" "え" "お" "か" "き" というのが
フィールド名なのか抽出条件用のチェックボックス名なのか
も判別しませんし。

もう少し詳細かつ具体的な情報が必要ですね。

2010.03.30 01:52 | URL | #5uE6dEgY [edit]
はる says..."ごめんなさい"

おはようございます。
ごめんなさい。分かりにくい質問をしてしまいました。
機能としてできるかわからないのですが、
"あ" "い" "う" "え" "お" "か" "き" フィールド名です。
チェックボックス名は"あchB" "いchB" … としています。

"あ""い" のチェックボックスにチェックすると、両方ともにチェックしている
個人名が抽出されてなお、"男" "女" でさらに絞り込みたいと考えています。

上記のサンプル1ですと、、「犬」、「猫」、「猿」…とありますが、犬と猿をチェックして両方飼っている個人名を抽出し、なお雄と雌でしぼり込むというようなイメージになるのですが。

すいません。わかりますでしょうか。

よろしくお願いいたします。

2010.03.30 08:19 | URL | #4RtvEo.U [edit]
hatena says..."こんな感じかな?"

フォームモジュールに下記の関数を作成します。

Private Function SetFilter()
  Dim strFilter As String

  If Me.あchB Then strFilter = " And あ"
  If Me.いchB Then strFilter = strFilter & " And い"
  If Me.うchB Then strFilter = strFilter & " And う"
  If Me.えchB Then strFilter = strFilter & " And え"
  If Me.おchB Then strFilter = strFilter & " And お"

  Me.Filter = Mid(strFilter, 6)
  Me.FilterOn = strFilter <> ""
End Function

各チェックボックスの「更新後処理」欄に
=SetFilter()
と設定。

性別での抽出はこのコードをヒントに挑戦してみてください。

2010.03.30 21:43 | URL | #5uE6dEgY [edit]
はる says..."エラーの発生"

ありがとうございました。
上記のように作成いたしました。

チェックボックスをクリックしたところ、
イベントプロパティに指定した式 更新後処理 でエラーが発生しました:Nullの使い方が不正です
*マクロ名ユーザー定義関数名[イベントプロシージャー]以外の式が指定されています
*関数、イベント、マクロの評価でエラーが発生しています

と表示されます。

なんども申し訳ないです。どのようにすればよいのでしょうか。

2010.03.31 19:13 | URL | #- [edit]
hatena says..."Nullエラー対策"

> イベントプロパティに指定した式 更新後処理 でエラーが発生しました:Nullの使い方が不正です

各チェックボックスの「既定値」プロパティに「False」と設定してください。



2010.03.31 21:23 | URL | #5uE6dEgY [edit]
はる says..."ありがとうございました"

ありがとうございました。
抽出できるようになりました。

2010.04.01 19:23 | URL | #4RtvEo.U [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/126-4c8d09a8
該当の記事は見つかりませんでした。