Excel オートフィルタの簡単検索機能の注意点について

Excel 一歩先へ

スポンサーリンク

オートフィルタの機能改善

Excel2003→Excel2007になって、オートフィルタの機能は改善された。

絞り込み画面

Excel2003までのオートフィルタは、こういう画面に2つまで条件を入力して絞り込む方法に、ほぼ限られていた。

Excel2007以降では、この絞り込み機能画面に加えて、検索したい語句をすぐ入れられるテキストボックスとか、自由に複数選択できるチェックボックスとかの機能が追加された。

追加機能

この新機能は便利だけど、ちょっとした仕様の注意があるので、以下で取り上げる。

テキストボックスを使った検索方法の特徴

例題

上図は、A001~A010とZ001~Z005の文字だけを縦に並べた簡単な表だ。

さてこの表のオートフィルタ機能から、先ほど述べた入力用テキストボックスに「Z」と入力してから「OK」を押してみよう。

絞り込む

当然ながら下図のように、Z001~Z005のデータのみに絞り込まれる。

結果

さて、今やった作業は、<文字列「Z」を含む部分一致のデータだけを抽出する>という作業だろうか?

実は違う。正しくは< 「Z001」「Z002」「Z003」「Z004」「Z005」のデータを完全一致で抽出する >作業を今やったのだ。

何のことかと思うかもしれないし、それがどうしたって感じかもしれない。

実際、多くの場合、こんなことを意識しなくたって、どうでもいい。

では、絞り込まれた状態で、一番下のA16セル「Z005」を「Z008」とでも書き換えてみよう。

というか、A16セルに他セルを参照する計算式が入っていて、いつの間にか値がZ008に変わっていたと想像してほしい。

そして書き換えた後にオートフィルタボタンを押すと、表示された「A001」~「A008」のチェックは外れたままになっている。

書き換え

このチェックが外れた状態を見て、さっきの状態が残ってる→文字列「Z」を含む部分一致のデータだけを抽出した状態が残ってると思って「OK」ボタンを押したら、「Z004」までしか表示されない。

これは、実際に残ったフィルタ状態が< 「Z001」「Z002」「Z003」「Z004」「Z005」のデータを完全一致で抽出する >フィルタだったからであり、「Z008」というのはその対象外だったからだ。

フィルタ後

この、テキストボックスを使った検索は、データが多くなると絞り込むのにもちょっと時間が掛かる。

繰り返すけど、「~を含む」というシンプルな検索ではなく、100個の対象データがあったら100個を1個1個愚直に拾い上げる作業をしているからだ。

そして、上例のように知らぬ間にデータが書き換わってたりしたときの危険が考えられる(まれではあるだろうが)。

本当の意味で「~を含む」という検索をしたかったら、従来型のオートフィルタのダイアログボックスを普通に使おう。

従来型のオートフィルタのダイアログボックス

マクロ記録で検証する

では今のフィルタの違いを、操作をマクロに自動記録する方法で確かめてみる。

別にマクロの知識はなくても構わない。
マクロで確かめるのが一番、パッと見て分かりやすいと思うのだ。

まず、従来どおりの、オートフィルタのダイアログを出して「Zを含む」という条件をきっちり指定して検索した場合の操作をマクロ記録してみよう。

~を含む検索

すると、こういう風になる。

    ActiveSheet.Range(“$A$1:$A$16”).AutoFilter Field:=1, Criteria1:=”=*Z*”,Operator:=xlAnd

要は、青い太文字の部分で、「Zを含む」という条件が指定されているわけだ。

それに対して、テキストボックスに入力してから検索する方法を記録した場合はどうなるか。

テキストボックスに入力
    ActiveSheet.Range(“$A$1:$A$16”).AutoFilter Field:=1, Criteria1:=Array(“Z001”, “Z002”, “Z003”, “Z004”, “Z005”), Operator:=xlFilterValues

というようになる。「Z001」「Z002」「Z003」「Z004」「Z005」が露骨に1個1個、指定されているのが分かるだろう。

「Zを含む」という検索に比べて、いかにも格好悪いし検索に時間がかかりそうだ。

あまり難しいことを考えなくて良いけど、データが多い時にこんな1個1個ピックアップ型の作業はかえって非効率になり得るし、テキストボックスを使ったオートフィルタは使う前に一考してみよう。

スポンサーリンク