Buscarv en celdas con múltiples valores

Hola Perseo, no he podido solucionar la siguiente situación:
Quiero aplicar buscarv donde los valores buscados pueden estar (ademas de en un rango de filas) dentro de una misma celda separados por un espacio.
Ej: Valor buscado XXXX; y dentro de la "matriz buscar en" puedo tener launa celda que contiene " SSSS FFFF XXXX QQQQ"
En realidad el valor buscado puede ser cualquiera de los que están en la celda, y lo que pretendo es que me reconozca el valor tal como lo hace cuando uso la función buscar, y luego trayéndome un valor a la derecha de aquel encontrado
Quizás la fx que estoy utilizando no es la correcta.
Agradezco desde ya tu respuesta

1 respuesta

Respuesta
1
Aquí tienes un código que te puede ayudar. Te vas a Visual Basic (Alt+F11) y en el menú Insertar-->Módulo y lo pegas en la ventana General
Sub compara()
Application.ScreenUpdating = False
Range("B1").Select
ActiveCell.FormulaR1C1 = "=IF(SEARCH(R1C5,RC[-1])>0,""Si"","""")"
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(o, 1).Select
Range(Selection, Selection.End(xlUp)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Columns("B:B").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("B1").Select
For i = 1 To 5000
If ActiveCell.FormulaR1C1 = "Si" Then
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.ClearContents
ActiveCell.Offset(1, 0).Select
End If
Next i
Range("a1").Select
End Sub
Este código está pensado para una lista que ocupa desde la celda A1 hasta la celda A5000 y la cadena de texto que quieres comparar, está en la celda E1. La dirección de la celda E1 (donde está el texto a buscar), te le he puesto en negrita, como verás se escribe R1C5, que quiere decir Fila (Row)1 Columna (Column)5. Tu tendrás que adaptar esa dirección de acuerdo con tu hoja y poner la dirección de la celda donde tienes el texto a buscar. De igual forma, donde tengas la matriz, tienes que disponer de una columna en blanco a la derecha de la misma, porque será allí donde te ponga el "Si" cuando detecte la cadena de texto de la comparación. Asimismo, donde veas una referencia a la columna A, deberás cambiarla por la columna donde tu tengas tu matriz.
Lo mejor es que para hacer una prueba, en una hoja en blanco, en el mismo libro, después de copiar la macro, copies tu matriz en la columna A y escribas en E5 el texto que quieres comparar. Luego simplemente ejecuta la macro "compara" en Herramienta-->Macro-->compara.
Si ves que te sirve y no puedes adaptarla a tus necesidades, me dices exactamente el rango y hoja donde tienes la matriz y la celda y hoja donde pondrás el texto de comparación y te la devuelvo adaptada.
Esta macro, en realidad ejecuta una fórmula combinada entre la función SI y la función HALLAR. Si la macro te da muchos problemas, te puedo dar la fórmula, pero la fórmula te deja valores de error donde no pone el "Si" (#¡VALOR!).
Perseo, gracias por la rápida respuesta. Tu ejemplo funciona poniendo el texto a buscar en E1.
Lamentablemente yo no he sabido explicar lo que necesito, trataré de hacerlo describiendo una pequeña matriz de ejemplo:
en A1: "10 11 12", en A2 "35 36 39", en B1:"texto1", en B2:"texto2",etc
luego los valores que quiero comparar, en E1:"36", en E2:"12",etc
mi intención era crear una fórmula en F1 que busque E1 ("36") en la columna A y que me traiga "texto2". Es decir un valor a la derecha del argumento encontrado.
Basicamente un buscarv que pueda reconocer un valor dentro de una cadena de texto.
Igualmente me ha sido muy enriquecedor explorar tu macro, ya que como te habrás dado cuenta no tengo conocimientos al respecto. Y por esto, contestes o no este nuevo pedido cerraré esta consulta con la máxima calificación.
Muchas gracias y saludos
A ver si lo concretamos. Tu quieres que te busque E1, lo compare con toda la columna A y te traiga el texto de B, donde haya coincidencia y lo coloque en F1 y así sucesivamente con toda la columna E, es decir, lo mismo pera E2, E3, E4 etc.
¿Es así?
Correcto, eso es lo que necesito.
Saludos
En este caso, se puede solucionar mejor con una fórmula. De todas formas, ahora que lo pienso, tampoco estoy seguro de si esto es lo que buscas, ya que ahora no tengo claro si quieres comparar la cadena de texto E1 con la celda A1, y todas las celdas en E con sus homólogas en A, con todas las celdas de la matriz, lo cual es más difícil y habría que hacerlo con VBA en mi opinión.
Esta fórmula, es para el primer supuesto, es decir, compara las celdas en E con las de A y pone el texto de B en F, en caso de haber coincidencias de la cadena de texto. La debes copiar en F1 y arrastrarla a todo el rango F, adyacente a las celdas de E que tengan texto.
La fórmula es:
=SI(ESERROR(SI(HALLAR($E1;$A1);"";""));"";SI(HALLAR($E1;$A1);B1;""))
Yo para probarla, he puesto en el rango A1:A20 tres cifras de dos dígitos separadas por espacios en cada celda. En el rango B1:B20, he puesto desde Texto1 a Texto20. En el rango E1:E20, he puesto una cifra de dos dígitos en cada celda y en el rango F1 he creado la fórmula y la he arrastrado a todo el rango F1:F20 (ojo, esto es importante, la copias en F1 y la arrastras, para que cambien las direcciones)
El resultado es que en los caso de coincidir los dos dígitos de cualquier celda en E con alguno de los dobles dígitos de la celda de A en la misma fila, en esa fila en F me copia el texto de B.
Si no es esto lo que querías, me lo dices
Perseo,
lo que necesitaba era el segundo supuesto: comparar todas las celdas de E con la matriz en A. De cualquier modo agradezco tus múltiples esfuerzos por entender mis precarias preguntas.
Estoy comenzando a aprender BD y VBA con lo cual trató de nutrimerme de gente como tú que comparte su conocimiento. El problema que originó esta consulta ya fue resuelto vía conciliación humana, pero espero poder desarrollar soluciones en excel en el futuro.
Excelente tu rapidez de respuesta .Muchas Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas