<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--Where文を書いてみる
  1 2 3 4 5



んじゃ、何か具体的に・・・今↓こういう状態ですけど、

「分類」がくすりのデータだけ絞り込むようにしてみようと思います。

式としては

分類 = 'くすり'

ですね。「分類」はテキスト型です。
で、第4ポイントの「文字列として渡す」というところなんですが、これは、たいていの場合は「ダブルコーテーションで囲む」ことを表しています。

“分類 = 'くすり'”

ちょっとわかりにくいですけど、これで、Me.Filterに文字列として式を渡すことができます。

これを、コマンドボタンのクリック時のイベントに書きます。

と、こうなるのです。
マクロでも「値の代入」というアクションを2行作ることで、コレと同じことができるのですが、マクロからだとMeというのが使えないんで、ちょっと書き方が難しいかな・・・。

値の代入:
アイテム:Form!フォーム名.Filter
式:”分類 = 'くすり’”

Meの変わりに、フォーム名をきちんと指定するところ以外は、コードで書いたのと同じです。
2行目の値の代入は、

アイテム:Form!フォーム名.FilterOn
式:true

ですね。これも同じです。

マクロでもコードでもどちらでも可能ですけど、コードの方が若干簡単かな、って思います。この辺はお好みで。。。

このコマンドボタンをクリックすると、くすりだけ表示されるように、なります?

「金額が150円のものだけ」表示させたい場合は、金額は確か通貨型にしたので、

150という数字は、シングルコーテーションで囲まずむき出しにします。
絞り込まれます?

シングルコーテーションで囲んだまま↓、コマンドボタンをクリックすると・・・。

あれ、なんか変なメッセージが出て実行してくれませんね。

↑このメッセージからは何もわからないんですけど・・・。
このひとつ前に、なんかエラーが起こってるよ、って意味なんで、こんなの出されても困っちゃうんですけどね。
要するに、「金額は通貨型なのに右辺の値をテキストとして(シングルコーテーションで囲んで)扱っているので、ダメーと言っているんですね。
「型が違います」とか「型が一致しません」とか、そんな感じのエラーが起こったので、直前の操作はキャンセルされた、ということかな・・・。

じゃあ、日付時刻型はどうなるかと申しますと・・・。

2001/2/1と入力するだけでもよい場合もあります。
例えば、クエリの場合・・・。ちょっと横道にそれちゃいますけど、クエリのデザイングリッドで日付時刻型のフィールドに対して抽出条件を書くときは、

これで、2月1日に登録されたレコードだけゲットしてくるわけですが、

一度このクエリを閉じてもう一度開いたときとか、いったんデータシートビューで確認してからデザインビューに戻ったときとか、

イゲタがついてますよね。両側に。。。
多分皆さんのPCでもこんな風になると思うんですけど・・・。
クエリのデザイングリッドなら、この辺は自動的に識別したりしていいようにやってくれるんですけど、自分でWhere文を書くときは自分で気をつけてやらないといけません。半角のスラッシュとかハイフンとか、日付時刻の区切り記号みたいな感じで使いますけど、割り算とか引き算の意味もありますよね。なので、「これは日付時刻のことです」ってわかってもらうために、イゲタで囲むんです。誰が、って、みなさんがですよみなさんが。もー頼りにしてるんだからしっかりしてくださいよ。他に誰がいるんですか。

で、本題に戻って、なので、フィルタの命令文も↓こうなります。

と、実際に動かしてみると、こうなりますね。

テーブルの各フィールドのデータ型と、こうした式との関連って、結構あるんですよ。
どう書くか、というところは少しずつ慣れていくとして、対象となるフィールドが文字か数値か日付時刻型か・・・がぜーんぜんわけわかんないというのはよくありませんですので、その辺意識しながら進めていってくださいね。




では、「4000円以上」とするにはどうしたらいいでしょう。

"金額 >= 4000"

式としては、こんな感じですね。
結果は、このとおり・・・。挑戦してみてください。>とか=は、半角ですよ。

「5000円を超えるもの(5000円は含まれない)」なら、

