エクセルで記号を一括で検索(検出する方法)

やりたかったこと

全角カタカナだけの読み仮名が入ったエクセル列(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関数を使ったほうが汎用的ですね。便利だ。

機械忍者

某SEO会社(?)勤務。 多分日本語よりHTMLの方が得意です。 最近はRubyとかいうキラキラな言語も勉強中です。 SEOはもう標準スキルになってきてると思うので正直もうあんまり昔ほどの熱意は感じません。 新たに躍動してる人も多いですしね。 だれか強化骨格コスプレあったら教えてください。