エクセルで別シートのデータを自動的に参照・転記したいとき、最初に思い浮かぶのが関数を使う方法ではないでしょうか。
VBAマクロを使わなくても、VLOOKUP関数・INDEX関数・MATCH関数・シート間参照式を組み合わせることで、別シートへの自動転記が実現できます。
これらの関数は、入力したキー値(社員IDや商品コードなど)に対応するデータをマスタシートから引っ張ってきたり、別シートの特定のセルをリアルタイムで参照したりといった用途に広く使われています。
本記事では、エクセルで別シートに転記するための関数の使い方を、基本的なシート参照式からVLOOKUP・INDEX+MATCH関数の応用例まで、実務で使えるパターンを豊富に紹介していきます。
関数を使った転記は設定が簡単でリアルタイムに反映されるため、マクロが使えない環境でも強力な自動化が実現できるでしょう。
エクセルで別シートへ転記する関数の選び方は「転記のパターン」で決まる
それではまず、別シートへの転記に使う関数の種類と、どのような場面でどの関数を選ぶべきかについて解説していきます。
別シートへの転記に使う関数は、転記のパターン(固定参照・条件一致参照・動的参照)によって選ぶべきものが変わってきます。
転記パターン別・使うべき関数の選び方
パターン1「固定セルの参照転記」:特定のセルの値をそのまま別シートに表示したい
→ シート間参照式(=シート名!セルアドレス)を使う
パターン2「キー値一致での転記」:社員IDや商品コードなど特定のキーに対応するデータを転記したい
→ VLOOKUP関数またはINDEX+MATCH関数を使う
パターン3「動的なシート参照」:参照先のシート名がセルの値によって変わる場合
→ INDIRECT関数を使う
パターン4「複数条件での転記」:複数の条件が一致するデータを転記したい
→ INDEX+MATCH関数の配列形式またはXLOOKUP関数を使う
シート間参照式(=シート名!セルアドレス)の基本と注意点
別シートのデータを参照する最もシンプルな方法が、「=シート名!セルアドレス」という形式の参照式です。
この方法では、参照元のシート名とセルアドレスを指定するだけで、そのセルの値をリアルタイムで表示できます。
シート間参照式の基本パターン
「マスタ」シートのA1セルを参照する場合
=マスタ!A1
シート名にスペースや記号が含まれる場合はシングルクォートで囲む
=’2024年度データ’!B3
参照元シートのA1:C10の範囲を別シートで使う場合(配列参照)
=’データシート’!A1:C10
シート間参照式の注意点として、参照元のシート名を変更すると参照式も自動的に更新されますが、シートを削除するとREF!エラーが発生します。
また、参照元のファイルを別のブックにコピーした際に参照先が変わってしまうことがあるため、重要なファイルでは参照関係を確認してから運用しましょう。
VLOOKUP関数で別シートから条件一致データを転記する基本
VLOOKUP関数は、指定したキー値に一致する行を検索し、その行の指定した列の値を返す関数です。
マスタシートから対応するデータを転記する処理に非常によく使われます。
VLOOKUP関数の基本書式と別シート参照の例
=VLOOKUP(検索値, 範囲, 列番号, 検索の型)
引数の説明
検索値:検索するキー値(社員IDや商品コードなど)
範囲:検索対象のテーブル(別シートを指定する場合はシート名を含む)
列番号:検索範囲の左から何列目の値を返すか
検索の型:完全一致の場合はFALSEまたは0を指定
例:A2のIDに対応する氏名を「社員マスタ」シートのA列からD列で検索して転記
=VLOOKUP(A2, 社員マスタ!A:D, 2, FALSE)
VLOOKUP関数で別シートを参照する場合、範囲の引数に「シート名!セル範囲」を指定します。
列番号は範囲の左端列を1として数えるため、取得したい列がどの列に当たるかを正確に把握しておくことが大切です。
VLOOKUP関数の弱点と使用時の注意点
VLOOKUP関数には、便利である一方でいくつかの弱点もあります。
最も大きな弱点は、検索範囲の左端列にしか検索値を指定できない点です。
たとえば、C列の値でA列を検索して返すといった「左方向への参照」はVLOOKUPでは直接できません。
また、検索範囲に列を挿入・削除すると列番号がずれてしまうリスクもあります。
これらの問題を解決するために、INDEX+MATCH関数の組み合わせが推奨される場面があります。
INDEX MATCH関数で別シートから柔軟にデータを転記する方法
続いては、VLOOKUPの弱点を克服する強力な組み合わせ、INDEX関数とMATCH関数を使った別シートへの転記方法を確認していきます。
INDEX+MATCHはVLOOKUPより少し複雑ですが、転記できるパターンの幅が格段に広がります。
INDEX関数とMATCH関数それぞれの役割を理解する
INDEX+MATCH関数を使いこなすために、まずそれぞれの関数の役割を理解しておきましょう。
INDEX関数とMATCH関数の基本書式
INDEX関数:指定した範囲の「行番号・列番号」に対応するセルの値を返す
=INDEX(範囲, 行番号, 列番号)
例:=INDEX(A1:C10, 3, 2) → A1:C10の3行目・2列目(B3)の値を返す
MATCH関数:指定した値が配列の何番目にあるかを数値で返す
=MATCH(検索値, 検索範囲, 照合の型)
例:=MATCH(“山田”, A1:A10, 0) → A1:A10の中で「山田」が何行目にあるかを返す
INDEX+MATCHの組み合わせ
=INDEX(返す値の列, MATCH(検索値, 検索列, 0))
MATCHで「何行目にあるか」を調べ、その行番号をINDEXに渡して「その行の指定した列の値」を取得するのがINDEX+MATCHの基本的な仕組みです。
別シートのデータをINDEX MATCH関数で転記する実践的な書き方
「商品マスタ」シートのB列(商品名)から商品コードに一致する商品名を取得する場合の記述例を見ていきましょう。
別シートをINDEX+MATCHで参照する実践的な書き方
「商品マスタ」シートのA列に商品コード、B列に商品名、C列に単価があるとする
入力シートのA2に商品コードが入力されているとき、商品名を転記する
=INDEX(商品マスタ!B:B, MATCH(A2, 商品マスタ!A:A, 0))
単価を転記する場合
=INDEX(商品マスタ!C:C, MATCH(A2, 商品マスタ!A:A, 0))
VLOOKUPとの違い:左側の列を返すことも可能
D列に商品コードがあり、A列の商品IDを返す場合(VLOOKUPではできない左方向参照)
=INDEX(商品マスタ!A:A, MATCH(A2, 商品マスタ!D:D, 0))
INDEX+MATCHの大きな利点は、返す列と検索する列が独立しているため、左方向への参照が自由にできる点です。
また、列の挿入・削除があっても参照列を列番号ではなく列全体(B:Bのような形)で指定しているため、列がずれる問題も起きにくくなっています。
XLOOKUP関数でさらにシンプルに別シート転記を実現する
Microsoft 365やExcel 2021以降では、VLOOKUPとINDEX+MATCHの両方の長所を持つXLOOKUP関数が使えます。
XLOOKUP関数の基本書式と別シート参照の例
=XLOOKUP(検索値, 検索範囲, 返す範囲, 見つからない場合, 一致モード, 検索モード)
基本的な使い方(第4引数以降は省略可能)
=XLOOKUP(A2, 商品マスタ!A:A, 商品マスタ!B:B, “該当なし”)
→ A2の商品コードを「商品マスタ」のA列で検索し、B列の値を返す
→ 見つからない場合は「該当なし」を返す(VLOOKUPではIFERROR関数が必要だった)
XLOOKUP関数は見つからない場合の表示値を直接指定できるため、VLOOKUPで必要だったIFERRORのネストが不要になります。
使えるバージョンであれば積極的にXLOOKUPを採用することで、より読みやすく保守しやすい数式になるでしょう。
INDIRECT関数と他の関数を組み合わせた高度な別シート転記
続いては、INDIRECT関数を活用した動的なシート参照や、複数条件での転記といった高度なパターンを確認していきます。
これらのテクニックを習得することで、複雑な転記要件にも関数だけで対応できるようになるでしょう。
INDIRECT関数で参照先シートを動的に切り替える方法
INDIRECT関数は、文字列として指定したセルアドレスや参照式を実際のセル参照として評価する関数です。
この特性を使うと、参照先のシート名をセルの値として指定し、動的に参照先を切り替えることができます。
INDIRECT関数で動的シート参照を実現する例
A1セルに「1月」と入力されているとき、「1月」シートのB5セルを参照する
=INDIRECT(A1&”!B5″)
A1の値を「2月」に変えると自動的に「2月」シートのB5を参照するようになる
VLOOKUP関数とINDIRECTを組み合わせて月別シートを動的に参照する例
A1に月名(「1月」など)、B2に検索値が入っているとき
=VLOOKUP(B2, INDIRECT(A1&”!A:D”), 2, FALSE)
INDIRECT関数を使えば、ドロップダウンリストで月や部門を選択するだけで参照先シートが自動的に切り替わるダッシュボードが作れます。
レポートや集計資料の作成に特に有効なテクニックでしょう。
複数条件に一致するデータを別シートから転記する方法
転記の条件が複数ある場合(例:部署と役職の両方が一致する社員の情報を転記したい)には、INDEX+MATCHを配列形式で使う方法が有効です。
複数条件でINDEX+MATCHを使う方法(Excel 2019以前では配列数式として入力)
「社員マスタ」シートのB列に部署、C列に役職、D列に氏名があるとする
入力シートのA2に部署名、B2に役職名を入力して一致する氏名を転記する
=INDEX(社員マスタ!D:D, MATCH(A2&B2, 社員マスタ!B:B&社員マスタ!C:C, 0))
※Excel 2019以前ではCtrl+Shift+Enterで配列数式として入力する
Excel 365・2021以降ではそのままEnterで入力できる
「A2&B2」は部署名と役職名を結合した文字列、「社員マスタ!B:B&社員マスタ!C:C」は部署と役職を結合した配列で、両者が一致する行のINDEXを返す仕組みです。
転記関数でのエラー処理とNOT見つかった場合の対応
転記用の関数が参照先にデータを見つけられなかった場合、N/Aエラーが表示されます。
これをIFERROR関数でラップすることで、エラーの代わりに任意のテキストや0を表示できます。
転記関数にIFERRORを組み合わせたエラー処理の例
=IFERROR(VLOOKUP(A2, 商品マスタ!A:C, 2, FALSE), “未登録”)
→ 検索値が見つからない場合は「未登録」と表示する
=IFERROR(INDEX(社員マスタ!D:D, MATCH(A2, 社員マスタ!A:A, 0)), “”)
→ 検索値が見つからない場合は空白を表示する
XLOOKUP関数では第4引数で直接指定できる
=XLOOKUP(A2, 商品マスタ!A:A, 商品マスタ!B:B, “未登録”)
転記用の関数にはエラー処理をセットで実装することで、データが存在しない場合でも見栄えよく・安全に運用できます。
まとめ
本記事では、エクセルで別シートに転記する関数の使い方として、シート間参照式・VLOOKUP関数・INDEX+MATCH関数・XLOOKUP関数・INDIRECT関数を中心に、実務で役立つパターンを豊富に解説してきました。
転記のパターンによって使うべき関数は異なり、固定参照にはシート間参照式、キー一致検索にはVLOOKUPまたはINDEX+MATCH、動的なシート切り替えにはINDIRECT関数が適しています。
Excel 365・2021以降を使っているなら、XLOOKUPを積極的に採用することで数式がよりシンプルになり、保守管理の負担が軽減されるでしょう。
いずれの関数も、IFERRORと組み合わせたエラー処理を実装することで、安定した転記仕組みが完成します。
関数を使った別シート転記はリアルタイムで元データの変更が反映される点が大きな強みです。
今回紹介した関数のパターンをベースに、自身の業務に合った転記システムをエクセル上に構築していきましょう。