Form.Filter(Like演算子を使ったあいまい検索)(Access)
こちらは、Accessで作成した、都道府県名一覧を表にしたサンプルフォームですす。そして、このフォームの一番上部には検索用のテキストボックスを設置しています。
そこに都道府県名の一部の文字を入力して、その横にある「検索」ボタンを押すと、テキストボックスに入力した文字を含む都道府県だけが抽出されるようにしています。
この「検索」ボタンのクリック時に、イベントが発生するようにVBAを記入しています。その記述内容はこちらです。
Private Sub btn_検索_Click()
Me.Filter = "都道府県 like '*" & Me.kensaku & "*'"
Me.FilterOn = True
End Sub
VBAの記述の内容部分は3行目と4行目の2行だけですが、3行目の部分がダブルクォーテーションや他の記号をいくつか使っています。これが始めはかなり混乱するので、このForm.Filterプロパティの仕組みを易しい例から順に見ていきたいと思います。
あいまい検索作成の流れ
抽出条件にLike演算子を設定する
Form.Filter(抽出条件と一致するデータ)のページでは、フィールド名と抽出条件をイコールで結んで完全一致するデータのみを抽出させました。
Me.Filter = “都道府県 = ‘奈良県‘“
このページでは、Like演算子と「*」アスタリスク(半角)を使って、あいまい検索を設定していきます。
Me.Filter = “都道府県 Like ‘山*‘“
こちらは、先程の完全一致の「イコール」の代わりに「Like」を使い、そして「Like」の右側には、「‘山*‘」というふうに、「山*」(アスタリスクは半角です。)をシングルクォーテーションで囲んでいます。これは、基本的には、「Like “山*“」なのですが、この場合、「Me.Filter=」の右側の条件式全体をダブルクォーテーションで囲む必要があり、その中にさらに「山*」をダブルクォーテーションで囲む場合は、「“”山*“”」のようにダブルクォーテーションを2回続けるか、あるいは、「‘山*‘」のように、ダブルクォーテーションの代わりにシングルクォーテーションを使用するという決まりがあるからです。
次のようにVBAを記述します。
Private Sub btn_検索_Click()
Me.Filter = "都道府県 like '山*'"
Me.FilterOn = True
End Sub
そして、フォームから、テキストボックスは使わずに、「検索」ボタンを押すと、「山」で始まる都道府県のみが抽出されます。
また、「Like ‘*山*‘」のように、「山」の前後に半角アスタリスクをつければ、名前の一部に「山」が含まれるもの全てが抽出されるようになります。
抽出条件にテキストボックスを使用する
ところで、抽出条件に「Like ‘*山*‘」というように、最初から条件となる文字を指定してしまっているのは、あまり現実的ではありません。実際使用するときにはテキストボックスなどを使って、その時々に応じて、任意の文字を入力して抽出させるのが便利な使い方だと思います。では、この「山」という限定された文字をテキストボックスに置き換えていきたいと思います。
ここでのテキストボックス名は、「kensaku」という名前にしています。ではまず、単純に「山」を「kensaku」というテキストボックス名に置き変えてみます。
Me.Filter = “都道府県 Like ‘*Me.kensaku*‘“
しかしこれでは、「Me.kensaku」という文字を含む都道府県名を選ぶことになってしまい、当然そのような都道府県名は無く、テキストボックスに文字を入力して検索ボタンを押しても何も抽出されないという結果になってしまいます。では、この「Me.kensaku」というテキストボックスをテキストボックス名として認識してもらうにはどうすればいいでしょうか。
そこで、ひとつ考えられるのが、「Me.kensaku」というのはひとつのテキストボックスという「コントロール」であって、文字列ではありません。しかし、この条件式「“都道府県 Like ‘*Me.kensaku*’“」はダブルクォーテーションで囲まれており、ひとつの「文字列式」としてひとくくりにされています。ですので、考え方としては、ダブルクォーテーションの中身の部分をいったん、「都道府県 Like ‘*」と「Me.kensaku」と「*’」というふうに、これを三つに分断してみます。
そして前述のように、この中で、「Me.kensaku」だけは文字列ではなく、あとの二つは文字列扱いなので、「Me.kensaku」はそのまま、残りの「都道府県 Like ‘*」と「*’」は、それぞれをダブルクォーテーションで括ってあげます。そうすると、「“都道府県 Like ‘*“」、「Me.kensaku」、「“*’“」となります。さらに、この三つを「&」(半角)で繋げてあげます。すると、このようなコードになります。
Me.Filter = “都道府県 Like ‘*” & Me.kensaku & “*’“
ただし、これは、フィルターを設定しただけで、これだけではフィルターは実行されません。次のコードも一緒に記述することで、フィルターが実行されます。
Me.FilterOn = True
これで、テキストボックスを使った、任意の文字によるあいまい検索が可能となります。
コメントフィード
トラックバックURL : http://gyoumuka.work/wp-trackback.php?p=1208