事務作業の省力化や資料作成に役立つ、Excelの使い方を紹介

Excelの機能を最大限に生かして、業務の省力化や経営状況を分析できる資料の作成方法を解説します。

VLOOKUP関数とINDEX関数を使い分ける

「VLOOKUP関数」「INDEX関数」は同じ目的で使われる関数です

  2つの関数は似たような使われ方をしますが、それぞれに特徴があるので使い分ける必要があります。

 

 

VLOOKUP関数INDEX関数の違い 

 VLOOKUP関数INDEX関数「検索/行列」に属する関数ですが、基本的には違う性質の関数です。

  • VLOOKUP関数には検索機能がありますが、INDEX関数には検索機能はありません
  • VLOOKUP関数行方向(HLOOKUP関数は列方向)にしか検索機能が無いので、列方向の検索(クロス集計)をするためには、MACH関数を組み合わせる必要があります。

   f:id:k-ohmori9616:20200414110256p:plain

   f:id:k-ohmori9616:20200414105622p:plain

 

  •  INDEX関数MATCH関数と組み合わせることで行方向・列方向検索(クロス集計)の機能を持たせることができます。

   f:id:k-ohmori9616:20200414110639p:plain

   f:id:k-ohmori9616:20200414105541p:plain

 

VLOOKUP関数INDEX関数の相違点をまとめると
  • VLOOKUP関数は指定された範囲の一番左の列を検索し、一致する行のセルの値を返します。
  • INDEX関数は指定した範囲で指定した行、列の交点のセルの値を返すだけで検索の機能は無い
  • INDEX関数MATCH関数と組み合わせることによって、検索の機能を持たせることができます。
  • VLOOKUP関数の場合は検索対象が一番左の列に固定されるので、それ以外の列を検索したい場合は使うことができません。
  • INDEX関数MATCH関数を組み合わせれば、「行」と「列」を同時に検索対象とするクロス集計が簡単にできます。※ VLOOKUP関数でも可能)

  

クロス集計で「会員のランク」に応じた「時間帯別の利用料金を調べる

 フィットネスクラブで「会員のランク」に応じて、時間帯別に異なる利用料金を調べる表を作成します。
 このように、2つの条件に合致するものをもとめるクロス集計をする場合、VLOOKUP関数では数式が複雑になってしまいます。

 

利用時間」と「会員種別」の2つの条件に合致する利用料金を求める

 横方向と縦方向の2つの条件で検索して、両方の条件に一致する部分が求める「値」になるように数式を作成する。

 

「ゴールド会員」「早朝時間帯」に利用すると500円になる

   f:id:k-ohmori9616:20200413101055p:plain

数式の作成方法は複数あります
  1. VLOOKUP関数MACH関数組み合わせてクロス集計する
  2. INDEX関数クロス集計する

 

1.VLOOKUP関数MACH関数を組み合わせてクロス集計する

 VLOOKUP関数行方向を検索し、MATCH関数を使って列方向を検索することで2つの条件(クロス集計)します。

   f:id:k-ohmori9616:20190625091036p:plain

  1. MATCH関数「会員種類が何列目かを求める
  2. VLOOKUP関数「列番号」MATCH関数で求めた「何列目になるかの値」を入れる
  3. 検索方法を「FALSE」として近似値を求める
  4. 注意点は元になる表の「利用時間」のフィールド(項目)左端(1列目)にする必要があることです。(※ VLOOKUP関数は範囲の左端が「1」になる) 

   f:id:k-ohmori9616:20200413103734p:plain

 

「料金表」名前を設定します

 検索範囲にする表の範囲に「名前」を付けることで、数式が分かり易くなります。

  1. 検索対象にする、表の料金表の範囲を選択します
  2. 名前ボックス「料金表」と入力します

   f:id:k-ohmori9616:20190624091226p:plain

 

検索条件の各部に「名前」を付けます

 範囲に一つ一つ名前を付けることもできますが、「選択範囲から作成」の機能を使えば、表の各部に一度で名前を付けることができます。

  1. 検索用の範囲を選択します
  2. 「数式タブ」を選択します
  3. 「選択範囲から作成」をクリック
  4. 選択範囲から名前...ダイアログで「上端行」にチェックを入れる
  5. 「OK」をクリック 

   f:id:k-ohmori9616:20190624094147p:plain

 

