¿Cómo simular una combinación externa completa en Excel?

34

Supongamos que tengo algunos datos en Excel (y no en una base de datos real). En una hoja, tengo datos, donde una columna funciona como ID, y me he asegurado de que los valores en esta columna sean únicos. En otra hoja, también tengo algunos datos, nuevamente con una columna que se puede tomar como ID, y también es única. Si la fila N en la hoja 1 tiene algún valor, y la fila M en la hoja 2 tiene el mismo valor, estoy seguro de que la fila N y la fila M describen el mismo objeto del mundo real.

Lo que pregunto: ¿cómo puedo obtener el equivalente de una combinación externa completa sin escribir macros? Las fórmulas y todas las funciones accesibles a través de la cinta están bien.

Un pequeño ejemplo de "datos de reproducción":

Hoja 1:

Dostoyevski    Russia
Pushkin        Russia
Shelley        England
Flaubert       France
Hugo           France
Eichendorff    Germany
Byron          England
Zola           France

Hoja 2:

Shelley        Percy Bysshe
Eichendorff    Josef Freiherr Von
Flaubert       Gustave
Byron          Lord
Keller         Gottfried
Dostoyevski    Fyodor
Zola           Emile
Balzac         Honoré de

Salida deseada (la clasificación no es importante):

Dostoyevski    Russia   Fyodor
Pushkin        Russia
Shelley        England  Percy Bysshe
Flaubert       France   Gustave
Hugo           France
Eichendorff    Germany  Josef Freiherr von
Byron          England  Lord
Zola           France   Emile
Keller                  Gottfried
Balzac                  Honoré de

Para todos los que están horrorizados por este escenario: Sé que esta es la manera incorrecta de hacerlo. Si tengo alguna opción, no usaría Excel para esto. Sin embargo, existen suficientes situaciones en las que se necesita una solución pragmática, estadísticas y una solución mejor (desde el punto de vista de TI) no se puede aplicar.

rumtscho
fuente
Si ordena ambas listas y las coloca una al lado de la otra, debería ser bastante fácil hacer coincidir manualmente la columna deseada. Si tiene muchos datos, puede escribir una función que tome dos rangos y lo haga por usted.
Dan
@Dan como dije, estoy pidiendo hacer esto sin escribir una función . En situaciones donde puedo escribirlo, la solución es trivial (al menos para mí, porque he escrito VBA antes)
rumtscho
Excel admite consultas SQL a través de conexiones de datos. Soy terrible en eso, así que desafortunadamente no puedo ofrecer muchos más consejos, pero puede valer la pena investigar por ti.
Kyle
@Kyle Agregué esa opción a mi respuesta. No es para los débiles de corazón y para esto puede ser un desastre jugar y / o exagerar, pero bueno, ¿por qué no?
enderland

Respuestas:

44

Enfoque fácil: operaciones estándar de Excel

Primero, copie / pegue ambas columnas clave de ambas tablas en una sola hoja nueva como una sola columna.

Utilice el "Eliminar duplicados" para obtener la lista única de todas sus claves únicas.

Luego, agregue dos columnas (en este caso), una para cada una de sus columnas de datos en cada tabla. Le recomiendo que también use el formato como opción de tabla, ya que hace que sus fórmulas se vean mucho mejor. Usando vlookup, use la siguiente fórmula:

=IFERROR(VLOOKUP([@ID],Sheet4!A:B,2,FALSE),"")

Donde Sheet4!A:Brepresenta la tabla de datos de la tabla de origen para cada valor respectivo. El IFERROR previene los resultados feos # N / A que aparecen cuando vlookup no tiene éxito y en este caso devuelve una celda en blanco.

Esto te da tu tabla resultante.


Hoja3:

ingrese la descripción de la imagen aquí

Hoja4:

ingrese la descripción de la imagen aquí

Datos de resultado:

ingrese la descripción de la imagen aquí

Fórmulas de resultado ( Ctrl+ ~alternará esto):

ingrese la descripción de la imagen aquí


Construido en consulta SQL

También puede hacer esto con la consulta SQL incorporada. Es ... mucho menos fácil de usar, pero quizás sea un mejor caso de uso. Esto probablemente requerirá que haya formateado sus datos de "fuente" como tablas.

  1. Haga clic en una celda en una nueva hoja
  2. Vaya a Datos -> Desde otras fuentes -> Desde Microsoft Query
  3. Seleccione Excel Files * en la pestaña Bases de datos y presione ok
  4. Selecciona tu libro de trabajo
  5. Seleccione los siguientes cuatro campos:
    • ingrese la descripción de la imagen aquí
  6. Haga clic en "siguiente" y "ok" en la bonita advertencia formateada de los años 90 que ve
  7. Siguiendo estas instrucciones, cree la primera unión externa izquierda. En mi caso, estoy usando la tabla de "países" como la fuente izquierda y los "nombres" como la derecha.
    • ingrese la descripción de la imagen aquí
    • Esto solo da algunas de las filas (ya que te unes en la ID)
  8. La parte "crear una combinación de resta y luego agregarla como unión" es más complicada.

    • Aquí están las configuraciones de unión de resta: ingrese la descripción de la imagen aquí
    • Copie el SQL de esta unión desde el botón SQL:
    • SELECCIONAR countries$ .ID, countries$.Val1, names$.ID, names$. Val2 DE {oj C:\Users\Username\Desktop\Book2.xlsx. countries$ countries$IZQUIERDA EXTERIOR UNIRSE C:\Users\Username\Desktop\Book2.xlsx. names$ names$ON countries$.ID = names$.ID} DONDE ( names$.ID es nulo)

  9. Regrese a la primera combinación externa que creó. Edite manualmente el SQL y

    • añadir Unional fondo
    • Agregue el texto de combinación de sustracción anterior al final de la combinación
  10. Presiona el botón "Devolver datos" inmediatamente a la izquierda del botón SQL
    • Es posible que desee editar el SQL para seleccionar solo los datos específicos que desea en este momento. Me resulta más fácil ocultar columnas en el resultado.
  11. Coloque la consulta en algún lugar y confirme su ubicación
    • ingrese la descripción de la imagen aquí

