Excel2003以下の場合はISERROR関数で検索結果がエラーかどうかを一度チェックしたり COUNTIF関数で該当する値がないか数えたりする必要がありましたが Excel2007で追加されたIFERRORを使うことでエラー対策の為に二度手間をかける必要がなくなりました。
■F3セル:
=IFERROR(VLOOKUP(E3,B$3:C$8,2,FALSE),"")
F5セルまでオートフィルコピー
これでエラー対策自体は簡素になりました。
しかしワークシート関数はブランクを返すことはできない為 検索結果としては「""(空白文字列)」を返すしかありません。検索結果が文字列しかない時は「=VLOOKUP(……)&""」のようにしてやれば良いのですが
■F3セル:
=ISERROR(VLOOKUP(E3,B$3:C$8,2,FALSE))&""
結果に数値が混じっている時は「結果が空白だった時」「該当する値がなかった時」「問題ない時」で3回計算しないと全部の条件を満たすことができませんでした。
■F3セル:
=IF(COUNTIF(B$3:B$8,E3)=0,"",IF(VLOOKUP(E3,B$3:C$8,2,FALSE)="","",
VLOOKUP(E3,B$3:C$8,2,FALSE)))
そのエラー対策と空白対策を一緒に行う方法(下記)を前回は提示しました。
■F3セル:
=IF(ISERROR(1/LEN(VLOOKUP(E3,B$3:C$8,2,FALSE))),"",VLOOKUP(E3,B$3:C$8,2,FALSE))
多少はましですが これでも結局2回同じ計算をする必要があります。
今回は Excel2013で追加された FILTERXML関数を使います。本来Web上のXML形式のデータから特定のパスの情報を取り出すことを目的にした関数ですが、上手くデータを作ってやれば文字列に対しても使えます。この関数の特徴は取りだすデータが文字列なら文字列を。数値なら数値を返すことです。つまり文字列の数字も数値にして結果を返してくれます。
■F3セル
=IFERROR(FILTERXML("<a>"&VLOOKUP(E3,B$3:C$8,2,FALSE)&"</a>","//a"),"")
F5セルまでオートフィルコピー
以上。本当はもっと幅広い用途で使える関数なので 2013以上なら使わないと損です。
→参考ファイル(052.xlsx)