Form.Filter (抽出条件と一致するデータ)(Access)
こちらは、Access で作成した、都道府県名一覧を表にしたサンプルフォームですす。そして、このフォームの一番上にはテキストボックスを設置しています。
この検索用テキストボックスに都道府県名を入力して、「検索」ボタンをクリックすると、入力した都道府県のデータが抽出されるようにコードを記述しています。
Private Sub btn_検索_Click()
Me.Filter = "都道府県 = '" & Me.kensaku &"'"
Me.FilterOn = True
End Sub
では、このコード内容(Form.Filterプロパティ)について易しい例を参考にしながら順に見ていきます。
検索作成の流れ
抽出条件と完全一致するデータを表示する
Me.Filter = “都道府県 = ‘奈良県‘“
わかりやすくするために色分けをしましたが、これは、テーブルやクエリの「都道府県」フィールドが「奈良県」のみのデータを抽出するためのコードとなります。緑色の「都道府県」がフィールド名、つまりテーブル「T_都道府県」の「都道府県」フィールドのデータということになります。そして「=」で挟んで、右側の「‘奈良県‘」が抽出条件となります。
そして、「Me.Filter=」の右側部分の条件式の部分ですが、こちらは「文字列式」で設定すると決まっています。ですので、右側全体「都道府県=‘奈良県‘」をダブルクォーテーションで括っているのです。
では次にダブルクォーテーションの中身である「都道府県=‘奈良県‘」に着目します。これは、「フィールド名=抽出条件」を表しているのですが、とくに「抽出条件」の「奈良県」のほうがシングルクォーテーションで括られています。これは、「奈良県」が文字列であるから、シングルクォーテーションで括られているのです。では、文字列だからダブルクォーテーションなのではなくて、なぜシングルクォーテーションなのかというと、ここでいうところの、 “都道府県 = ‘奈良県‘“の青色のダブルクォーテーションの中でさらにダブルクォーテーションを使うことになるので、そのような場合はシングルクォーテーションで代用しているということになるのです。ちなみにここでダブルクォーテーションの中でダブルクォーテーションを使ってしまうと、次のようにエラーとなってしまいます。
ここで、もう一歩踏み込んで見ていきますと、ダブルクォーテーションの中でダブルクォーテーションを使うと前述のとおりエラーとなってしまいますが、もしその内側にダブルクォーテーションを使うというようなときは、次のようにダブルクォーテーション2個続けて記述するというルールがあるようです。
Me.Filter = “都道府県 = “”奈良県“”“
この記述の仕方だと、「奈良県」が抽出条件となって、正しく抽出されたデータが表示されるのです。しかし、これだととても見づらいし、ダブルクォーテーションを2個続けて使うときは、シングルクォーテーションで代用できるということなので、通常はシングルクォーテーションを使うようにします。
抽出条件にテキストボックスを使用する
Me.Filter = “都道府県 = ‘奈良県‘“のように初めから抽出条件を「奈良県」に指定してしまっているのは、通常業務で使用するには、あまり現実的ではないです。実際には、例えばテキストボックスを用意してそこに抽出したい内容の一部の文字を入力して、その結果を表示させたい、というのが現実的であると思われます。ですので、次は、先程の「奈良県」の部分をテキストボックスに置き換えて考えてみたいと思います。
使用するテキストボックスの名前は、「kensaku」という名前です。まずは単純に先ほどの「奈良県」を「kensaku」に置き換えてみます。
Me.Filter = “都道府県 = ‘Me.kensaku‘“
しかし、この記述は誤った記述で、これではなにも結果として表示されません。なぜなら、これでは、「Me.kensaku」といいう文字列を抽出条件としてしまうからです。当然、都道府県名に「Me.kensaku」という場所は無く、検索結果には何も表れないということになります。では、「Me.kensaku」を括っているシングルクォーテーションを外してしまったらどうでしょうか。これも結果は同じです。シングルクォーテーションで括らないのは、検索対象のフィールドのデータ型が文字列(テキスト型)ではなく、数値型のときですので、これも先程と同じような理由で誤りということになります。
話がとてもまわりくどくなってきていますが、ではどうすれば良いのかということですが、「kensaku」部分とそれ以外の部分をいったん別のものとして、考えていけば、良いような感じがします。Me.Filterの条件式の部分は、文字列式で表示するということなので、それ自体文字列ではなくひとつのコントロールである「kensaku」というテキストボックスは文字列式とは分けて考えてみるという発想です。
ではもう一度、Me.Filter = “都道府県 = ‘Me.kensaku‘“の状態から考えていくことにします。「都道府県」フィールドのデータ型がテキスト型なので、「Me.kensaku」はシングルクォーテーションで括っておきます。では、ここで、ダブルクォーテーションの中身の「Me.kensaku」とそれ以外の部分を一度分離して考えてみます。つまり、「都道府県=‘」までと、「Me.kensaku」と、最後の「‘」の三つに分離します。そして、「Me.kensaku」自体はテキストボックスというコントロールなので、そのままの状態、「都道府県=’」と「’」は、最初から条件式として文字列式の扱いであったので、それぞれをダブルクォーテーションで括ります。するとそれぞれ、「“都道府県=‘“」、「Me.kensaku」、「“‘“」となり、この三つをそれぞれ、「&」で繋げてあげるのです。すると、次のようになります。
Me.Filter = “都道府県 = ‘“ & Me.kensaku &“‘“
ただし、これは、フィルターの設定をしただけで、フィルターを実行するには次のコードを一緒に記述する必要があります。
Me.FilterOn = True
これで、「kensaku」テキストボックスに検索したい都道府県名を入れると、「都道府県」フィールドから一致するデータを抽出するようになります。
コメントフィード
トラックバックURL : http://gyoumuka.work/wp-trackback.php?p=1160