Búsqueda de datos con 2 criterios en la misma fila

Llevo unas horas rompiendo la cabeza para establecer la búsqueda que adjunto en la siguiente imagen:

Estoy creando una base de datos y en concreto el dato que pretendo buscar sale de encontrar la fila donde está el cliente y a continuación identificar la columna correspondiente que coincide con el ejercicio seleccionado para a partir de ella conocer el máximo. El dato entonces se localiza 3 celdas después, en el caso, el dato buscado sería 266,6 (G7)

He probado varias fórmulas de búsqueda: Índice+Coincidir; BuscarV+Coincidir; BuscarV+BuscarV y no he logrado dar con la fórmula.

2 Respuestas

Respuesta
1

Con fórmula matricial puede ser así:

=MAX(SI(D4:D9=C12;SI(C4:C9=C11;G4:G9;"");""))

De este modo te busca el máximo que cumpla las dos condiciones, incluso si tienes varias combinaciones de jose/squat, el buscarv te devuelve la primera coincidencia solamente.

Ten en consideración que es fórmula de matriz, para crearla la tecleas y en lugar de pulsar ENTER debes pulsar la combinación CONTROL + MAYÚSCULAS + ENTER

¡Gracias! Pero no se adapta :(
No me expresé bien con la imagen que puse

En la fórmula que me das entiendo que piensas que todos los ejercicios están en la misma columna porque al final el resultado lo sacas de la columna G, el problema es que los ejercicios para un mismo usuario van en la misma fila porque tras un formulario se guardan pesos y rep en la misma fila.. Por ej: en la columna H va press banca y en la columna QUE va el resultado. Si fuera Jose y Press banca debería buscarlo en la columna QUE y no en la G todo dentro de la fila 7..

Muchas gracias de todas maneras, me parece que tendré que buscar ponerlo de otro modo..

Un saludo!

Entendido.. Entonces en cada columna de ejercicio /D, H, etc...) ¿Tienes para todos los nombres el mismo ejercicio? ¿Y los nombres no están repetidos? Si es así, lo puedes resolver así:

=BUSCARV(B11;C4:H8;COINCIDIR(B12;C4:H4;0)+3;FALSO)

Adapta el rango C4:H8 y C4:H4 a tu caso particular. Debería funcionar.

Respuesta
1

.12.01.17

Buenas noches, Esteban

Si bien habría una forma de resolverlo directamente con fórmulas matriciales, hay una alternativa más pedestre que funciona correctamente demandando menos recurso del equipo.

Consiste en crear un campo auxiliar -hacia la izquierda de la tabla- que concatene el nombre del cliente con el ejercicio.

La fórmula entonces sería:

=C4&D4

Luego un simple BUSCARV traería el resultado.

Si hubieras insertado una columna a la izquierda para ese campo auxiliar, en la columna A, esta sería la fórmula a colocar en B13:

=BUSCARV(B11&B12;$A$4:$K$10;8;0)

Normalmente le agrego un condicional para que me avise que no encontró algún resultado buscado usando ESNOD.

En tal caso la fórmula final sería:

=SI(ESNOD(BUSCARV(B11&B12;$A$4:$K$10;8;0));"No encontrado";=BUSCARV(B11&B12;$A$4:$K$10;8;0))

.

¡Gracias! 

La verdad es que no había pensado lo de concatenar y he visto ejemplos pero no se me ocurrió adaptarlo a mi caso particular. El problema es que tengo como 25 o 30 ejercicios en la hoja y tendria que hacer 25-30 columnas extra, una nueva por ejercicio, y modificar toda la programación en VBA que tengo detrás por los registros. Si nadie me da una solución matricial valoraré esa alternativa! gracias de nuevo Fernando

.

Buenas, Esteban

De acuerdo a lo que veo en la imagen que pegaste, los ejercicios están en una única columna (D), por lo que no importa cuantos tengas en ella, asi como no importa cuantos clientes tengas.

Al concatenar en la columna auxiliar formará un par cliente-ejercicio que te servirá para la búsqueda del par que estuvieses buscando.

Ejemplo:

Espero haber sido más claro.

Un abrazo

Fer

.

Entiendo lo que me dices Fernando

