こんにちは、わたあめです。Excelの数値フィルターを使って、フィルタをかけてもかからない時ってないですか?具体的には、数値フィルタでワイルドカードを使うとあるはずのデータが抽出されず0件になってしまいました。
今回は数値フィルターでワイルドカードが使えないという件について、まとめていきたいと思います。ただ、最後まで読むのが面倒という方もいらっしゃると思うので、先に結論を書いておきますね。
※数値フィルターではワイルドカードは使えません
数値に対してはワイルドカードを使ったフィルターはかけれません。文字列に対してのみ有効となります。詳しい理由や大体案については次章より詳しくまとめていきますね。それでは、行ってみましょう!
事象:数値フィルターでフィルタがかからない
エクセルの表にフィルタ機能を使ってデータを絞り込むことってありますよね。
表の項目名の横にある[▼]ボタンをクリックして、抽出条件を指定するかと思います。今回は、数値(No.)が入力されている列に対して、右クリックで[ユーザ設定フィルター]からワイルドカードを使ったフィルタをかけようとしました。
オートフィルタオプションが開きます。ここで、Noという数値データを持つ列に対して「100」という条件で設定し、[OK]ボタンを押します。結果、「100」に一致したデータが抽出されました。
次に同じ手順で、条件にワイルドカード「?:任意の一文字を表す」を指定して抽出しました。「1?0」と条件をしていするので、100はもちろんのこと100や110、120、130なども抽出されるはずです。が、ワイルドカードを使って条件していするとフィルタがかからず、何も表示されません。
ただ、数値フィルターではなく、「検索」の欄に同じ条件を指定すると、問題なく抽出されます。
この現象の原因は何なのか、どうすればいいのか?の代替案を述べていきますね!
原因:ワイルドカードは文字列に対してのみ有効
原因は、ワイルドカードは文字列を扱うテキストフィルターの時のみ有効だからということでした。Excelの仕様なのでしょうかね。オートフィルターオプションの画面をよく見て見ましょう。そこには、このような表記がありますね。
この文をみると文字に対しての説明に思えます。実際、テキストフィルターにのみ有効なようです。
代替案
それでは、今回考えた代替案を書いていきます。
条件で解決する
数値フィルターで使える条件のみを使って、以下の抽出条件になります。
逆に数値フィルター使えない抽出条件は、以下です。(テキストフィルターでは有効)
この数値フィルターで使える抽出条件を組み合わせて解決する方法です。ANDかORを指定して、条件は2つまで指定可能です。数値の条件で上手く表現できれば良いですね。では、出来ない場合はどうすれば良いか?まだまだありますよ!
文字列に変換する
数値を文字列に変換することによって、文字列のテキストフィルターに有効なワイルドカードを使えるようにする方法です。手順は以下です。
- データの範囲を選択
- [データ]タブ>[区切り位置]をクリック
- 区切り位置指定ウィザード1/3:[次へ]ボタン
- 区切り位置指定ウィザード2/3:区切り文字で全てのチェックを外して[次へ]
- 区切り位置指定ウィザード3/3:列のデータ形式で[文字列]を選んで[次へ]
これで、数値が文字列に変換されました。文字列になったことで、ワイルドカードを使った抽出が出来るようになります。ですが、注意点もあります。
他のセルで合計を計算に使っている場合などは、文字列に変換することでエラーとなりますので、気を付けてください。
VBAマクロで解決する
最後に、VBAマクロで解決する方法です。長くなってしまったので、別記事にまとめています!VBAで実現したい方は、以下参考にしてみてくださいね。
文字列比較をマクロの中で行い、Array配列でフィルターを書けるという処理を紹介しています。
さいごに
いかがだったでしょうか。数値に対してはワイルドカード使えないのですね。テキストフィルターだと使えるのですね。また新たな気付きでした。それでは、また!