🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Función DGET en Excel — Extrae un único registro y falla a gritos cuando no lo hay

|

Función DGET en Excel — Extrae un único registro y falla a gritos cuando no lo hay

ResumenDGET(database, field, criteria) devuelve el único valor de una columna donde tu rango de criterios coincide con exactamente una fila. Su jugada característica es que da error a propósito: #NUM! cuando coincide más de una fila, #VALUE! cuando no coincide ninguna. Todo el mundo se los encuentra como si fueran fallos; son la función. Donde VLOOKUP devuelve en silencio el primero de varios duplicados, DGET se niega y te dice que tu clave «única» no lo es. Y como las condiciones viven en una tabla de criterios, DGET hace búsquedas de varias columnas (Region y Product) sin columna auxiliar. Recurre a ella cuando debería haber exactamente una coincidencia y quieres que Excel lo demuestre. Funciona en todas las versiones de Excel.

=DGET(A1:E200, "Amount", H1:H2)      ' el Amount de la única fila que coincide con H1:H2
=DGET(A1:E200, "Rep", H1:I2)         ' dos condiciones (H1:I2) = una búsqueda Y, sin columna auxiliar
=IFERROR(DGET(A1:E200, "Amount", H1:H2), "no único / no encontrado")   ' a prueba de producción

VLOOKUP y XLOOKUP están hechas para ser indulgentes: les das una clave y te devuelven lo primero que coincide sin mirar más allá. Eso suele ser lo que quieres, y de vez en cuando un desastre, porque una clave duplicada devuelve una respuesta equivocada verosímil sin ningún aviso. DGET tiene el temperamento opuesto. Da por hecho que la coincidencia es única y se detiene con un error en cuanto eso deja de ser cierto. Una vez que lo ves como su propósito y no como su defecto, se convierte en la búsqueda de validación de datos más afilada de Excel.

Nota: en una interfaz de Excel en español, DGET se llama BDEXTRAER. Relacionadas: VLOOKUP = BUSCARV, XLOOKUP = BUSCARX, INDEX = INDICE, MATCH = COINCIDIR, DCOUNT = BDCONTAR, DSUM = BDSUMA, IFERROR = SI.ERROR, FILTER = FILTRAR. Las fórmulas de abajo usan los nombres en inglés; el comportamiento es idéntico.

Lo que aprenderás

  • El modelo mental: una búsqueda que afirma la unicidad en lugar de adivinar
  • Los tres argumentos, y cómo DGET reutiliza la idea del rango de criterios
  • #NUM! frente a #VALUE!: los dos errores que sí te están diciendo algo
  • Búsquedas de varias condiciones (Region y Product) sin el truco de la concatenación
  • Cuándo DGET le gana a XLOOKUP, y los casos en que es la herramienta equivocada
  • Envolverla con seguridad sin ocultar lo que significan los errores

El modelo mental: la búsqueda que se niega a adivinar

Piensa en DGET como una búsqueda con un contrato: «Hay exactamente una fila que coincide. Dame un campo de ella.» Si el contrato se cumple, obtienes el valor. Si no —cero coincidencias, o dos—, DGET no lo va a disimular. Esa única elección de comportamiento es lo que la separa de cualquier otra búsqueda.

' bloque de criterios H1:H2 — una condición:
'   H1: OrderID
'   H2: 10248
=DGET(A1:E200, "Amount", H1:H2)      ' -> el Amount del pedido 10248, SI ese ID es único

VLOOKUP devolvería tan tranquila el primer pedido 10248 aunque el ID aparezca tres veces. DGET, en cambio, devuelve #NUM!, que —cuando se supone que OrderID es una clave primaria— es justo la alarma que quieres. Convierte «busca esto» en «busca esto y confirma que mi clave es realmente única», gratis.

Los tres argumentos (la misma forma que toda la familia)

