vlookup()とiserror()で良いのでは?

エクセルの関数で教えてください。 数万件の電話番号リストがあ… - 人力検索はてな
ですが、

0-1. vlookup()用にテーブルを作っておく。

国名 国番号 英語国名 国番号+"-"
アイスランド 354 Iceland 354-
=国番号&"-"を入力


0-2. 0-1で作ったテーブルを[国番号/昇順]でsort


1. [-位置]という名前の列を作る。
=iserror(find(対象セル,"-"),0,find(対象セル,"-")
と入力し"-"が最初に現れる位置を決定する。"-"がなければ[0]を返す。


2. [pre-]という名前の列を作る。
=left(対象セル,[-位置]) と入力。
要はこのセルで、0-2で作ったテーブルに対して、vlookup()を行います。


3. [post-]という名前の列を作る。("-"より後の文字列という意味にしてください)
=right(対象セル,len(対象セル)-[-位置]) と入力。


4. [電話番号]という名前の列を作る。
=if( or([-位置]=0, iserror(vlookup([pre-],テーブル,4,false)) ),対象セル, [post-] )
対象セル内に"-"がなければ、vlookup()は使わず対象セルをそのまま返す。
"-"がある(国番号があるかもしれない)場合でも、テーブルにマッチしなければそのまま返す。
国番号がマッチすれば、[post-]を返すことで『最初に現れた-より右側の文字列』を返す。



ではダメですか? > id:rikuzai様, id:ion10