"金額 > 5000"

っていう感じになります。
「以下」「下回る」は、不等号の向きが逆になるわけですね。いろいろ試してみてくださいね。

分類が防具以外のもの、という具合に、=の逆は、<>(半角で)という具合に不等号を背中合わせに並べればよいと思います。

"商品名 <> 'バトルカウンター'"

これで、バトルカウンター以外のものが表示されるようになります。

金額が100円から500円まで(100円、500円を含む)という条件にしたい場合は、

"金額 between 100 and 500"

Between and というのが便利です。これも半角の英文字で入力します。全角で入力してもエラーになっちゃいますよ。
大文字小文字は、どっちでもいいです。自動的に調節されますので。。。
Between と 数字 と and と 数字の間は、半角スペースをあけて入力します。
って、こういうのはみなさんもうマスターしてらっしゃいますよね。

金額が50円のものと150円のものと2500円のものだけ、という条件なら、Inというのが便利ですね。

Inの後にカッコを書いて、その中に値を書き並べていきます。半角のカンマで区切りながら。。。
金額は数値(通貨型)なんで、in(50,150,2500)ってやりましたけど、もし商品名とかだとテキスト型ですから、in(‘皮の盾’,’バトルカウンター’,’波動砲’)って感じでシングルコーテーションで囲んでくださいね。

商品名が「何とか「草」」っていうのだけ出したい・・・うむ、こいつはかなり難易度が高いです。
いわゆる「あいまい検索」ってやつですねl。Like * ていうやつを使うんですけどね。
○○草 という具合に、草という文字が必ず一番後ろにくることがわかっている場合は、要するに〜草ってわけですよね。〜の部分を*に置き換えます。半角ですよ。

"商品名 like '*草'"

アスタリスクマークも、Likeも、どっちも半角です。
パソコンの画面って、半角と全角の見分けがつきにくかったりしますから、意識して半角の入力を心がけてってください。

○○草ハイパーとか草○○○とか、草という文字の位置が必ずしも決まってない場合は、〜草〜ってことになりますよね。だから

"商品名 like '*草*'"

必ず草という文字で始まっているものだけ抽出したいなら、

"商品名 like '草*'"

です。
商品名はテキスト型ですから、必ずシングルコーテーションで囲みます。
まあ、用心のために(なんの?)両側にアスタリスクマークつけとくと、

まあ、それっぽいのが出てきます。

Likeは・・・金額などの数値フィールドに使うことはできない・・・と思います。どういうときに、数値や通貨型に対してあいまい検索が必要になるか、今ちょっと頭に浮かばないんですけど、あんまり・・・ないですよね。金額とか売上数だったら、先に出てきたBetweenとか使えば絞り込めるはずです。

「商品名が○○草っていう名前で、なおかつ金額が150円のもの」という具合に、ふたつ条件が必要な場合は、

商品名 like '*草*'  という式と  金額 = 150 という式と、ふたつ両方考えてもらうわけですから、 and で結びます。

「商品名が○○草っていう名前か、もしくは金額が150円のもの」という具合に、ふたつの条件のうちどっちか一方オッケーなら出てきてもらいたい場合は、商品名 like '*草*'  という式と  金額 = 150 という式を、 OR で結びます。

3つ、4つ、5つ・・・と、式をいっぱい組み合わせてデータを搾り出すような場合も、andかorを使って(orってあんまり使わないかな・・・使い方難しいですよね)式をつなげていきます。基本は、まずひとつひとつの式を作り、ひとつひとつの式それぞれ単体で正しくフィルタがかかるかテストし、テストに合格した式どうしをandでつなげていく・・・。という段取りで考えてください。必ずしも左端から1文字ずつ書くのではありませんよね。

いかがでしょう。いろいろ見てきましたけど、なんでシングルコーテーションとかダブルコーテーションがじょぼじょぼ並んでるのか、意味、つかんでいただけましたか?
慣れないとわけわかんないですけど、慣れちゃうとたいしたことないですよね。
シンプルなテーブルとシンプルなフォームで、いろいろ入力してみて慣れてしまってくださいね。