En mi caso, cada fila representa un usuario y cada ejercicio esta en columnas sucesivas donde los datos se guardar tras un formulario. Cada ejercicio requiere unos cálculos previos para sacar el Máximo. El tema está en que yo luego debo buscar esos Máx para utilizarlos en otra hoja/planilla donde tengo 6 ejercicios y en las celdas de abajo deben aparecer los pesos máx acorde a dicho usuario sobre el que se trabaja. Pensé que seria "fácil" encontrar al sujeto en la fila y al ejercicio en la columna por eso Squat se repite para todos los usuarios y a partir de eso encontrar el dato MAX 3 celdas después (tras los cálculos). Además en mi planilla original en las filas va el nombre del ejercicio abreviado (pk es el que coge en la hoja donde luego trabajo la sesión, las celdas tienen poco ancho) y encima de los cálculos el nombre de ejercicio original (Ej: arriba press banca y abajo PB)

En mi imagen deje puesto ejercicio 2 para dar a entender que los ejercicios se sucedían en columnas

La solución que me propones la entiendo pero no se ajusta del todo a la solución que estaba buscando para mi proyecto, pero mil gracias igualmente, es un nuevo conocimiento que puede servir para otro caso.

Un saludo!

.

Hola, Esteban

Tu aclaración me lleva a repensar la fórmula y no será necesaria entonces la columna auxiliar que concatene cliente/ejercicio.

Como habrás notado -en la imagen que te había pegado- yo había interpretado que los ejercicios estaban, todos, en la misma columna.

Entendiendo que la columna donde se indica cada ejercicio está cada tres columnas de por medio, la siguiente fórmula traerá el resultado correspondiente. Lo que no sé es si esas otras columnas se refieren siempre al mismo ejercicio o varían de acuerdo a cada persona (me inclino a pensar que este es el caso). En todo caso, la solución funciona para ambas situaciones.

Verás que es más larga porque le agregué dos controles de existencia: uno para la persona y otro para el ejercicio. A su vez, de encontrar que hizo tal ejercicio, busca en qué fila está el cliente y luego en qué columna está el ejercicio y, finalmente, trae el valor de la tercera columna.

Entonces en B13, coloca la siguiente fórmulita:

=SI(ESNOD(COINCIDIR(B11;$C$4:$C$10;0));"Persona no encontrada";SI(ESNOD(COINCIDIR(B12;INDIRECTO("C"&COINCIDIR(B11;$C$4:$C$10;0)&":BB"&COINCIDIR(B11;$C$4:$C$10;0));0));"Ejercicio no ejecutado";BUSCARV(B11;$C$4:$BB$10;COINCIDIR(B12;INDIRECTO("C"&COINCIDIR(B11;$C$4:$C$10;0)&":BB"&COINCIDIR(B11;$C$4:$C$10;0));0)+3;0)))

Funcionó correctamente en las pruebas que hice.

Por último, noté que hay una fecha a la izquierda de la base. Si, eventualmente, esta incluyera varias fechas a considerar -donde el cliente/ejercicio podría estar más de una vez, faltaría considerar qué fecha tener en cuenta y sería un dato más a darle a la fórmula y obligaría, nuevamente, a volver al esquema de columna auxiliar que concatene ahora, fecha y cliente.

Espero que aquella fórmula resuelva tu problema.

Un abrazo

Fer

Hola Fernando

Muchas gracias, lo de los controles de existencia lo desconocía y puede ser muy útil así como la posibilidad de introducir un tercer elemento como es la fecha de registro, que hasta ahora dudo si al hacer nuevo registro de un cliente modificar siempre el mismo registro o hacer varios registros y al momento de buscar que tome como referencia el último o más cercano a la fecha actual. tomo nota!

Un abrazo y gracias de nuevo.

.

Ok, Esteban. Me alegro de que te haya servido.

Si no hubiera una razón práctica para llevar una historia de cada cliente, me inclinaría a la primera alternativa de modificar el mismo registro. La otra complejiazaría aun más aquella formula.

De todos modos puedes guardar los registros viejos consecutivamente en otra hoja, como valores, para alguna consulta eventual.

Un abrazo

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas