Excelの「VLOOKUP関数」の使い方について

  
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
  
  

★ 解説サイト

https://dekiru.net/article/15221/
  
  
★ VLOOKUP関数が「SQL」や「パワークエリなど」よりも便利な場面

VLOOKUP関数は、たとえば以下のような場面で便利だと思います。

(01)クロス集計表のなかで、他の表から「値の紐付けゲット」がしたい場合
(02)列単位ではなく、1セル単位で細かく、「値の紐付けゲット」がしたい場合
(03)列単位・リスト表などのなかであっても、規模の小さい表での、「値の紐付けゲット」がしたい場合
(04)複数の複雑な条件が同時に発生していない場合。
(05)「紐付けゲット」したい対象の表の「列」のレイアウト(並び順等々)が、頻繁に変化しない場合。(あるいは、列名で処理しなくてもいい場合・セル番地で処理できる場合。)
※「列」のレイアウト=列の並び順などが、頻繁に変化する場合は「SQL」のほうが工数が激減します。修正の必要も減ります。
(06)1つの表の中において、複数の「参照先・紐付け先」を使いたい場合。(=複数の異なる表の値を紐付けゲットしたい場合。)
などなど。
(07)「SQL」ではありえない検索結果(VLOOKUPの第4引数をTrueで使うような検索)が、その仕事にマッチする場合。

※参考記事
↓こちらの、『 「ワークシート関数」のほうが「SQL」や「パワークエリなど」よりも便利な場面 』もご参考に。
★★★★★★Access2000VBA・Excel2000VBA独学~★★★「ワークシート関数」と「SQL」や「パワークエリ・パワーピボットなど」との使い分け。ワークシート関数が便利な場面とSQLが便利な場面の使い分けについて~

大きなリスト形式の表や複雑な条件が同時に複数あるような場合、速度を求めるような場合、は、SQL(MicrosoftQueryやQueryTableオブジェクト等々にて)を使うほうが便利だと思いますが、それだとかえって効率が悪くなってしまうような「小回りをきかせたいとき」に、VLOOKUP関数での「値の紐付けゲット」は便利だと思います。
ただ、SQLを使う場合でも、単純な処理なら関数化してしまえば「小回りを利かせることも一応不可能じゃない」ので、VLOOKUP関数、SQLを使った自作関数、その他、でシーンにあったものを選択し分ければ良いと思います。

大変残念ながら、マイクロソフトさんは「VLOOKUP関数は古い技術」と自分で自分の作った機能をけなしてしまっていますが、そのようなことはありません。
VLOOKUP関数でも、INDEX+MATCH?でも、SQLでも、リレーションシップ機能でも、なんでも、古かろうが新しかろうが、ケースバイケースで、シーンにあった使い方・機能のコーディネイトをするのが一番、データ管理のコスパアップに結び付きます。
「クロス集計表(静的な表)」や「レイアウトがメチャクチャな表での利用」とか、「セル単位で小回りが利く使い方」をしたい場合は、VLOOKUP関数のほうが便利なことが多いと思います。

※逆に「レイアウトがしっかりしているリスト形式の表(動的な表)」で、
「セル単位ではなく」「表単位」で「一括操作」等々が「高速に」したい場合、
「数式破壊防止のセルロックもしたくない」等々の場合は、
「SQL」の「リレーション(JOINなどを使う)」ほうが便利で、
VLOOKUPはすごく非効率になります。

そのような場合との「使い分け」は、とっても大切ですので、
「いつも絶対VLOOKUPがいい」とか「いつも絶対SQLがいい」、ということには「なりません」。

  
  
★ VLOOKUP関数の基本的な構文ルール

=VLOOKUP(①検索語句 ,
      ②探す場所(表の範囲・絶対参照で) ,
      ③ゲットしたい値が在る列の列順(②の表の範囲内での) ,
      ④検索の型 )

(ア)
事前準備として、「検索対象・検索先の列」は、第2引数の「探す場所(表の範囲)」の中に含まれている状態にする必要があります。
そして、その「検索先の列」が「一番左にくるように」、列を入れ替えなどをしておく必要があります。
  あるいは、列の複製を作成しておく必要があります。
  あるいは、第3引数で使う「ゲットしたい値が在る列の列順」を、すべて、
  「検索対象の列」の右側に移動させておく必要があります。
ちなみにですが、「検索対象の列」が、指定した表の範囲の外側に居てしまうと、
エラーになります。

