「社員コード」を入力すると「氏名」が自動表示されるという機能です。
先に「社員マスタ」のようなシートを用意しておいて「社員コード」「氏名」の一覧を作成しておきます。
「社員コード」を入力して「氏名」を表示させる方のシートの「氏名」のセルに下記のような計算式を入れるだけでこのような機能が実現します。
この時の「社員コード」が「数値」なのか「文字列」なのか統一されていないとうまく行かないこともありますが、その説明も加えてあります。
マスタテーブル(セル範囲)からコードに相当する名称を見つけて表示する
一般的なコンピュータ処理では、売上明細など個々の明細データには﹁名称﹂の項目はなく、﹁コード﹂から該当のマスタを参照して﹁名称﹂を取り出します。
ここで説明するのが、そういったマスタから名称やそれ以外の補足情報を参照する方法です。
このサンプルは、社員番号から氏名を表示させています。
(画像をクリックすると、このサンプルがダウンロードできます)
﹁VLOOKUP関数﹂を使います。﹁氏名﹂セルの数式は、
=VLOOKUP($B$2,マスタ!$A$1:$B$7,2,FALSE)
このようになります。
関数 | 概略説明 |
VLOOKUP関数 |
テーブルまたはセル範囲の内容を行ごとに検索し、見つかった行の指定列番号の値を返します。
検索はテーブルの左端列で行なわれます。引数は以下の通りです。
① 検索値
② テーブルとなるセル範囲
③ 戻り値となる列番号(セル範囲の左端列を「1」とする相対番号)
④ 検索方法(完全一致はFALSEとする)
|
※通常は、このように﹁縦方向﹂に向かって参照しますが、例えば﹁コード﹂が横に並んでいるような場合は、﹁HLOOKUP関数﹂を同じように使います。
テーブルに存在しない﹁コード﹂を入力した時はこのサンプルでは﹁#N/A﹂というエラーになりますが、エラーの表現を変更したいような場合は﹁エラーの回避策﹂をご覧下さい。
マスタテーブル(セル範囲)からコードに相当する相対位置を見つける
﹁VLOOKUP関数﹂では、テーブル位置の﹁他の列﹂の内容を表示しますが、場合によってはその内容ではなく、﹁何番目﹂にあるかが取り出したい場合があります。
﹁コード﹂を見つけた同じ行から複数の列の値を参照したい場合や、﹁コード﹂の列が参照したい内容の列より右にある場合などが一般的なケースでしょう。
このような場合は、﹁MATCH関数﹂を使います。
(画像をクリックすると、このサンプルがダウンロードできます)
この例の程度であれば、同じように﹁VLOOKUP関数﹂を﹁氏名﹂﹁部署﹂﹁内線﹂それぞれに置けば良いのですが、一度の検索で﹁位置﹂を掴んでしまえば同じ配列位置からそれぞれの参照値を取り出せるということも多いと思います。
このような場合は、一旦欄外のセルに参照位置の﹁番号﹂を1回だけ﹁MATCH関数﹂で参照しておき、﹁氏名﹂﹁部署﹂﹁内線﹂の項目は、﹁INDEX関数﹂でその﹁番号﹂を使って直接マスタシートのテーブルを参照しています。 欄外のセル(F2)の数式は、
=MATCH($B$2,マスタ!$A$2:$A$8,0)
このようになります。 一方、「氏名」「部署」「内線」セルの数式は、
[氏名(B4)]
=INDEX(マスタ!$A$2:$D$8,$F$2,2)
[部署(B5)]
=INDEX(マスタ!$A$2:$D$8,$F$2,3)
[内線(B6)]
=INDEX(マスタ!$A$2:$D$8,$F$2,4)
このようになります。
関数 | 概略説明 |
MATCH関数 |
検索値で検索セル範囲を検索し、見つかった位置の検索セル範囲内での相対位置を返します。
引数は以下の通りです。
① 検索値
② 検索するセル範囲
③ 照合の型(省略可:省略時は1)
⇒1:検索値以下の最大値、0:検索値と一致する値、-1:検索値以上の最小値
※0以外の場合は検索するセル範囲が値の昇順(1)、または降順(-1)に並んでいる必要があります。
|
INDEX関数 |
行番号、列番号により、テーブルにある値、またはセル範囲あるいはその値のセル参照を返します。
引数は以下の通りです。
① 配列またはセル範囲
② 行番号(相対値)
③ 列番号(相対値)
|
XLOOKUP関数を使ってみましょう。
﹁XLOOKUP関数﹂は﹁Office 365(現在はMicrosoft 365)﹂と﹁Office 2021以降﹂のExcelにしか実装されていない関数です。
2019年頃から﹁スピル﹂が話題になっていますが、この関数でもこの﹁スピル﹂を利用します。
(画像をクリックすると、このサンプルがダウンロードできます)
計算式は、
=XLOOKUP($B$2,マスタ!$A$2:$A$8,マスタ!$B$2:$D$8)
です。
![XLOOKUP関数サンプル](images/03_XLOOKUP1_02N.gif)
この計算式は
C2セルだけに投入しており、
D2セル、
E2セルは同じ計算式が数式バーに表示されますがグレー表示となっています。
関数 | 概略説明 |
XLOOKUP関数 |
範囲または配列を検索し、最初に見つかった一致に対応する項目を返します。 一致するものがない場合、最も近い(近似)一致を返します。
引数は以下の通りです。(④以降はオプション)
① 検索値
② 検索範囲(検索する配列またはセル範囲)
③ 戻り配列(返す配列またはセル範囲)
④ 見つからない場合(初期値は#N/A)
⑤ 一致モード(初期値は0)
値 |
モードの説明 |
0 |
完全一致 見つからない場合は#N/Aが返される |
-1 |
完全一致 見つからない場合は次の小さなアイテムが返される |
1 |
完全一致 見つからない場合は次の大きなアイテムが返される |
2 |
ワイルドカード一致(*、?等) |
⑥ 検索モード(初期値は1)
値 |
モードの説明 |
1 |
先頭の項目から検索を実行 |
-1 |
末尾の項目から逆方向に検索を実行 |
2 |
昇順で並べ替えられた検索範囲を使用してバイナリ検索を実行 |
-2 |
降順で並べ替えられた検索範囲を使用してバイナリ検索を実行 |
|
さて、﹁スピル﹂であふれた分の結果はそのままだと上の画像のように右側セルに表示されます。
これを、前項の﹁MATCH関数﹂のサンプルのように縦に並べたい時はこのようにします。
![XLOOKUP関数サンプル](images/03_XLOOKUP2_01N.gif)
計算式は、
=TRANSPOSE(XLOOKUP($B$2,マスタ!$A$2:$A$8,マスタ!$B$2:$D$8))
です。
関数 | 概略説明 |
TRANSPOSE関数 |
引数で指定されたセル範囲の縦横変換した内容を、数式投入したセルを起点にスピル展開します。
|
つまり、﹁XLOOKUP関数﹂の処理結果に対して、﹁TRANSPOSE関数﹂で行列を入れ替えているだけですが、これにより﹁スピル﹂のあふれる方向が﹁縦方向﹂に替わります。
念のため、XLOOKUP関数に対応していないバージョンのExcelで開いてみました。
該当PCは単なるOffice2019(売り切り版)です。サブスクリプション対応ではありません。
![XLOOKUP関数サンプル](images/03_XLOOKUP1_03.gif)
このようになりました。
計算式は、
={_xlfn.XLOOKUP($B$2,マスタ!$A$1:$A$7,マスタ!$B$1:$D$7)}
です。
﹁スピル﹂なので配列数式に変換されていますが、それより、
﹁XLOOKUP関数﹂の前にある﹁_xlfn.﹂です。
この﹁_xlfn.﹂が付くのは、開いているバージョンで対応されていない関数が使われていることを意味しています。
再計算させてもエラーにはならずにセル表示値も前回保存時の値のままになります。
﹁_xlfn.﹂が表示されるのはこのワークブックを作成した側のExcelのバージョンが、
現在開いているExcelのバージョンより高く、さらに高いバージョン側でしか対応していない関数を使用していることを意味しています。