「データベースから条件に合うデータを1件だけ取り出したい」と思ったことはありませんか。VLOOKUPだと検索列が左端にないと使えなかったり、条件を複数指定しにくかったりしますよね。そんなときに便利なのがDGET関数です。
DGET関数を使えば、データベース形式のリストから条件に一致するレコードをピンポイントで1件だけ取り出せます。この記事では、DGET関数の基本から複数条件の指定方法、エラーの対処法まで実例付きで解説します。
DGET関数とは?
DGET関数は、Excelのデータベース関数の1つで、指定した条件に一致するレコードから1つの値を抽出する関数です。
- 読み方: ディー ゲット
- 語源: Database GET(データベースから取得する)
- 対応バージョン: Excel 2007 / 2010 / 2013 / 2016 / 2019 / 2021 / Microsoft 365
DGET関数の特徴は、条件に一致するレコードがちょうど1件のときだけ値を返すことです。0件や2件以上だとエラーになるため、「該当データが1つに絞れているか」の確認にも使えます。
DGET関数の書き方
基本構文
=DGET(データベース, フィールド, 検索条件)
DGET関数の引数は3つで、すべて必須です。
引数の説明
| 引数 | 必須 | 説明 |
|---|---|---|
| データベース | 必須 | 検索対象のデータ範囲。先頭行に列見出し(ヘッダー)が必要です |
| フィールド | 必須 | 値を取り出す列の指定。列見出しの文字列(例: "売上")または列番号(例: 3)で指定します |
| 検索条件 | 必須 | 抽出条件を記述したセル範囲。列見出しと条件値のセットで指定します |
フィールドの指定方法は2通りあります。
| 指定方法 | 例 | 説明 |
|---|---|---|
| 列見出しの文字列 | "売上" | ダブルクォーテーションで囲んだ見出し名 |
| 列の位置番号 | 3 | データベース範囲の左端を1として数えた番号 |
列見出しの文字列で指定するほうが、列の挿入・削除に強いのでおすすめです。
検索条件の作り方
検索条件はセル範囲で指定します。条件の書き方にはルールがあるので確認しておきましょう。
- 1行目: データベースと同じ列見出しを入力する
- 2行目以降: 抽出したい条件値を入力する
- 条件範囲はデータベースの範囲と重ならない場所に作成する
条件をデータベースの下に置くと、データを追加したときに範囲が重なってしまいます。データベースの横や上に条件範囲を作るのが安全です。
基本的な使い方
社員名簿から特定の社員の情報を取り出す例で、DGET関数の使い方を見ていきましょう。
データ(A1:D6):
| 社員番号 | 氏名 | 部署 | 売上 |
|---|---|---|---|
| 1001 | 田中太郎 | 営業部 | 500000 |
| 1002 | 鈴木花子 | 経理部 | 300000 |
| 1003 | 佐藤一郎 | 営業部 | 450000 |
| 1004 | 山田美咲 | 総務部 | 280000 |
| 1005 | 高橋健一 | 営業部 | 520000 |
検索条件(F1:F2):
| 社員番号 |
|---|
| 1003 |
数式:
=DGET(A1:D6, "氏名", F1:F2)
結果: 佐藤一郎
社員番号が1003のレコードから、「氏名」列の値を取り出しています。フィールドに "売上" を指定すれば、同じ条件で売上金額を取得できます。
=DGET(A1:D6, "売上", F1:F2)
結果: 450000
このように、検索条件はそのままで、フィールドを変えるだけで取り出す列を切り替えられるのがポイントです。
実践的な使い方・応用例
複数条件でデータを絞り込む
DGET関数は複数の条件を同時に指定できます。条件範囲に複数の列見出しを横に並べるとAND条件(すべてに一致)になります。
検索条件(F1:G2):
| 部署 | 売上 |
|---|---|
| 営業部 | >480000 |
=DGET(A1:D6, "氏名", F1:G2)
結果: 高橋健一
「営業部」かつ「売上が480000より大きい」の両方を満たすレコードが高橋健一さん1件だけなので、正しく値が返ります。
比較演算子を使った条件指定
検索条件では比較演算子を使えます。よく使うパターンをまとめました。
| 条件値の書き方 | 意味 |
|---|---|
>500000 | 500000より大きい |
>=500000 | 500000以上 |
<300000 | 300000未満 |
<>営業部 | 営業部以外 |
比較演算子を使うときは、条件値をそのままセルに入力してください。ダブルクォーテーションで囲む必要はありません。
セル参照で条件を動的に切り替える
条件値にセル参照を使えば、セルの入力を変えるだけで抽出結果を切り替えられます。
たとえば、セルH2にプルダウンで部署名を入力できるようにしておき、検索条件を次のように設定します。
検索条件(F1:G2):
| 部署 | 売上 |
|---|---|
| (H2のセル参照) | >480000 |
H2に「営業部」と入力すれば営業部の結果が、「経理部」と入力すれば経理部の結果が返ります。プルダウンとDGET関数を組み合わせると、簡易的な検索フォームを作れます。
よくあるエラーと対処法
DGET関数で発生しやすいエラーは3種類です。
#VALUE! エラー
原因: 条件に一致するレコードが2件以上ある場合に発生します。
対処法:
- 検索条件を追加して、結果が1件になるように絞り込む
- 社員番号やIDなど、一意の値(ユニークキー)を条件に使う
- 複数件の抽出が必要な場合は、DGET関数ではなくFILTER関数やテーブルのフィルター機能を検討する
#VALUE! エラー(フィールド指定の問題)
原因: フィールド引数に指定した列見出しがデータベースに存在しない場合にも #VALUE! エラーになります。
対処法:
- 列見出しの文字列が完全に一致しているか確認する(スペースや全角半角の違いに注意)
- 列番号で指定する場合は、データベース範囲内の列数を超えていないか確認する
#NAME? エラー
原因: 関数名のスペルミスや、文字列の引用符忘れが考えられます。
対処法:
- 関数名が
DGETになっているか確認する - フィールドを文字列で指定する場合は、ダブルクォーテーション(
")で囲んでいるか確認する
まとめ
DGET関数は、データベースから条件に一致するデータを1件だけ取り出すための関数です。
覚えておきたいポイントをまとめます。
- 構文は
=DGET(データベース, フィールド, 検索条件)の3つの引数 - 検索条件は列見出し+条件値のセル範囲で指定する
- 複数条件はAND条件(横並び)で絞り込める
- 結果が0件または2件以上のときはエラーになる
- 複数件を取り出したい場合はFILTER関数を検討する
似た関数との使い分け
DGET関数と似た機能を持つ関数を比較してみましょう。
| 関数 | 用途 | 複数条件 | 戻り値 |
|---|---|---|---|
| DGET | 条件に一致する値を1件抽出 | 対応 | 単一の値(1件のみ) |
| VLOOKUP | 検索値に一致する行から値を取得 | 非対応 | 単一の値 |
| INDEX+MATCH | 柔軟な位置指定で値を取得 | 組み合わせで対応 | 単一の値 |
| FILTER | 条件に一致するデータを一括抽出 | 対応 | 配列(複数件) |
条件に一致するデータが1件に絞れる場面では、VLOOKUPよりもDGET関数のほうがシンプルに書けることがあります。複数件を抽出したい場合はFILTER関数を検討してみてください。
関連するデータベース関数
データベース関数は他にも種類があります。目的に合わせて使い分けてみてください。
- DAVERAGE関数 - 条件に一致するデータの平均値を求める
- DCOUNT関数 - 条件に一致する数値データの個数を数える
- DMIN関数 - 条件に一致するデータの最小値を求める
エラーの種類と対処法をもっと詳しく知りたい方は「Excelエラー値12種類の原因と対処法一覧」も参考にしてみてください。
