この記事では、セルに入力すると隣のセルが自動で入力される方法を解説します。
今回ご紹介する方法は、
・INDEX関数
・MATCH関数
を組み合わせていきます。
よく使われるのはVLOOKUP関数ですが、こちらの方法では、検索列が左になくても使えるので汎用性が高いやり方です。
それでは実際のサンプルを用いてみていきましょう。
エクセルにて隣のセルを自動入力(値を返す)方法【一致したら隣のセル】
図のように“ホテルB”と入力すると、隣のセルのホテルランクが自動で表示されるようにします。
具体的には任意のセルに=INDEX(B2:B6,MATCH(E2,A2:A6,0))と入れましょう。
この数式の詳細を確認していきます。
まずINDEX関数とは、行と列の交差するセルの値を返す関数であり
=INDEX(配列, 行番号, [列番号])
と入れます。
例えば=INDEX(A2:A6,2)と入れると、“ホテル”の表の中(A2:A6)から2行目を取り出した結果の“ホテルB”を返すことができるのです。
さらに、MATCH関数とは、取り出したい値が表の何番目にあるか数値で示す関数であり、
=MATCH(検査値, 検査範囲, [照合の型])
と使います。=MATCH(“ホテルB”,A2:A6)といれれば、A2~A6の間でホテルBが何番目にくるのかを表示することができるのです。
具体的な操作は以下の通りです。
まずINDEX関数を設定していきます。参照する範囲は“ホテルランク”(B2:B6)を選択します。
次に、行番号にあたる部分にMATCH関数を入れましょう。
MATCHと入力し、Tabキーを押します。
するとMATCH関数の引数設定にカーソルが移ります。“検査値”にホテル名を入力するセル(E2)を参照するといいです。
次にホテル名の表(A2:A6)を選択します。
ここはMATCH関数が数値を取り出す範囲です。
[照合の型]は0(完全一致)を入力します。
最後にカッコを2つ入力し、Enterキーで確定しましょう。
これらの流れより、最終的な数式は=INDEX(B2:B6,MATCH(E2,A2:A6,0))となるのです。
INDEX関数の[列番号]は省略可なので、そのままカッコで閉じています。
これで、隣のセルを自動入力する仕組みが完成です。
VBA(マクロ)で隣のセルに自動表示させる方法
今度は、エクセルのマクロを使って、ホテル名を入力すると隣のセルにホテルランクが自動表示されるようにする方法を確認します。
関数を使わないVBAコードで実装します。
Sub HotelRankLookup()
Dim ws As Worksheet
Dim hotelTable As Range
Dim hotelCell As Range
Dim rankCell As Range
Set ws = ActiveSheet
Set hotelTable = ws.Range("A2:B6")
Set hotelCell = ws.Range("E2")
Set rankCell = hotelCell.Offset(0, 1)
Dim hotelName As String
hotelName = hotelCell.Value
Dim rankValue As String
rankValue = Application.VLookup(hotelName, hotelTable, 2, False)
If Not IsError(rankValue) Then
rankCell.Value = rankValue
Else
rankCell.Value = ""
End If
End Sub
コードの意味詳細
このマクロの動作は以下の通りです。
1. HotelRankLookupというマクロ名で定義します。
2. 必要な変数を宣言します。wsはアクティブなワークシート、hotelTableはホテル名とランクの対応表の範囲、`hotelCell`はホテル名を入力するセル、rankCellはランクを表示するセルを表します。
3. hotelCellに入力されたホテル名をhotelName変数に取得します。
4. Application.VLookup関数を使って、hotelNameに対応するランクをhotelTableから検索します。検索結果はrankValue変数に格納されます。
5. rankValueがエラー値でない場合、rankCellにランクを表示します。エラー値の場合は空白を表示します。
これで、E2セルにホテル名を入力すると、隣のF2セルに自動的にホテルランクが表示されるようになります。ホテル名が対応表に存在しない場合は、ランクセルは空白になります。
マクロを使えば、関数を直接セルに入力することなく、ホテル名からランクを自動的に表示できるようになります(^^)/
エクセルにて隣のセルを自動入力(値を返す)方法【一致したら隣のセル:複数の場合】
INDEX関数とMATCH関数を使ったやり方では、一番初めに出た検索結果のみが表示されます。
そこで複数データが該当した場合にすべてを表示する方法を解説していきます。
具体的には、=IFERROR(INDEX($A$2:$A$6,MATCH($E$2&COLUMN(B:B),$C$2:$C$6,0)),””)と対応セルに入れましょう。
この数式の詳細を見ていきます。
初めにCOUNTIF関数(条件に一致した数をカウントできる関数)を使って、それぞれのホテルランクが何回目に出てきたかを数えます。
COUNTIFの書式は、
=COUNTIF(範囲, 検索条件)
です。
例えば、ホテルランクが4★のホテルは3つあります。
同じ“4★”という値では一番初めに出る検索結果、ホテルBしか出ません。
この3つすべてを検索結果として出すためには、すべてに違う値を付ける必要があります。
ではホテルランクの隣のC列に作業列を作ります。=COUNTIFを入力しましょう。
範囲はB2:B2と入力します。
範囲のはじまりは動かしたくないので、はじめのB2にF4キーで絶対参照を付けます。
数式の最後にカーソルを立て、検索条件を“,B2”と入力し、カッコで閉じましょう。
オートフィルで下に数式をコピーします。
この数字がホテルランクの範囲の中で何回目に出たかを示しており、4★であればホテルBに①、ホテルDに➁、ホテルEに➂と表示されています。
番号だけだとわかりづらいので、文字を結合していきます。=とCOUNTIFの間にカーソルを立て、B2&と入力しましょう。
すると5★1と表示されました。
オートフィルで下まで数式をコピーしましょう。これで5★が1回出たということがわかりやすくなりました。
ここからINDEX関数の設定をしていきます。
ホテル名を表示させたいセルに=INDEXと入力し、Tabキーを押します。
ホテル名の範囲を選択し、F4キーで絶対参照をしましょう。
次に“,“で区切り、MATCHと入力してTabキーを押します。
ランクを入力するセル(E2)を参照し、F4キーで絶対参照を付けます。
ここで検索値にCOUNTIF関数で出した値と同じ値(5★1、4★1など)を取り出すために、ランクを入力するセル(E2)と列番号を示すCOLUMN関数を結合します。
“&COLUMN”と入力しましょう。
COLUMN関数は、列を番号として数値で表示する関数であり、書式は、
=COLUMN(範囲)
です。
ホテルランクの5★にCOLUMN関数で列番号を1から出して結合することで、“5★1”という値を出します。
ではA列をクリックしましょう。A:Aと入力されます。
MATCH関数の“検査範囲”を入力します。
“,”で区切り、先ほどCOUNTIF関数で出した値の範囲を選択しましょう。
ここも動かしたくないのでF4キーで絶対参照を付けます。
[照合の種類]に0(完全一致)と入力し、カッコを2つ入れてMATCH関数とINDEX関数の書式を閉じましょう。
するとランクが“4★”のホテルBが表示されました。
右側にオートフィルして数式をコピーするとホテルD、Eも出てきました。
数式は、
= (INDEX($A$2:$A$6,MATCH($E$2&COLUMN(B:B),$C$2:$C$6,0))
となっています。
あとはエラー値が出ないようにIFERROR関数を設定していきます。
=とINDEXの間にカーソルを立て、IFERRORと入力しTabキーを押します。
そしてカーソルを数式の一番後に立て、,(カンマ)と空白記号の””を入力しカッコで閉じます。
エラー値が空白になりました。
最終的な数式は、=IFERROR(INDEX($A$2:$A$6,MATCH($E$2&COLUMN(B:B),$C$2:$C$6,0)),””)
となっています。
まとめ 【Excel】エクセルにて隣のセルを自動入力(値を返す)方法【一致したら隣のセル:複数も】
この記事では、エクセルにて入力すると隣のセルが自動で入力される方法を解説しました。
基本はこの2つの関数を使います。
・INDEX関数
・MATCH関数
複数データが該当した場合に表示する方法として、
・COUNTIF関数
・COLUMN関数
を併用しました。
関数の組み合わせを使い、業務効率向上を目指しましょう。