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

オプショングループで50音選択

名簿や得意先リストや商品リストなどで件数が多いときに、フリガナで50音で選択できると、素早く目的のレコードを選択することができて便利です。

そこで下記のような50音選択のオプションボタンでフォームにフィルタをかけるサンプルを紹介します。

Frm50OnSelect.gif

難易度:

使用法

標準モジュールに下記の関数群をコピーして貼り付けます。

修正(2009/12/14): 不足コードがありましたので、追加しました。

追記(2013/09/14): Access2007以降で追加された「分割フォーム」の場合エラーがでます。その場合は、コード中の CodeContextObject を Screen.ActiveForm に置換してください。

下記のサンプルMDBをダウンロードして、フォームをデザインビューで開きます。オプショングループを2つ(op50音選択 と op段選択)をコピーして、利用したいフォームに貼り付けます。

それぞれのオプショングループの更新後処理に設定してある関数の引数を抽出対象フィールド名に変更します。もし、フィールド名がフリガナだったらそのままで結構です。

設定例

オプショングループ「Op50音選択」の更新後処理
=fnc50音選択("フリガナ")

オプショングループ「op段選択」の更新後処理
=fnc段選択("フリガナ")

サンプルファイルが下記からダウンロードできます。
Frm50OnSelect_07.zip (Access 2007-2010 形式 - 39kb)
Frm50OnSelect.zip (Access 2002-2003 形式 - 30kb)
Frm50OnSelect_2k.zip (Access 2000 形式 - 28kb)

拍手する

23 Comments

てつ says..."ソースを貼り付けたのですが"

はじめまして。「オプショングループで50音選択」のTipsを利用したいと思い、ソースを貼り付けたところ、更新後処理でエラーが出たようなのです。
動作としては、最初に選択するトグルボタンは問題なく選択できます。次に、op段選択のボタンのどれかを選択しようとすると、以下のようなエラーが出ます。
「指定した式にMicrosoft Accessが見つけることができない関数名が含まれています。」というものです。
このエラーはどのようにして回避したらいいのでしょうか。
サンプルでは問題なく動作するようなので、自分の作っているDBに何か書き加えるか、余計なコードが含まれているのか、といったところでしょうか。

2009.12.13 10:25 | URL | #gIYQI5Sw [edit]
hatena says..."てつさん、はじめまして。"

まずは、お使いのOSとAccessのバージョンを教えてください。

それと、「op段選択」の「更新後処理」の設定をコピーして貼り付けてもらえますか。

2009.12.13 11:07 | URL | #5uE6dEgY [edit]
てつ says..."op段選択"

こんにちは。お世話になります。
使用OSはWindowsXP(SP3)、Accessは2000を使っています。
「op段選択」の「更新後処理」の設定を
「=fnc段選択("番組名Aフリガナ")」として入力しました。
もう一つの別のDBにも同じ作業を行ったら、こちらは上手くいったのですが・・。

2009.12.14 10:38 | URL | #gIYQI5Sw [edit]
hatena says..."コード修正"

ブログに掲載しているコードを見直したら、「fnc段選択」関数の記述が抜けてました。
サンプルにはちゃんとあるのですが、コピーするときに、落としたようです。

ブログ記事の方は既に修正しました。

ご迷惑をおかけしました。

2009.12.14 11:05 | URL | #- [edit]
てつ says...""

今度は上手くいきました。ありがとうございました。(^^)

2009.12.15 00:31 | URL | #gIYQI5Sw [edit]
名無し says..."教えてください。"

この式にプラス部署のフィルタをかけるにはどのようにしたらよいですか?教えてください。

2012.02.15 15:34 | URL | #imuijwaw [edit]
hatena says..."re: 教えてください。"

サンプルのファイルを基に改良するという前提で説明します。

テーブル: 部署マスタ
フィールド: 部署名

というテーブルがありすべての部署名が入っているとします。
フォーム上に部署選択用のコンボボックスを配置して下記のように設定します。

コントロールソース (空白)
値集合ソース 部署マスタ
名前 cb部署選択

