3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

CalcでVLOOKUP関数に()があると期待した値が返ってこない

OpenOffice Calc 3.2です。

Calcにて vlookup 関数で検索値に半角カッコ ( ) が入っていると#N/Aになるという現象が発生しました。

で、調べたところ、faq/4/872 - OpenOffice.org Q&Aに答えがありました。

どうやら、Calcでは数式内に正規表現を使えるようですが、半角括弧は正規表現でつかうメタ文字となっているのが原因のようです。

(他の正規表現のメタ文字は OpenOffice.org ヘルプの 正規表現リスト に載っています。おもに、. ^ $ * + ? \ \n \t [ ] などが有るようです。)

対応策としては一つは正規表現の機能をオフにすることです。

メニューバーの ツール → オプション → OpenOffice.org Calc → 計算式 → 数式で正規表現を使う のチェックを除けるといいようです。

ここはファイル毎の設定のようですね。(デフォルトはONのようです。)

(正規表現を使わない設定にすると ods ファイル内の content.xml という値が追加されます。)

もうひとつの方法は上記Q&Aにも出てますが、メタ文字をエスケープ(¥を付ける)する方法です。

ただ、検索値にいちいちエスケープ文字を付け加えるのは現実的ではないので、SUBSTITUTE 関数を使って、メタ文字にエスケープ文字を付け加えると楽なようです。

ということで、Q&Aには下記のような式にすればいいと載ってました。

=VLOOKUP(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1;"$";"\$");"[";"\[");"*";"\*");"+";"\+");"?";"\?");"|";"\|");"(";"\(");")";"\)");$A$1:$A$8;1;0)

正規表現機能を使わないのであれば、数式で正規表現を使う をのけた方が楽ですね。