(イ)
事前知識としてですが…、(ア)の「検索対象の列」自体は、引数としては指定しません。
「それは表の一番左にある前提だから」、ということで「自動的に決め打ち」してくれているようです。
なのでもし仮に、検索語句の値が「検索対象の列」以外の列(セル)にあったとしても、間違えてしまうことは無いようです。

(ウ)
事前準備として、第3引数の「③ゲットしたい値が在る列の列順(②の表の範囲内での) 」は、その列の並び(列順)が変わってしまうとVLOOKUP関数自体が使えないので、並び(列順)が変わらないようにしないといけません。
※もしこの並び(列順)が良く変わるようなら・・・、例えば基幹システムから毎回この表をインポートする、というような場合ですが、その場合はVLOOKUP関数はやめて「SQL」での「JOIN」か「WHERE」を使うほうがいいかもしれません。(その際は、MicrosoftQueryかQueryTableオブジェクト+VBA+ODBC、を使用します。)
SQLとVLOOKUP関数以外ならパワークエリ?リレーションシップ機能?でもいいかもしれませんが、動作が遅い・面倒くさいのとネストがしにくい・文献が少なすぎて自動化できない(できにくい)などのことがあります。
なので、パワークエリ?リレーションシップ機能?でしかできないことではない、ごく一般的なデータ処理なら、MicrosoftQueryかQueryTableオブジェクト+VBA+ODBCのほうが簡単だと思います。また、そのなかでとくに QueryTableオブジェクト+VBA+ODBCの場合はVBAによる「自動化」がすごくしやすくて・ネスト的なこともしやすいです)

(エ)
第1引数の「①検索語句」は、セル番地ではなく実際の生データを指定してもOKです。

(オ)
第2引数の「②探す場所(表の範囲)」の指定時には、例外ケース以外は、基本、「絶対参照」を使います。
でないと、最初に作ったVLOOKUP式をオートフィルすることで、
「探す場所(表の範囲)」もズレていってしまい、値を正しく「紐付けゲット」できないので。

  ※探す場所は、行と列が増えてもいいように、「名前定義」機能で定義した
   その「名前」でもOKです。
   その場合、絶対参照でのセル指定の場合と同じように、オートフィルしても
   参照先のセルがズレることがありません。
   そして基本、名前の定義に、
   「=OFFSET($A$1,0,0,COUNTA($A:$A),COUNTA($1:$1))」
   を使うと、探す場所の行と列が増えても数式を変更する必要がありません。
   自動で増減に対応できます。
   (ただし、一番左の列のセルが、全部埋まっている必要があります。)
   参考→『ピボットテーブルのソースの表を、行も列も可変にしする方法

(カ)
第4引数の「④検索の型」は「True」にせずに「False」にしておかないと「#N/A」エラーなどが出たり、 正しい値が出なかったりで「ハマり」ます。

◆ 省略すると「True」とみなされるので、「絶対に省略しない」ように。
使いこなせるようになるまでは、絶対に「False」を入力すること。

※[検索値]に一致するデータが見つからないとき、
「TRUE」では[検索値]を超えない最大値を該当のデータとします。
「FALSE」ではエラーになります。 https://dekiru.net/article/15221/ より。

※「#N/A」エラーなどを表示したくない場合は、IFやISERROR関数などを併用します。(後述)

(キ)
「検索語句」や「探す場所(表の範囲)」等々のシート名は、自シート内なら省略可能です。

  
  
★ もう少し具体的な構文ルール

=VLOOKUP(①検索元の単一セルの番地 , ②探す場所(表の範囲・絶対参照)の番地 , ③ゲットしたい値が在る列の列順(②の表の範囲内での) , ④False )
  
  
★ 構文ひな形01(エラー表示をさせてもいいとき)

=VLOOKUP(シート名!単一の相対セル番地 , シート名!対象表の範囲の絶対セル番地 , 2 , False )

具体例

=VLOOKUP(H2,Aランク!$A$2:$B$756,2,FALSE)

※「検索語句」だけ自シート、参照先の表は他のシート、であることを想定しています。
  
  
★ 構文ひな形02(エラー表示をさせたくないとき)

=IF(ISERROR(VLOOKUP(シート名!単一の相対セル番地 , シート名!対象表の範囲の絶対セル番地 , 2 , False))=TRUE,"", 先頭のほうのVLOOKUP・・・の部分をコピペ )

具体例

=IF(ISERROR(VLOOKUP(H2,Aランク!$A$2:$B$756,2,FALSE))=TRUE,"",VLOOKUP(H2,Aランク!$A$2:$B$756,2,FALSE))

※「検索語句」だけ自シート、参照先の表は他のシート、であることを想定しています。