フォームのレコードソースのビルドボタンを押して、表示されるクエリデザインビューで、「部署」フィールドの抽出条件欄に下記のように設定します。

=[Forms]![F_得意先]![cb部署選択] Or [Forms]![F_得意先]![cb部署選択] Is Null

cb部署選択 の更新後処理で再クエリします。

Private Sub cb部署選択_AfterUpdate()
  Me.Requery
End Sub


以上です。

2012.02.15 16:21 | URL | #5uE6dEgY [edit]
初心者 says..."すいません。"

担当者に入社日、退社日のテーブルがあり、≪在職中≫と≪ALL≫でのフィルタはどうすればよいでしょう?教えてください。

2012.02.15 18:57 | URL | #imuijwaw [edit]
hatena says..."re: すいません。"

この記事とは直接関係なさそうな質問ですので、このページの上にあるメニューの BBS をクリックして、そこで質問しなおしてください。

また、何をしたいのかもう少し具体的に説明してください。

そのような抽出条件のクエリを作成したいのか、フォーム上でオプションボタンかコンボボックスで≪在職中≫と≪ALL≫を選択して切り替えたいのか、あるいは、それ以外のことなのか。

2012.02.15 19:06 | URL | #5uE6dEgY [edit]
Access初心者 says..."分割フォームでの使用不可?"

単票フォーム及び帳票フォームでは使用できているのですが、分割フォームで使用するとエラーが出るのですが、分割フォームでは使用できないのでしょうか?
分割フォームの場合、抽出対象フィールド名の設定が違うのでしょうか?

エラーメッセージは、下記の通りです。

実行エラー '2467':
指定した式で、閉じているかまたは存在しないオブジェクトを参照しています。

2013.09.13 14:54 | URL | #FIeeZbwE [edit]
hatena says..."re:分割フォームでの使用不可?"

サンプルを分割フォームにして確認してみたら、同様の現象が発生しました。
コード中の CodeContextObject で発生するようです。
分割フォームでは、CodeContextObject は使えないようですね。

CodeContextObject をすべて、Screen.ActiveForm に変更してみてください。
これで当方のサンプルでは正常に動作するようになりました。

2013.09.13 15:49 | URL | #5uE6dEgY [edit]
Access初心者 says..."re:re:分割フォームでの使用不可?"

CodeContextObject をすべて、Screen.ActiveForm に変更しましたらエラー無く動作するようになりました。

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

2013.09.17 09:05 | URL | #- [edit]
湘南JUN says..."クエリー"

オプショングループで50音選択は、クエリーは使用出来ないのですか。
クエリーを使用して作成しましたら、フイルターが使用出来ないです。

2014.01.02 17:42 | URL | #VL.LZc0Q [edit]
hatena says..."re:クエリー"

> オプショングループで50音選択は、クエリーは使用出来ないのですか。

クエリでも使用できます。

それぞれのオプショングループの更新後処理に設定してある関数の引数に正しいフィールド名を設定してますか。

オプショングループ「Op50音選択」の更新後処理
=fnc50音選択("フリガナ")

オプショングループ「op段選択」の更新後処理
=fnc段選択("フリガナ")

上記の「フリガナ」をクエリのフィールド名にしてください。

2014.01.02 21:34 | URL | #5uE6dEgY [edit]
湘南JUN says..."エラーが出ます"

オプショングループ「Op50音選択」の更新後処理
=fnc50音選択("フリガナ")
オプショングループ「op段選択」の更新後処理
=fnc段選択("フリガナ")

上記の「フリガナ」をクエリのフィールド名にしてください。

このエラーは、イベントのロジックの場所を評価できないためにイベントを実行できなかった場合に発生します。たとえば、フォームの "OnOpen/開く時" プロパティが =[フィールド] に設定されている場合、イベントが開始されたときに、マクロまたはイベントの名前が実行対象として予期されるため、このエラーが発生します。

2014.01.03 19:19 | URL | #VL.LZc0Q [edit]
hatena says..."re:エラーが出ます"

