初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門:VLOOKUP関数の超わかりやすい解説

VLOOKUP関数の基礎

予告通り、今回はVlookUp関数を使います。というのも、あまりにこの関数を調べるために当サイトを訪れる人が大量にいるから、というのと、この発注書マクロでもVLOOKUPを使うため。というのがあります。まずVLOOKUPで出来ることってなんでしょうか?今回で言えば、、、

f:id:drumer2sh:20140501125511p:plain

ということがしたいわけですね。例えば「商社345」の住所と電話番号とFAX番号を「検索」したいわけです。ここで使えるのがVLOOKUP関数です。VLOOKUP関数のヘルプを確認すると・・・

VLOOKUP 関数を使用すると、セル範囲 (セル範囲: シート上の 2 つ以上のセル。セル範囲を指定する場合、隣接した複数のセル、または隣接していない複数のセルをセル範囲として選択できます。)の最初の列を検索し、その範囲の同じ行にある任意のセルから値を返すことができます。

と書いてあります。つまりVLOOKUPを使うと商社345を検索して、その同じ行の隣のセルとかその隣のセルなどの値を取得することができるのです。

VLOOKUPの書式

書式はこうです。とりあえずヘルプそのまま載せておきます。

VLOOKUP(検索値, 範囲, 列番号, [検索の型])

  • 検索値 必ず指定します。表または範囲の左端の列で検索する値を指定します。検索値には、値または参照を指定します。検索値に範囲の左端の列の最小値未満の値を指定すると、エラー値 #N/A が返されます。
  • 範囲 必ず指定します。データを含むセル範囲です。セル範囲への参照 (A2:D8 など)、またはセル範囲名を指定します。範囲の左端の列の値から、検索値が検索されます。これらの値には、文字列、数値、論理値のいずれかを指定できます。英字の大文字と小文字は区別されません。
  • 列番号 必ず指定します。目的のデータが入力されている列を、範囲内の左端から数えた列数で指定します。列番号に 1 を指定すると、範囲の左端の列の値が返され、2 を指定すると、左から 2 列目の値が返されます (3 列目以降も同様に指定します)。

列番号に次の値を指定すると、対応するエラーが返されます。

    • 1 未満の場合、#VALUE! エラー値が返されます。
    • 範囲の列数を超える場合、#REF! エラー値が返されます。
  • 検索の型 省略可能です。VLOOKUP を使用して検索値と完全に一致する値だけを検索するか、その近似値を含めて検索するかを指定する論理値です。
  • TRUE を指定するか省略すると、検索値と完全に一致する値、またはその近似値が返されます。完全に一致する値が見つからない場合は、検索値未満の最大値が使用されます。

重要 検索の型に TRUE を指定するか省略する場合は、範囲の左端の列にある値を昇順に並べ替えておく必要があり、これを行わないと、正しい値が返されない場合があります。

  • 検索の型に FALSE を指定する場合は、範囲の左端の列にある値を並べ替える必要はありません。
  • FALSE を指定すると、検索値と完全に一致する値だけが検索されます。完全に一致する値が範囲の左端の列に複数ある場合は、最初に見つかった値が使用されます。完全に一致する値が見つからない場合は、エラー値 #N/A が返されます。


( ゚д゚)?ふぁ?


となるのが初心者でございます。そもそもヘルプ見て理解できたらぐぐらねーっつの。

さて書式の解説。VLOOKUPは「関数」なので、f(x)の形で書かなければいけません。fは関数名、xに引数です。ですので、

VLOOKUP(引数)

となるわけです。で、引数は複数設定できるということがこの書式からわかりますね。「検索値」と「範囲」と「列番号」と「検索の型」です。んで、この引数の説明がその下に書いてあるというわけ。

  • 検索値:わかりますよね?上の表で検索したい値を入れます。今回なら「商社123」とか「商社12」とかがはいるわけです。
  • 範囲:検索する範囲を「A1:B2」のように書きます。今回なら「A1:D25」ですね。
  • 列番号:たぶんこれが初心者が( ゚д゚)?となる原因ですので後で後述
  • 検索の型:これもよくわからないと思うのでとりあえずFALSEと記述する。で覚えましょう。これも後述します。

VLOOKUPの落とし穴、列番号


おそらくVLOOKUP検索で調べる人って大抵ここで躓くと思うので簡単に書くよりはちょっとちゃんと説明した方が良いと思います。この列番号にはまず「数字」が入ります。1~の整数です。マックスの値はさっき範囲の場所で指定した列数分です。今回ならA~D列なので1~4までが引数として設定できます。なので、D列の値を入れたければ「4」と設定すればいいのです。


f:id:drumer2sh:20140501125520p:plain

VLOOKUPの列番号は常に1から!


間違いが多いのがこの部分です。列番号は常に1から始まります。それはセルの範囲とは無関係なのです。これがとても重要です。先ほどは範囲はA~D列だったのであまり気になりませんでしたが、これが、E~H列だったらどうでしょうか?この場合にH列を出したい!という時の列番号は?


答えはやっぱり、4なんです。


間違ってもA列から数えた値の8ではありません。


これがとても重要です。

VLOOKUPの検索値は絶対に1列目!


これも重要です。例えばこんなことはできない。


f:id:drumer2sh:20140501125527p:plain


これをVLOOKUPで実現したい場合は会社名を2列目にするしかありません。このこと意外と知らない人が多いのです。

検索の型TRUEのあいまい検索っていつ使うの?


これもかなりの謎なのですが、意外と知らない人が多いです。普通はどんぴしゃジャストで今回のように文字列そのものを検索することが多かったりします。この場合、検索の型はFALSEです。つまり完全一致検索です。ではTRUEのあいまいはいったい何に使うのか?ということです。それが・・・

数値検索


です。例えば80点から90点の人を検索したいとか、200円~300円の商品を探したいとか、そんな時です。こんな時にあいまい検索を使うのです。あいまい検索は、検索値の値がない場合に、それ未満の一番大きい値が検索されるのです。これ、とっても便利です。例えば、こんな時に使えます。


f:id:drumer2sh:20140501125537p:plain


このようにすることで、あいまい検索は非常に便利です。間違っても、文字列検索でTRUEとかにすんじゃねーよ?


VLOOKUP関数のまとめ

  • VLOOKUPは検索した結果の行と同じ行の別の列を参照できる関数
  • VLOOKUPの検索値は常に1列目が検索される
  • VLOOKUPの列番号も常に1から数える。範囲とは関係がない。
  • VLOOKUPの検索の型は文字列検索ならFALSE、数値ならTRUEが便利。


となります。以上です。次回にこれを踏まえて、エクセルマクロVBAでVLOOKUP関数を使います。使い方はまったく同じです。前もやってるんですけどね。ここまでちゃんと関数の解説はしてないので、書いてみました。


今日はここまで!


かしこ。