エクセルで記号を一括で検索(検出する方法)
やりたかったこと
全角カタカナだけの読み仮名が入ったエクセル列(23万行)に対して、カナ以外の記号が入ってた時に削除したいなぁと思ってた。
どうするのか?
作業列に単純にFINDでやる場合
エクセルの作業列にFINDを仕込みます。重い。けどしょうがない。
COUNTとかにする必要はないんだけども。
またB1のセルを指定していますがA1とか検索対象のセルに合わせて修正してください。
=COUNT(FIND({"`","~","!","@","#","$","%","^","&","(",")","-","=","_","+","[","]","{","}","\","|",";","'",":",",",".","/","<",">","*","?","〜","`","!","@","#","$","%","^","&","*","(",")","ー","=","_","+","「","」","{","}","¥","|",";",":","、","<","。",">","・","?","’",""""},B1))=0
※注意点
「”」・・・全角のダブルクオーテーションの検出が難しい
「”」・・・半角のダブルクオーテーションの検出は””と2つ書く(エクセルの仕様上)。でFIND内では””で括るため、””””と4つ書く
また
*とか?の半角は、通常の検索(Ctrl+F)をした時に使うと、ワイルドカード指定になってしまうのでエスケープしないといけないんですが、ここでは関係ないです。
作業列にCODEを使ってFINDする場合
エクセルに文字コード(ASCII)で探すことができるCODEという関数があります。
http://e-words.jp/p/r-ascii.html にASCIIコードの一覧があります。
このそれぞれの記号に対する10進法の数値で検索をかけることができます。
=IF(AND(CODE(B2)>=33,CODE(B2)<=47),”記号”,””)
=IF(AND(CODE(B2)>=58,CODE(B2)<=64),”記号”,””)
=IF(AND(CODE(B2)>=91,CODE(B2)<=96),”記号”,””)
=IF(AND(CODE(B2)>=123,CODE(B2)<=126),”記号”,””)
=IF(AND(CODE(B2)>=161,CODE(B2)<=165),”記号”,””)
=IF(AND(CODE(B2)>=8482,CODE(B2)<=8574),”記号”,””)
=IF(AND(CODE(B2)>=8737,CODE(B2)<=8830),”記号”,””)
=IF(AND(CODE(B2)>=9018,CODE(B2)<=9024),”記号”,””)
=IF(AND(CODE(B2)>=9051,CODE(B2)<=9056),”記号”,””)
=IF(AND(CODE(B2)>=9083,CODE(B2)<=9086),”記号”,””)
=IF(AND(CODE(B2)>=9332,CODE(B2)<=9342),”記号”,””)
この辺りの数値が記号です。
なお、
=IF(AND(CODE(B2)>=12322,CODE(B2)<=29734),"漢字","")
で、漢字が含まれてるかどうかが調査できます。CODE関数を使ったほうが汎用的ですね。便利だ。