其ノ10 vlookupの練習 その3
今回は、vlookupの落とし穴的な話なんですが…。
その落とし穴とは、「検索値が存在するのに、ひっぱってこれない」という現象なんです。
式の入れ方をまちがったわけでもない。検索値も範囲内に存在する。
なのにエラーになる……vlookupの存立を根底から疑いたくなるような事態です。
が、実はvlookupは悪くなくて、vlookupの仕組みに合わせて
こちらが工夫をしてあげなきゃいけないんだよ、というお話です。
毎度の話ですが、下↓からダウンロードお願いします。
開くとこんな↓です※1 ※2。
で、今回のミッションですが、「入力データ」の空欄部分を、「商品データベース」からひっぱってきて、埋める、というものです。
例によって例のごとく、vlookupを使いましょう。
その際、軸となるのは…「商品ID」ですね。
じゃ!やってみてください。もう細かく説明はしませんよ?
・
・
で、やっていただくと…せっかく手を動かしていただいたところ恐縮なんですが…
エラーになっちゃうと思うんですよ※3。
式のつくりはちゃんとしてるんです。
「商品データベース」シートの「商品ID」列も、ちゃんと左に移動させました(忘れてないですよね?)。
だけどエラーになるんです。
しかし、試しに例えば1コ目の商品ID「76433892」を検索してみましょう。すると…
ちゃんと存在するんですよね、「76433892」※4。
結論から言うと、これは、2つのシートで「商品ID」の書式が異なるから起こる現象なんです※5 ※6。
「nyuuryoku」シートの商品IDの書式は文字列なんだけど、
「商品データベース」シートのは標準なんです。
でね、vlookupって、検索のとき、値がイコールであると同時に、書式もイコールでないと引っ張ってこれないんですよ。
実のところ、「書式もイコールでないと引っ張ってこれない」というのは正確な表現ではありません。 「TX291」みたいなのであれば、「標準」と「文字列」のちがいがあってもvlookupは機能します。 書式のちがいが問題になるのは、今回のケースのように、キーとなるものが全部数字のとき(「76433892」)です。 ですが、「vlookupをするときはとりあえずいつも書式を同じにする」クセをつけておけば、まずまちがいはありません。
なので、書式を揃えたいのですが…、今回は「商品データベース」シートの書式を「標準」→「文字列」にして、揃えることにしましょう。
<この機会にちょっとお話>
なぜ文字列にするのでしょうか。逆ではダメなのでしょうか。
…うーん、私の考えでは、今回のケースの「商品ID」列は絶対「文字列」です。
というより、「ID」と名のつくセルの書式が標準(今回の「商品データベース」みたいな)だとわかった瞬間に、
「このデータの作り手、わかってねーなー」と悪態をつくと思います。
「標準」書式のセルに数字を入力すると、勝手に「数値」として扱われることはみなさんご存知だと思います。
では、「数値」と「文字列」、何がちがうんでしょうか。
…え?「数値は右揃え、文字列は左揃え」ですって?そんな表面上のちがいを聞いてるんじゃないです。
もっと、本性上の差異。
「頭に0(ゼロ)を入力したいとき、文字列にしてる」…機能的には、たしかにそうですね。
「標準」書式のままだと、tel番みたいな、0(ゼロ)から始まる数字を入れられないですもんね。
でもね、一番の決定的なちがいは、「数値」は足したり引いたり掛けたり割ったりするけど、「文字列」はしないってことなんです。
逆に言えば、加減乗除するなら「数値」(ないし「標準」)、しないなら「文字列」なんです。
「ちょっとこの電話番号、2倍しといて」なんてこと、絶対ないですよね。
「このIDとあのIDを足して…」なんて計算、絶対しないですよね。だから電話番号やIDは、文字列として扱うべきなんです。
同じ「76433892」でも、「1年間の売上個数」としての「76433892」と、「商品ID」としての「76433892」で、「数値」or「文字列」はちがってくるんです。
ということで、「商品データベース」シートの書式を「文字列」にしましょう※7。
これで、式を入れてやれば、今度は!※8
…うーん、ダメですね。書式も文字列にしたのに…。
・
・
実は、書式を「標準」→「文字列」に変えるだけでは、本当の意味でイコールにはなっていないんです。
「nyuuryoku」シートの商品ID、もう一度よーく見てください。
左上に緑の三角が付いてるでしょ?※9
この緑の三角が付くところまでイコールにしてやんないと、vlookupはダメなんです。
…「めんどくせー」とか言わないでください。仕様ですので。
じゃあ、どうすれば緑の三角付きになるかと言いますと…、
「商品データベース」シートの商品IDの書式は、もう「文字列」に設定しましたよね?
そのうえで、F2キーを押してA2セルの中に入って、enterで確定してやります※10。
こうやると、晴れて緑の三角付きになります。
ためしに、20個ぐらい緑の三角付きにしてみてください※11。そうです、F2→enter連打です。
そうしておいて、「nyuuryoku」シートへ戻ってみてください※12。
ほら!引っ張ってこれてるでしょ?
このように、書式:文字列&緑の三角付きにするところまでイコールにしてあげれば、
vlookupでもってくることができるのです。
では!全部緑の三角付きにしてください。全部ですよ。
・
・
<この機会にちょっとお話>
「緑の三角って何?あたしのExcelにはないよ?」っていう方もいると思います。
…すみません。緑の三角が表示される前提で話を進めてきましたが、
Excelの設定によっては、緑の三角が表示されないんですよ。
Excel2007ですと、「Excelのオプション」の中に「バックグラウンドでエラーチェックを行う」という欄があると思います※13。
それのチェックが外れていると、緑の三角は出現しないんですよ。
実は、緑の三角って、エラーの一種という扱いなんですね。
「数値なのに、文字列として扱われてますよ」という意味のエラーです
(←もちろん、あえてこうしてるんですけどね。
…緑の三角セルにマウスを合わせると「!」マークがでるので、そこを開くと解説が現れます)。
けど、緑の三角が見かけ上見えていないとしても、
やっぱりこの章で解説するひと手間は必要となるみたい、なんですよ。なので、お手数ですが引き続きお読みください。
・
・
ということで、「商品データベース」シートの商品ID、全部緑の三角付きにできました?
「えー、もしかして、F2→enter連打するのかよ?めんどくせえ…」とうんざりしてらっしゃる方もいるかと思うのですが、
そうです。F2→enter連打です、235回。
すみません。ちょっと意地悪しました。…いや、この↑やり方でも良いんですけど、正直気が遠くなりますよね。
私個人としては、235回単純作業する根性を見せてほしいなという期待をもっていますけど、
これが1,000件とか10,000件とかだったら、とてもじゃないけど1件1件手作業、というわけにはいかないですよね。
一気にガバッ!と変換する技、欲しいところです。
ということで、ちょっとひと手間、加えてみましょうか。
まず、「商品データベース」シート「商品ID」列のとなりに、1列挿入し、
その空の新列の書式を「文字列」に設定します※14。
でね、ひとつ新しいアプリケーションを開きたいのですが…、 「メモ帳」ってありますよね?「すべてのプログラム」→「アクセサリ」に入っていることが多いかな? そいつを開いてほしいんですよ※15。
「メモ帳がない!」って方は、この章の最下段をお読みください。Excel上だけでもなんとかなります。
実はメモ帳じゃなくても、テキストエディタ(拡張子が.txtのもの)なら何でもOKなんですけどね。
僕のPCはEmEditorっていうテキストエディタを入れていて、このホームページもEmEditorで書いてます。
さて、メモ帳(ないし任意のテキストエディタ)開きました?
そしたら、「商品データベース」シートの「商品ID」列(緑の三角付きにしたいヤツ)を1列まるごとコピって、
そこに貼りつけます※16。
貼りつけた!じゃあ今度は、今貼りつけたテキストファイルの商品IDをCtrl+Aで全選択し※17、
コピーをします。
貼り付け先は、さっき空けたExcelの新列です※18 ※19。
つまり、Excel→メモ帳に一旦移して、で、再びメモ帳→Excelと移行してやる、というわけです。
でね、こうすると、全部緑の三角付きになったでしょ?確認してみてください。
あ、そうそう、この作業をしたら、必ず列のおしりを見にいって、ずれて貼りつけていないか確認しましょうね※20。
隣の(元々ある)「商品ID」列とずれがあったら、おかしいですもんね。
ハイ、できました。全部のセルに緑の三角を装着できました。 そうしたら、元の(緑の三角を付けきれなかった)古い「商品ID」列はもう不要なので、 削除しちゃいましょう※21。
で、「nyuuryoku」シートに戻りましょう。そうすると、晴れて全てのデータが引っ張って来れてると思います※22。 あ、「式、値貼りしちゃったなぁ」って人は、お手数ですがもう一度vlookup式を入れ直してくださいね。
・
・
vlookupは準備が必要なんですよ。ひとつは、「軸となる値を範囲の最左列に移動しないといけない」(其ノ9)。
もうひとつはこれ↑ね。「軸となる値の書式を揃えないといけない」。
だから僕は、vlookupで作業をする段となったら、準備段階として、
この「メモ帳貼り付け→Excelに貼り直し」というひと手間を加えることにしています。
この話、正直地味です、が、
vlookupでスムーズに仕事をするために非常に重要だと思うので、覚えておいてください。
vlookupがうまく動いてくれないときは、書式のちがい、疑ってみると良いかもしれません。
また、この「メモ帳貼り付け→Excelに戻す」という手順は、
今回とは逆に、文字列→それ以外の書式に変換する場合にも使えます。
例えば、「通貨」書式にしたいんだけどうまくいかない、というケース、
たまにあると思うんですけど、そういうときは、
この「メモ帳貼り付け→Excelに戻す」を試してみてください。
内容的に、ちょこっとプラス。
今回、緑の三角付き文字列にする方法として、「メモ帳貼り付け→Excelに戻す」というプロセスを紹介しましたが、
Excel上だけで行うテクニックも紹介します。
さっそく、やり方をば。
緑の三角付き文字列に変換したいのは、「商品データベース」の「商品ID」でしたね。
まず、そこを列選択します。
そして、その状態で、区切り位置機能を使います※23。
この機能は本来、データを特定の位置でぶった切るためのものなのですが、
今回は書式変換のために使います。
さて、「区切り位置指定ウィザード」の画面が出てきます。
デフォルトでは「カンマやタブなどの~」にチェックが入っていると思うので、そのまま「次へ」※24。
そうすると、「区切り文字」を選択する画面になります。
さっきも言ったように、この機能は本来、データをぶった切るためのもの。
なので、ぶった切る位置として「タブ」や「カンマ」、「スペース」などを選択するよう迫ってきます。
ですが今回は、どこもぶった切るつもりはないので、
すべてチェックを外します※25。
デフォルトでは「タブ」にチェックが入っていると思うんですが、そいつも外しちゃってください。そんで、「次へ」。
最後に、書式を選ぶ画面になります。ここが今回のキモです。
ここでは、(この「区切り位置」プロセスの)最終結果の表示の仕方を選ぶんだけど、
そのときに書式:文字列を選択します※26(デフォルトは「標準」)。
あ、そうそう、「表示先」(正確には表示先の「始点」)が元の場所と同じか、ということも、
念のため確認しておいてね。
で、「完了」とすると…※27。
晴れて、緑の三角付きにできました。