No para los débiles de corazón. Pero si desea una gran oportunidad de ver algunas partes de Office no actualizadas tan largas como podría haber estado vivo, es una gran oportunidad.

Enderland
fuente
1
¿Tiene una referencia para la notación [@ID]? No dudo que funcione, pero nunca lo había visto antes y trabajo mucho en Excel.
TJL
1
@TJL si formatea una tabla como una tabla, usará ese tipo de notación para hacer referencia a otras columnas. Mucho más claro que las referencias celulares. ¿Podría ser una característica de 2010+? No estoy seguro. No
utilicé
¿No puede simplemente cambiar la palabra IZQUIERDA a la palabra COMPLETA en la consulta original? Estoy seguro de que solo está usando el controlador ACE OLEDB para ejecutar esa consulta, que admite la sintaxis FULL JOIN.
Kyle Hale
14

Como solución alternativa, ¿puedo sugerir Power Query ? Es un complemento gratuito de Excel de Microsoft para realizar básicamente exactamente este tipo de cosas. Su funcionalidad también se incluirá directamente en Excel 2016, por lo que está preparada para el futuro.

De todos modos, con Power Query, los pasos son bastante simples:

  1. Importe ambas tablas como consultas en el Power Query Editor.
  2. Realice una transformación de Combinar consultas en ellos, estableciendo la columna de combinación apropiada y configurando el tipo de combinación como Exterior completo.
  3. Cargue su tabla de resultados en una nueva hoja.

Lo bueno de esto es que una vez que haya configurado esto, si realiza cambios en sus tablas de datos base, simplemente presione Datos> Actualizar todo y su hoja de resultados de Power Query también se actualizará.

Kyle Hale
fuente
Muy interesante. Un amigo mío que es dueño de un restaurante me preguntó sobre MS Office y me mostró su suite 2016, que no incluye MS Access. Ahora veo por qué es eso. Excel tenía muchas limitaciones. Nunca compré por encima de 2003 porque ninguna de las características tenía valor y tampoco me gustó el nuevo aspecto; 2010 y superior. Access hace todo esto y más, por lo que surge la pregunta: ¿por qué tantas personas intentan hacer que la base de datos trabaje en Excel cuando Access es la forma de lograrlo? Lo único que puedo ver es que quizás para que un buen Access DB funcione, también necesita una buena experiencia de VB.
ejbytes
@ejbytes la mayoría de la gente entiende el concepto de hojas de cálculo. La mayoría ... no entiende el concepto de una base de datos. Tuve un proyecto que convertía un proyecto de hoja de cálculo como base de datos en una base de datos y los usuarios todavía lo llamaban "la hoja de cálculo", ¡incluso después de extensas explicaciones sobre cómo funciona una base de datos!
enderland
@enderland Creo que tienes razón. Una hoja de cálculo con reglas no rigurosas y flexibilidad no contigua ... y consultas disfrazadas de filtros. Una plataforma para tablas y listas improvisadas.
ejbytes
La versión @ejbytes tldr es que MS quería probar un motor de memoria de almacén de columnas en Excel para dejar entrar más filas, incluía conexiones de datos externas, resultó ser muy popular, por lo que agregaron una herramienta ETL. Ahora han enrollado todas las herramientas como PowerBI.
Kyle Hale
@KyleHale Estoy usando Office 2010 e intento hacer una UNIÓN COMPLETA EXTERNA, pero Power Query ignora los ID de la segunda tabla que no están en la primera tabla.
GeMir
0

Una forma rápida de semi-simular una (combinación externa) es tomar su segunda lista y pegarla directamente debajo de su lista de puños, es decir, sus (claves principales) están todas en la misma columna (primaria). Luego ordene esa columna primaria, terminará con una lista intercalada y luego hará una ecuación IF transpuesta (el superusuario está desordenando la vista de diseño de la tabla ...):

listA listB


sam blue tim 32874 tim red mary 5710 chris green gustav 047 fred blue
mary black

copiar / pegar / ordenar, el resultado se ve así: AB chris green fred blue gustav 047 mary 5710 mary black sam blue tim 32874 tim red

entonces fórmula para la celda c1: (c1) = if (A1 = A2, B2)

El resultado se ve así:

ABC chris verde FALSO fred azul FALSO gustav 047 FALSO mary 5710 negro mary negro FALSO sam azul FALSO tim 32874 rojo tim rojo FALSO

Clasifique C para deshacerse de los falsos, etc. Esa es una versión básica de la idea, simplemente amplíela si necesita más datos. -wag770310

d587793
fuente
¿Puedes formatear esto de alguna manera para que sea legible?
davidbaumann