Fórmula de Excel: consultar un rango que da como resultado un rango

3

Tengo un rango en Excel (B3: C8) desde el cual quiero filtrar a los ingleses. En SQL esto sería muy simple:
SELECT Persons FROM [myTable] WHERE Nationality = 'English'

¿Cómo puedo aplicar un filtro similar en un rango donde el resultado no es un solo valor sino un rango?
Nota: Excel tiene un botón Filtro, pero todo lo que hace es OCULTAR las filas no deseadas. No quiero filas ocultas.

Así es como quiero que se vea mi mesa. ¿Cómo debería ser la fórmula de G3?

enter image description here

user24752
fuente

Respuestas:

3

Para obtener los nombres en un rango, puede convertir sus datos en una tabla y luego crear una tabla dinámica con Nacionalidad como el filtro de informe y Personas como la etiqueta de la fila. Entonces escoge Inglés De la lista de nacionalidad. Vea la captura de pantalla a continuación (ignore la columna D ya que no se usó);

Pivot Table

CharlieRB
fuente
No es necesario crear una tabla dinámica para filtrar en la Nacionalidad. Un simple filtro de la columna Nacionalidad sería suficiente y mencionó que en realidad no quería ocultar filas (filtrado), que quiere eliminarlas por completo.
Jay
1
@Jay no veo las palabras "eliminar" en la pregunta. Además, un filtro simple oculta filas. Por último, puede haber muchas formas de lograr lo mismo cuando se le pregunta; 'Así es como quiero que se vea mi mesa. ¿Cómo debería ser la fórmula de G3?
CharlieRB
Creo que una tabla dinámica es una buena solución aquí. +1
Doug Glancy
En la pregunta, dijo: "Nota: Excel tiene un botón de filtro, pero todo lo que hace es OCULTAR las filas no deseadas. No quiero filas ocultas". Leyendo entre líneas, lo que él quiere es tener una columna con los nombres que se ajusten a los criterios y que los otros nombres no existan en esa columna. Y no me malinterpretes, las tablas dinámicas son geniales, pero creo que para una tabla tan simple, no vale la pena hacer una tabla dinámica. En otra nota, Doug Glancy responde exactamente lo que se le pregunta.
Jay
3

Ingrese esto en G3 y arrastre hacia abajo. Es una fórmula matricial, por lo que debe ingresarse usando Ctrl Shft Enter

=IFERROR(INDEX($B$3:$B$8,LARGE(($C$3:$C$8=$E$3)*(ROW($B$3:$B$8)-2),COUNTIF($C$3:$C$8,$E$3)-(ROWS($3:3)-1))),"")

Tenga en cuenta que IfError solo está disponible en XL 2007/10, de lo contrario, deberá usar:

=IF(ISERROR(INDEX($B$3:$B$8,LARGE(($C$3:$C$8=$E$3)*(ROW($B$3:$B$8)-2),COUNTIF($C$3:$C$8,$E$3)-(ROWS($3:3)-1)))),"",INDEX($B$3:$B$8,LARGE(($C$3:$C$8=$E$3)*(ROW($B$3:$B$8)-2),COUNTIF($C$3:$C$8,$E$3)-(ROWS($3:3)-1))))
Doug Glancy
fuente
Doug, quería exactamente algo así. Gracias por el gran esfuerzo, funciona perfectamente. Sin embargo, sigo marcando la tabla dinámica como solución. La razón es la mantenibilidad. Esta fórmula es muy compleja ya para nuestro ejemplo de libro de texto. Cuando se aplica en el escenario de la vida real, su complejidad explota aún más. La tabla dinámica no es tan perfecta como esta, pero es muy fácil de usar. ¡Gracias de nuevo!
user24752
Estoy de acuerdo de todo corazón. Me gusta descubrir fórmulas como esta, pero rara vez termino usando las complejas. En el vasto paisaje desordenado que es Excel, las tablas dinámicas son una roca de estabilidad.
Doug Glancy
2

Esta versión funcionará en cualquier versión de Excel y da los resultados en el orden en que aparecen

En G3:

=IF(ROWS(G$3:G3)>COUNTIF(C$3:C$8,E$3),"",INDEX(B$3:B$8,SMALL(IF(C$3:C$8=E$3,ROW(C$3:C$8)-ROW(C$3)+1),ROWS(G$3:G3))))

confirmado con CTRL + MAYÚS + ENTRAR (presionados juntos) y copiado hasta donde sea necesario

barry houdini
fuente
Hay un error en la formula. Si cambio el E3 a 'Alemán', John se queda en G3 en lugar de Hans.Al igual que seleccionando 'Francés', Luis no aparece, pero John toma su lugar.
user24752
Funciona bien para mí ... ¿confirmó con CTRL + MAYÚS + ENTRAR y luego la copia? Si cambio E3 a alemán, veo a Hans y Jurgen como se esperaba ...
barry houdini
¡Disculpa, mi error! Tienes razón.
user24752
0

Una forma sería usar esta declaración IF = IF ($ E $ 3 = C3, B3, "") que le daría el nombre de las personas si la Nacionalidad coincide con el filtro o un espacio en blanco si no es así.

N4TKD
fuente
0

=If($E$3=English,B3,"")

Puedes hacer esto más generalizado haciendo:

=If($E$3=C3,B3,"")

soandos
fuente