=DGET(database, field, criteria), idéntica a DSUM y DCOUNT:

  • database — la tabla incluyendo su fila de encabezados (A1:E200). Los encabezados son la vía por la que el campo y los criterios se emparejan con las columnas; omítelos y DGET se rompe.
  • field — la columna de la que devolver un valor, nombrada por el encabezado entre comillas ("Amount"), una celda que lo contiene o un número de columna. El encabezado entre comillas es la opción legible y a prueba de ediciones.
  • criteria — el rango que contiene tu bloque de encabezado y condiciones, exactamente igual que las demás funciones D. Mismas reglas: misma fila = Y, filas apiladas = O, y los encabezados deben coincidir con los datos carácter por carácter.

Todo lo que sabes sobre construir un rango de criterios se traslada tal cual. Lo único que cambia es la promesa: DGET espera que ese bloque seleccione una fila.

#NUM! y #VALUE! son toda la gracia

La mayoría de las funciones tienen un solo estado de error. DGET tiene dos, y significan cosas opuestas: aprender a leerlos es el 90% de usarla bien.

=DGET(A1:E200, "Amount", H1:H2)
'   -> el valor         : coincidió exactamente una fila (el camino feliz)
'   -> #NUM!            : coincidió MÁS DE UNA fila — tu clave no es única
'   -> #VALUE!          : NO coincidió ninguna fila — nada encaja con los criterios
  • #NUM! significa «demasiadas». Dos o más filas satisfacen tus criterios. Si el campo debía ser una clave única, acabas de encontrar un duplicado que no conocías: un hallazgo genuinamente útil. Si esperabas varias coincidencias, DGET es sencillamente la función equivocada (quieres una suma, un filtro o una búsqueda de primera coincidencia).
  • #VALUE! significa «ninguna». No coincidió nada: una clave mal escrita, un encabezado de criterios que no coincide con los datos o un valor que no está ahí.

Como los dos errores son diagnósticos, resiste la tentación de tragarte ambos con un IFERROR("") general. «Clave duplicada» y «no encontrado» son problemas distintos y a menudo merecen un trato distinto.

Búsquedas de varias condiciones, sin columna auxiliar

Aquí es donde DGET, sin hacer ruido, supera en diseño a VLOOKUP. Como las condiciones viven en una tabla de criterios, añadir una segunda condición es solo añadir una columna: obtienes una búsqueda Y sin clave auxiliar concatenada.

' Encontrar el Rep de la fila West + Widgets:
'   H1: Region    I1: Product
'   H2: West      I2: Widgets
=DGET(A1:E200, "Rep", H1:I2)         ' coincide en AMBAS columnas a la vez

El apaño clásico de VLOOKUP para una clave de dos columnas es construir una columna auxiliar de Region&Product y buscar "West"&"Widgets": frágil y desordenado. DGET no necesita nada de eso: pon dos encabezados en la fila superior, dos condiciones debajo, y la coincidencia es Y a lo ancho de la fila. Y sigues teniendo la garantía de unicidad: si West + Widgets no es único, lo sabrás.

Cuándo DGET le gana a XLOOKUP, y cuándo no

DGET es una especialista, y usarla fuera de su terreno causa la mayor parte de la frustración que reporta la gente.

Recurre a DGET cuando:

  • La coincidencia debería ser única y quieres que se imponga: cuadrar por un número de factura, extraer un único valor de configuración, validar una clave.
  • Necesitas una búsqueda Y de varias columnas y prefieres no construir una clave auxiliar.
  • Los criterios deben ser visibles y editables en la hoja.

Usa XLOOKUP o INDEX/MATCH en su lugar cuando:

  • Se esperan duplicados y quieres la primera coincidencia (o la última), no un error. Aquí DGET no hará más que lanzar #NUM!.
  • Estás copiando la búsqueda hacia abajo por cientos de filas: XLOOKUP es más ligera que un bloque de criterios por fila.
  • Necesitas coincidencia aproximada o por cercanía. DGET es solo de coincidencia exacta.