各部に「名前」が付きました

   f:id:k-ohmori9616:20190624094916p:plain

 

検索部分に「リスト入力」を設定します

 「検索値」を入力する部分に「リスト入力」を設定することで、検索値を入力する手間を省けると同時に、入力ミスにより正しく検索されないことを防ぐことができます。

  1. リスト入力を設定する部分を選択します
  2. 「データタブ」を選択
  3. 入力の種類を「リスト入力」にする
  4. 元の値に「利用時間」の範囲を設定 

   f:id:k-ohmori9616:20190624095434p:plain

 

「リスト入力」が設定されました

 「利用時間」の部分に、リスト入力が設定されました、「会員種類」の部分も同様の方法で設定します。

   f:id:k-ohmori9616:20190624095804p:plain

 

VLOOKUP関数とMACH関数を使って数式を入力します

 VLOOKUP関数行方向の「利用時間」を検索し、MATCH関数列方向の「会員種類」を検索します。

 

関数入力のダイアログで関数を入力します
  1. 数式を入力するセルを選択します
  2. 数式バーの fx をクリックして、「関数の挿入」ダイアログを開きます
  3. 関数の分類で「検索/行列」を選択します
  4. 関数名のボックスで「VLOOKUP関数」を選択します

   f:id:k-ohmori9616:20190624100835p:plain

 

関数入力のダイアログで数式を設定します

「検索値」のボックスを設定します

 関数の「引数」に範囲のつけた名前を使う場合、直接「名前」を入力しても構いませんが、「F3キー」を入力すると表示される「名前の貼り付けダイアログ」から選択することで簡単に間違いなく入力することができます。

  1. 「検索値」のボックス F3キーを押します
  2. 名前の貼り付けダイアログで、名前を付けた範囲「利用時間」を選択します

  ボックスで「 F3キー」を押せば、設定した「名前」の一覧から選択できます

    f:id:k-ohmori9616:20190624101302p:plain

 

「範囲」のボックスを設定します
  1. 範囲のボックスで F3キーを押します
  2. 名前の貼り付けボックスで「料金表」を選択します

      f:id:k-ohmori9616:20190624104707p:plain

 

VLOOKUP関数「列番号」のボックスを設定します

 VLOOKUP関数「列番号」はMATCH関数で検索して求めます。

 数式はVLOOKUP関数「列番号」MATCH関数ネスト(入れ子した構造になります。

 入力の難しいネスト(入れ子ですが、関数の挿入ダイアログを使うことで分かり易くなります

  1. 列番号のボックスにカーソルを置きます
  2. 名前ボックス「MATCH関数」を選択します(※ 名前ボックスを使うことで、ネスト(入れ子)ができます)
  3. 「MATCH関数」のダイアログが開くので、「検索値」のボックスで「 F3キー 」を押します
  4. 名前の貼り付けのボックス「会員種別」を選択します

  ※ 「名前ボックス」にMATCH関数がない場合は「その他の関数」で探します

   f:id:k-ohmori9616:20190624110536p:plain

 

MATCH関数を設定します
  1. 「検査範囲」のボックスを選択します
  2. 「会員種類」の範囲を選択します
  3. 照合の種類を「」にします

  ※ 会員種類の「範囲」に注意してください

   f:id:k-ohmori9616:20190624114704p:plain

 

VLOOKUP関数に戻って設定します

 ネスト(入れ子)になっている関数から、もとの関数に戻るには「数式バー」の「関数の文字列」のどこか1カ所をクリックすると、その関数の「関数の挿入」ダイアログに切り替わります。

  1. 「数式バー」の「VLOOKUP関数」の部分をクリックします
  2. 「VLOOKUP関数」のダイアログが開きます
  3. 検索方法を「FALSE」にします

  数式バーの「開きたい関数」の部分をクリックすると、そのダイアログが開きます

   f:id:k-ohmori9616:20190624112547p:plain

 

「利用時間」「会員種類」を選択すると「金額」が表示されます

   f:id:k-ohmori9616:20190624114941p:plain

 

INDEX関数で「クロス集計」をする方法

   f:id:k-ohmori9616:20190625091422p:plain

  1. 「配列」として料金表全体を指定
  2. 「行番号」MATCH関数で求める
  3. 「列番号」MATCH関数で求める
  4. 「行」と「列」はMATCH関数で直接指定するので、並びを気にする必要がない  

   f:id:k-ohmori9616:20200413133513p:plain

  

INDEX関数MACH関数を使って数式を入力します
  1. 数式を入力するセルを選択します
  2. 関数の分類で「検索/行列」を選択します
  3. 関数名から「INDEX」を選択します

    f:id:k-ohmori9616:20190624115939p:plain

 

INDEX関数の設定
  1.  「配列」のボックス「 F3キー 」を押します
  2. 名前の貼り付けボックス「料金表」を選択します

   f:id:k-ohmori9616:20190624120238p:plain

 

MATCH関数を使って「行番号」「列番号」を求めます
  1. 「行番号」のボックスにカーソルを置きます
  2. 「名前ボックス」MACH関数を選択すると、MACH関数のダイアログが開きます

   f:id:k-ohmori9616:20190624120855p:plain

 

「行番号」を設定します

  MACH関数のダイアログで、行番号を設定します

  1. 検索値のボックスに、「 F3キー」を使って「利用時間」を入力
  2. 検査範囲に「利用時間の範囲」を選択します(※ 2行目から選択)

   f:id:k-ohmori9616:20190624121826p:plain

 

「列番号」を設定

 INDEX関数「関数の挿入」ダイアログに戻って「列番号」の設定をします。

  1. 数式バーの「INDEX関数」の部分をクリックします
  2. 「INDEX関数」のダイアログが開くので「列番号」の部分を選択し、名前ボックスで「MACH関数」をクリックし、MATCH関数のダイアログを開きます

   f:id:k-ohmori9616:20190624125112p:plain

 

「列番号」を入力
  1. 検査値のボックスに「 F3キー」を使って「会員種類」を入力します
  2. 検査範囲に「会員種類」の範囲を選択します(※ 列Bから選択する)
  3. 照合の種類を「0」に設定

   f:id:k-ohmori9616:20190624123725p:plain

 

 

「時間」に対応して、A~F「時間帯」を表示させる場合

VLOOKUP関数を使う方法
  • 検索対象の「時間」を左端に配置します(※ 必須)
  •   =VLOOKUP([@時間],テーブル1,2,TRUE)  

   f:id:k-ohmori9616:20200413145159p:plain

 
INDEX関数を使う方法
  • 検索対象の「時間」が左端に無い場合でも対応できる
  • MATCH関数で「時間」を検索して、INDEX関数が必要とする「行」の値を求める
  • =INDEX(テーブル2,MATCH([@時間],テーブル2[時間],1),1)

   f:id:k-ohmori9616:20200413141405p:plain

 


※「クロス集計(抽出)」にはINDEX関数が適している

VLOOKUP関数の場合
  • 数式は「=VLOOKUP(検索値 , 範囲 , 列番号 , 検索の型)」となる
  • 「列番号」MATCH関数で求める
  • 数式は「 MATCH(検索値、検査範囲、照合の種類)」となる
  •  
INDEX関数の場合
  • 数式は「 INDEX(検索範囲 , MATCH(行) MATCH(列) , 照合の種類 )」となる
  • 2つのMATCH関数直接「行」と「列」を指定するので検索範囲の並びを気にしなくてもよい

   f:id:k-ohmori9616:20200413145515p:plain

 

INDEX関数とVLOOKUP関数は状況によって使い分けます

  • 「クロス集計」をする場合にはINDEX関数が適している。
  • 「リスト入力」など、単純な参照をする場合にはVLOOKUP関数が使いやすい。

 

 通常、表引き(検索)というとVLOOKUP関数を想像しますが、縦・横の条件で表引きするクロス集計をする場合はINDEX関数が適しています。

 VLOOKUP関数は「行」の検索対象にするフィールド(項目)を、表の左端に置くことで「行の指定」を省略することができますが、表がそのような構造(並び)になっていない場合は使用できません。

 INDEX関数「行」と「列」の検索対象を直接指定するので、フィールド(項目)の並びを気にする必要がないので、縦・横の表引き(クロス集計)をする場合はINDEX関数を使うことをお勧めします

 

 

k-ohmori9616.hatenablog.com