
目次
「担当が営業部ではない案件」を出したつもりが、担当がまだ決まっていない案件まで並んでいた。そんな経験はないでしょうか。
条件は間違っていません。仕様どおりです。ただ、知らないと件数が合いません。
5行のデータベースを作って、いろいろな条件で絞り込みました。規則ははっきりしていました。
「甲ではない」に、空欄が入りました
まず、いちばん引っかかるところから。
用意した5行
区分の列に「甲」「乙」を入れた行と、何も入れていない行を混ぜて、5行を用意しました。
| 行 | 区分 |
|---|---|
| A | 甲 |
| B | 乙 |
| C | 空 |
| D | 甲 |
| E | 空 |
「甲ではない」で絞ると、3件返りました
返ってきたのは、B、C、E です。
甲ではないのは、乙が入っているBだけのはずです。空欄のCとEが一緒に返ってきました。
考えてみれば筋は通っています。空欄は「甲」ではないので、条件に合っています。合っているのですが、欲しかったものとは違います。
何が起きるか
「担当が営業部ではない案件」を出して、20件返ってきたとします。実際に他部署が担当なのは8件で、残り12件は担当が決まっていない案件かもしれません。
そして、この2つは意味がまったく違います。他部署の案件は進んでいますが、未割り当ての案件は止まっています。
同じ一覧に並んでいると、区別できません。
「含まない」でも同じです
文字の列でも試しました。
「東京を含まない」に、空欄が入りました
文字の列に「東京 支店」「とうきょう」「TOKYO」「東京」を入れた行と、空欄の行を用意します。
「東京を含まない」で絞ると、空欄の行も返ってきました。
空欄は東京を含まないので、これも筋は通っています。同じ理屈です。
「〜でない」系は、全部そうだと考えてください
等しくない、含まない。否定の条件は、空欄を拾います。
逆に言えば、規則が1つなので覚えやすいです。否定の条件を書いたら、空欄のことを思い出す。それだけです。
除くには、条件をもう1つ足します
「甲ではない」に「空でない」を足して、両方を満たす条件にしました。返ってきたのはBだけです。狙いどおりになりました。
| 条件 | 結果 |
|---|---|
| 甲ではない | B、C、E(3件) |
| 甲ではない かつ 空でない | B(1件) |
条件が1つ増えるだけです。否定の条件を書いたら、セットで足すくらいに考えておくといいと思います。
図にすると、こういう違いです
不等号は、空欄を拾いません
ここで規則がはっきりします。
「5より大きい」「5より小さい」を試しました
数値の列に10、20、0を入れた行と、空欄の行を2つ用意します。
| 条件 | 結果 |
|---|---|
| 5より大きい | 10、20(空欄は入らない) |
| 5より小さい | 0だけ(空欄は入らない) |
| 10と等しくない | 20、0、空、空 |
不等号のほうは、空欄を拾いませんでした。同じ「数値の条件」なのに、扱いが違います。
理屈で整理すると
不等号は、値どうしを比べる条件です。空欄は比べられないので、対象から外れます。
一方、「等しくない」は、等しいかどうかだけを見ます。空欄は10と等しくないので、条件に合います。
この2つを分けて覚えておけば、迷いません。比べる条件は空欄を外し、否定する条件は空欄を含む。
0と空欄は、きちんと区別されます
念のため確かめたところ、ここは安心していい作りでした。
別のものとして扱われます
| 条件 | 結果 |
|---|---|
| 0と等しい | 0の行だけ |
| 空である | 空欄の行だけ |
0が入っている行は「空」に含まれません。金額が0円の案件と、金額を入れ忘れた案件は、別のものとして数えられます。
ただし、数式を挟むと崩れます
以前、数式は空欄を0に変えるという話を書きました。
元の列なら区別されますが、数式を1枚かませた列では、空欄が0になっています。その列で「0と等しい」を絞ると、未入力の行まで入ります。
絞り込みの対象は、できるだけ元の列にしておくのが安全です。
大文字小文字は区別しないが、表記ゆれは拾わない
文字の絞り込みで、もう2つ確かめました。
小文字で書いても、大文字が見つかります
「TOKYO」と入っている行を、小文字の「tokyo」で探しました。見つかります。大文字と小文字は区別されません。
並べ替えでも大文字小文字を区別しなかったので、そこは一貫しています。
ただし、表記ゆれは別物です
「東京」で探すと、「東京 支店」と「東京」は見つかりますが、「とうきょう」は見つかりません。当然といえば当然です。
ここは人間には同じでも、機械には違う文字です。絞り込みで漏れる原因の多くは、これだと思います。
自由入力の列で絞り込むなら、入れる側をそろえる必要があります。外から入れると表記ゆれがそのまま溜まるという話とつながります。
絞り込みを書くときの決め事
ここまでを運用に落とします。
1. 否定の条件には、「空でない」を足す
これだけ覚えておけば、ほとんど防げます。「〜でない」「〜を含まない」を書いたら、セットで「空でない」を足す。
逆に、空欄も見たい場面なら足さない。意識して選ぶことが大事で、知らずに混ざっているのが問題です。
2. 件数が合わないときは、空欄を疑う
絞り込みの結果が想定より多い。その原因のかなりの部分が、これだと思います。
まず「空でない」を足してみて、件数が変わるかを見る。変われば原因はこれです。数秒で切り分けられます。
3. 未入力の一覧は、別に作る
「空である」だけの条件で、未入力の行を出す表示を1つ作っておきます。
否定の条件に混ざっていた行が、ここに集まります。混ざるのが問題なのではなく、見落とされるのが問題なので、見る場所を作っておけば解決します。
4. 自由入力の列では、絞り込まない
表記ゆれがある列で絞り込むと、必ず漏れます。分類に使う項目は、セレクトにして選択肢から選ばせるほうが確実です。
どうしても文字で持つなら、入れる側でそろえることになります。
5. 0が意味を持つ列は、数式を挟まない
金額、件数、個数。0に意味がある列は、元の列のまま絞り込みます。数式を経由すると、空欄が0になって混ざります。
表示のために数式を作ってもかまいませんが、絞り込みと集計は元の列に対して行うと決めておくと安全です。
よくある質問(FAQ)
「〜でない」で空欄が入るのは、直せませんか。
条件そのものは変えられないので、「空でない」を足して両方を満たす形にします。条件が1つ増えるだけです。逆に、空欄も見たい場面ならそのままで構いません。
不等号でも空欄が入ることはありますか。
今回試した範囲では入りませんでした。大きい・小さいで比べる条件は、空欄を対象から外しています。ただし、数式を挟んだ列では空欄が0になっているので、その場合は入ります。
0円の案件と、金額未入力の案件を分けたいです。
元の数値の列なら分けられます。「0と等しい」で前者、「空である」で後者です。数式を経由した列では区別できなくなるので、元の列を使ってください。
「とうきょう」でも「東京」でも拾いたいです。
絞り込みだけでは拾えません。入力の段階でそろえるか、セレクトにして選択肢から選ばせることになります。すでに揺れているなら、一度そろえる作業が必要です。
チェックボックスに「空」はありますか。
試したところ、チェックボックスには空という条件がありませんでした。付いているか、付いていないかの2つだけです。「一度も触っていない」と「わざと外した」は区別できません。
条件をいくつまで組み合わせられますか。
今回は2つの組み合わせまでしか試していません。実務で必要になる範囲では足りると思いますが、深く入れ子にする場合は実際に確かめてください。
「空でない」を足して、件数を見てください
いま使っている絞り込みに「〜でない」が入っていたら、そこに「空でない」を足してみる。件数が減ったら、未入力の行が混ざっていました。数秒で確かめられます。