
■ 状況
既存のプログラムの一部の機能を(無理やり)利用するために、そいつが使っている引数(パラメータ)に無理やり値を設定してやろうとしてました。んで、その調査のためにログから引数の設定情報を引っこ抜いて調査していたのです。
パラメータの数は100個程度なので、ExcelのVLOOKUP関数を使って設定されている値を確認していたのですが、なぜか空白になるべき個所に0が表示されている。
・・・あれ?
■ 再現
とりあえず、状況再現をします。
こんな感じで、左側にVLOOKUP関数を仕込み、右側の表を範囲とします。

右側の表は、aが0(数値)、bが0(文字列)、cが空白、dがアルファベットのaになっています。
問題は、cを検索した時です。

検索結果を見ると、a、b、dの結果は右側の表の値をちゃんと持ってきていますが、cが0になってしまっています。
ふむ、再現できたことから見てデータの問題ではなくExcelの問題みたいですね。
■ データ型の調査
さて、空白が0になるという事は、Excelのどこかで空白を数値として捉えていると想定できます。それが、VLOOKUP関数の独自の話なのか、もっと広い話なのか・・・
実験として、右側の表の値のデータ型をTYPE関数(数値であれば1、文字列であれば2を返す関数)を使って確認してみます。


すると、空白は1(数値)として認識されていることが確認できました。
ふーむ、考えてみると、空白を含むセルを使って四則演算をすると、空白セルは0として計算されてましたね。Excelは表計算ソフトなので、空白=0と扱った方が良いということでしょうかね?
■ 対応策
やり方はいくつかあると思いますが、手っ取り早いのはこれでしょうか?

VLOOKUP関数の後に空文字("")を結合して、Excelに「この式の結果は文字列である」と認識させるわけです。これで空白が返ってくるようになったし、他の結果も変わらず表示されました。
まぁ、結果が全て文字列扱いになっているのが良いかどうかっていう話はありますが・・・
■ 後書き
思う所があってExcelのオンラインヘルプでVLOOKUP関数の機能を確認していて気付いたのですが、検索の型をFALSE(完全一致)ってすると、表(範囲)を並べ替えしなくても良かったんですね。
・・・いつも、手間暇かけて並べ替えてましたよ。
知ってるつもりになっていることって、自分で思っているよりも抜けが多いものみたいですね。
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end ---
スポンサードリンク


