「データベースから条件に合うデータを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関数を組み合わせると、簡易的な検索フォームを作れます。
OR条件とワイルドカードを使う
DGET関数の検索条件は、書き方を工夫するとOR条件や部分一致での抽出にも対応できます。それぞれの書き方を見ていきましょう。
OR条件の書き方
AND条件は列見出しを横に並べて作りましたが、OR条件(いずれかに一致)にしたい場合は、同じ列見出しを縦に複数行書きます。
検索条件(F1:F3):
| 部署 |
|---|
| 営業部 |
| 経理部 |
このように書くと、「営業部」または「経理部」のいずれかに一致するレコードを対象にできます。
ただし注意点があります。OR条件でDGET関数を使うと、複数のレコードがマッチしやすくなります。前述のとおりDGET関数は一致が2件以上あると #VALUE! エラーになるため、OR条件は結果的にエラーを招きやすい使い方です。
複数件にマッチする可能性があるOR条件での抽出は、DGET関数よりもFILTER関数のほうが適しています。FILTER関数なら、OR条件に一致するレコードをすべて一覧で取り出せます。
ワイルドカードで部分一致検索
検索条件にはワイルドカードを使えます。完全一致ではなく「○○で始まる」「○○を含む」といった曖昧な条件で抽出したいときに便利です。
| 記号 | 意味 |
|---|---|
*(アスタリスク) | 0文字以上の任意の文字列に一致 |
?(クエスチョン) | 任意の1文字に一致 |
たとえば氏名で部分一致検索をするには、次のように書きます。
検索条件(F1:F2):
| 氏名 |
|---|
| 田中* |
田中* は「田中で始まる名前」に一致します。末尾を指定したい場合は次のとおりです。
| 氏名 |
|---|
| *一郎 |
*一郎 は「一郎で終わる名前」に一致します。ワイルドカードは文字列条件にそのまま入力するだけで使えるので、特別な設定は必要ありません。
ワイルドカードを使うときも、複数のレコードに一致するとDGET関数はエラーになります。あくまで「1件に絞り込める部分一致」での利用がポイントです。
よくあるエラーと対処法
DGET関数で発生しやすいエラーは3種類です。
#VALUE! エラー
原因: 条件に一致するレコードが2件以上ある場合に発生します。
対処法:
- 検索条件を追加して、結果が1件になるように絞り込む
- 社員番号やIDなど、一意の値(ユニークキー)を条件に使う
- 複数件の抽出が必要な場合は、DGET関数ではなくFILTER関数やテーブルのフィルター機能を検討する
#VALUE! エラー(フィールド指定の問題)
原因: フィールド引数に指定した列見出しがデータベースに存在しない場合にも #VALUE! エラーになります。
対処法:
- 列見出しの文字列が完全に一致しているか確認する(スペースや全角半角の違いに注意)
- 列番号で指定する場合は、データベース範囲内の列数を超えていないか確認する
#NAME? エラー
原因: 関数名のスペルミスや、文字列の引用符忘れが考えられます。
対処法:
- 関数名が
DGETになっているか確認する - フィールドを文字列で指定する場合は、ダブルクォーテーション(
")で囲んでいるか確認する
よくある質問(FAQ)
DGET関数についてよく寄せられる質問をまとめました。
Q: 条件に一致するデータが複数件あるか事前に確認する方法は?
DGET関数を実行する前に、DCOUNT関数で該当件数を確認しておくとエラーを防げます。
数値列で件数を数える場合は次のように書きます。
=DCOUNT(データベース, "数値列", 条件範囲)
文字列列で件数を数える場合はDCOUNTA関数を使います。
=DCOUNTA(データベース, "文字列列", 条件範囲)
この結果が 1 であれば、DGET関数は正しく1件の値を返します。0 や 2 以上のときはDGET関数がエラーになるため、条件の見直しが必要だと判断できます。
Q: DGET関数でワイルドカードは使えますか?
使えます。(0文字以上の任意の文字列)と ?(任意の1文字)が利用可能です。文字列の条件にそのまま書けばよく、たとえば「田中」と入力すれば「田中で始まる名前」に一致します。ただし複数件に一致するとエラーになる点には注意してください。
Q: DGET関数は大文字・小文字を区別しますか?
区別しません。「YAMADA」「yamada」「Yamada」はすべて同じものとして扱われます。大文字・小文字を区別した検索が必要な場合は、EXACT関数と組み合わせた別の方法を検討してください。
まとめ
DGET関数は、データベースから条件に一致するデータを1件だけ取り出すための関数です。
覚えておきたいポイントをまとめます。
- 構文は
=DGET(データベース, フィールド, 検索条件)の3つの引数 - 検索条件は列見出し+条件値のセル範囲で指定する
- 複数条件はAND条件(横並び)で絞り込める
- 結果が0件または2件以上のときはエラーになる
- 複数件を取り出したい場合はFILTER関数を検討する
似た関数との使い分け
DGET関数と似た機能を持つ関数を比較してみましょう。
| 関数 | 用途 | 複数条件 | 戻り値 |
|---|---|---|---|
| DGET | 条件に一致する値を1件抽出 | 対応 | 単一の値(1件のみ) |
| VLOOKUP | 検索値に一致する行から値を取得 | 非対応 | 単一の値 |
| INDEX+MATCH | 柔軟な位置指定で値を取得 | 組み合わせで対応 | 単一の値 |
| FILTER | 条件に一致するデータを一括抽出 | 対応 | 配列(複数件) |
条件に一致するデータが1件に絞れる場面では、VLOOKUPよりもDGET関数のほうがシンプルに書けることがあります。複数件を抽出したい場合はFILTER関数を検討してみてください。
DGET関数とXLOOKUP関数の使い分け
近年のExcelでは、VLOOKUPの後継としてXLOOKUP関数も広く使われています。DGET関数とXLOOKUP関数は得意な場面が異なるため、特徴を比較しておきましょう。
| 比較項目 | DGET | XLOOKUP |
|---|---|---|
| 利用可能バージョン | Excel 2007以降(全バージョン) | Microsoft 365・Excel 2021以降 |
| 複数条件の指定 | 条件範囲で直感的に指定 | IFやBOOLEAN演算子が必要 |
| 一致が0件/複数件 | エラー(#VALUE!) | エラー回避の引数あり |
| 検索方向 | 列見出しで指定(柔軟) | 検索列と戻り列を個別指定 |
| 逆方向検索 | 不要(列見出しで直接指定) | 対応 |
DGET関数が向いているのは、複数条件を直感的に組み合わせて1件だけ抽出したい場面や、古いバージョンのExcelを使っている場合です。条件範囲を作るだけで複雑な絞り込みを表現できます。
XLOOKUP関数が向いているのは、Microsoft 365などの新しい環境で、一致が0件のときにエラーを返さず代替値を表示したい場合や、単純な検索値1つでの抽出を高速に行いたい場合です。
関連するデータベース関数
データベース関数は他にも種類があります。目的に合わせて使い分けてみてください。
- DAVERAGE関数 - 条件に一致するデータの平均値を求める
- DCOUNT関数 - 条件に一致する数値データの個数を数える
- DMIN関数 - 条件に一致するデータの最小値を求める
エラーの種類と対処法をもっと詳しく知りたい方は「Excelエラー値12種類の原因と対処法一覧」も参考にしてみてください。