ExcelのDGET関数の使い方|条件に一致するデータを1件だけ抽出する

スポンサーリンク

「データベースから条件に合うデータを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件だけなので、正しく値が返ります。

比較演算子を使った条件指定

検索条件では比較演算子を使えます。よく使うパターンをまとめました。

条件値の書き方意味
>500000500000より大きい
>=500000500000以上
<300000300000未満
<>営業部営業部以外

比較演算子を使うときは、条件値をそのままセルに入力してください。ダブルクォーテーションで囲む必要はありません。

セル参照で条件を動的に切り替える

条件値にセル参照を使えば、セルの入力を変えるだけで抽出結果を切り替えられます。

たとえば、セル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件の値を返します。02 以上のときは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関数は得意な場面が異なるため、特徴を比較しておきましょう。

比較項目DGETXLOOKUP
利用可能バージョンExcel 2007以降(全バージョン)Microsoft 365・Excel 2021以降
複数条件の指定条件範囲で直感的に指定IFやBOOLEAN演算子が必要
一致が0件/複数件エラー(#VALUE!)エラー回避の引数あり
検索方向列見出しで指定(柔軟)検索列と戻り列を個別指定
逆方向検索不要(列見出しで直接指定)対応

DGET関数が向いているのは、複数条件を直感的に組み合わせて1件だけ抽出したい場面や、古いバージョンのExcelを使っている場合です。条件範囲を作るだけで複雑な絞り込みを表現できます。

XLOOKUP関数が向いているのは、Microsoft 365などの新しい環境で、一致が0件のときにエラーを返さず代替値を表示したい場合や、単純な検索値1つでの抽出を高速に行いたい場合です。

関連するデータベース関数

データベース関数は他にも種類があります。目的に合わせて使い分けてみてください。

  • DAVERAGE関数 - 条件に一致するデータの平均値を求める
  • DCOUNT関数 - 条件に一致する数値データの個数を数える
  • DMIN関数 - 条件に一致するデータの最小値を求める

エラーの種類と対処法をもっと詳しく知りたい方は「Excelエラー値12種類の原因と対処法一覧」も参考にしてみてください。

タイトルとURLをコピーしました