サンプルをダウンロードしてレコードソースをクエリにしてみてください。
問題なく動作するはずです。


考えられる原因は、

関数の引数に設定したフィールド名が違う。
関数名がちがう。
標準モジュールに関数を作成できていない。
標準モジュールの名前が関数名とかぶっている。

ぐらいかな。

これに該当しなければ、実物をみないと分からないですね。

2014.01.03 19:57 | URL | #5uE6dEgY [edit]
igachan says..."別のウィンドウを立ち上げて選択する。"

 こんばんは。お世話になっております。
現在、サンプルを参考に作成させて頂いております。レコードの移動に「前のレコードに移動」や「次のレコードに移動」のマクロをコマンドボタンに割り当てて作成しているのですが 「fnc段選択("フリガナ")」で抽出されたデータが大量になった場合コマンドボタンでの移動では「大変かな?」と思い

「fnc段選択("フリガナ")」」で抽出されたデータを別のウィンドウで表示して画面の移動はスクロールバーを使って行い、レコードを選択するときは該当するレコードをダブルクリックするとそのレコードが元の画面に表示される。

というようなことは可能でしょうか?

2014.04.06 18:53 | URL | #- [edit]
igachan says..."申し訳ありませんでした。"

hatenaさん、申し訳ありません。動いているサンプル拝見しました。先ほどお話ししたものそのものなんですね。いま、単票形式で作っていたので気がつきませんでした。コンメント欄にクエリでも可能と書いてありますので頑張ってやってみます。

2014.04.06 23:28 | URL | #- [edit]
ACCESS男 says..."フィルターを解除して表示を初期化するには"

いつも大変参考にさせていただいております。
今回のTipsでフィルターを行った後、初期状態に戻すコマンドボタンを付け加えました。。フィルターの解除はできるのですがして、オプションボックスを初期状態にする方法が思いつかず思案しております。
良い方法がありましたら、教えて頂けますか?
当方の環境は"Windows7 32bit","Access2013" です。
よろしくお願いします。

2016.11.29 16:09 | URL | #- [edit]
hatena says..."re:フィルターを解除して表示を初期化するには"

> 今回のTipsでフィルターを行った後、初期状態に戻すコマンドボタンを付け加えました。。フィルターの解除はできるのですがして、オプションボックスを初期状態にする方法が思いつかず思案しております。

Op50音選択 の [全] ボタンを選択することと、同じことだと思いますが、それではだめなんですか。

別にボタンが必用ですか。

2016.11.29 19:11 | URL | #5uE6dEgY [edit]
ACCESS男 says..."re:re:フィルターを解除して表示を初期化するには"

返信有難うございます。
> Op50音選択 の [全] ボタンを選択することと、同じことだと思いますが、それではだめなんですか。
> 別にボタンが必用ですか。

複数のコンボボックスを設けており、クエリに対して絞込をし、尚且つ50音でも絞込ができるようにしております。
絞り込み結果に対して作業を行った後、条件を全てクリアして(これが別ボタンです)再度最初から絞込を行いたいと考えております。
コンボボックスの値をNullにし、Requeryを行った後、[全]を押した状態になればとおもいまして。

ご指摘の通り[全]をクリックすれば良いのですが。

2016.11.30 10:29 | URL | #- [edit]
名無し says..."re:フィルターを解除して表示を初期化するには"

> コンボボックスの値をNullにし、Requeryを行った後、[全]を押した状態になればとおもいまして。

[全] のオプション値は 0に設定してありますので、オプショングループに 0 を代入すればいいでしょう。

Me.Op50音選択 = 0
Me.Op段選択 = 0


2016.11.30 10:52 | URL | #5uE6dEgY [edit]
ACCESS男 says..."re:re:フィルターを解除して表示を初期化するには"

> Me.Op50音選択 = 0
> Me.Op段選択 = 0
ありがとうございます。
おかげさまで、理想の動きになりそうです。

2016.11.30 11:18 | URL | #- [edit]

Leave a reply






Trackbacks

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