La prueba de una línea: ¿que haya más de una coincidencia es un error o una expectativa? Si es un error, DGET es la única búsqueda que lo trata como tal.

Envolverla para producción (sin quedarte a ciegas)

Las fórmulas en producción no deberían mostrar #NUM!/#VALUE! en crudo a los usuarios finales, pero una captura general tira a la basura el diagnóstico. Distingue ambos cuando importe:

' Sencillo, cuando ambos problemas significan lo mismo para el usuario:
=IFERROR(DGET(A1:E200, "Amount", H1:H2), "Sin coincidencia única")

' Mejor, cuando duplicado y ausente necesitan un trato distinto:
=IF(DCOUNT(A1:E200, "Amount", H1:H2) = 1,
    DGET(A1:E200, "Amount", H1:H2),
    IF(DCOUNT(A1:E200, "Amount", H1:H2) = 0, "No encontrado", "¡Clave duplicada!"))

El segundo patrón usa DCOUNT sobre los mismos criterios para informar de qué fallo ocurrió, convirtiendo el rigor de DGET en un mensaje claro en lugar de un código de error. Ese es DGET en su mejor versión: no una búsqueda quisquillosa, sino una búsqueda que hace imposible ignorar los datos malos.

Cómo ayuda ExcelMaster

DGET premia los bloques de criterios precisos y castiga los descuidados, que es justo la parte engorrosa. Dile a ExcelMaster «dame el importe del único pedido de West + Widgets» y construirá la tabla de criterios de dos columnas, emparejará los encabezados con tus datos y redactará el =DGET(...). Pásale un DGET que lanza #NUM! y te explicará qué filas chocan, sacando a la luz la clave duplicada que no sabías que tenías en lugar de limitarse a esconder el error.

Preguntas frecuentes

¿Por qué DGET devuelve #NUM!?

Porque más de una fila coincide con tus criterios. DGET devuelve exactamente un valor y trata las coincidencias múltiples como un error, a menudo uno útil, porque significa que una clave que dabas por única no lo es. Si de verdad esperas varias coincidencias, usa SUMIFS, FILTER o una búsqueda de primera coincidencia como XLOOKUP.

¿Por qué DGET devuelve #VALUE!?

Porque no coincide ninguna fila. Las causas habituales son un criterio mal escrito, un encabezado de criterios que no coincide exactamente con un encabezado del rango de datos, o un valor que sencillamente no está en la tabla. Revisa primero cómo está escrito el encabezado: es el culpable más común de todas las funciones de base de datos.

¿En qué se diferencia DGET de VLOOKUP?

VLOOKUP devuelve la primera coincidencia e ignora en silencio cualquier duplicado. DGET insiste en una única coincidencia y da error (#NUM!) si hay más de una. DGET también coincide en varias columnas a través de su rango de criterios, mientras que VLOOKUP necesita una clave auxiliar concatenada. Usa VLOOKUP/XLOOKUP para búsquedas indulgentes de primera coincidencia; usa DGET cuando haya que garantizar la unicidad.

¿Puede DGET coincidir en más de una columna?

Sí, es una de sus grandes bazas. Pon cada encabezado en la fila superior del rango de criterios y cada condición justo debajo, en la misma fila para lógica Y: Region=West y Product=Widgets en una fila coincide solo con las filas que cumplen ambas, sin columna auxiliar.

¿Funciona DGET en Excel 2016 y anteriores?

Sí. DGET, como el resto de las funciones de base de datos, lleva décadas en Excel y se comporta igual en Excel 2016, 2019, 2021 y 365. No hay ninguna trampa de disponibilidad por versión de la que preocuparse.

Probado en

Probado en: Excel 365 (Windows 11) — última verificación 2026-07-20.

Guías relacionadas: Excel DSUM y DCOUNT · Excel Funciones de base de datos · Excel VLOOKUP · Excel INDEX y MATCH · Excel XLOOKUP