Búsqueda con varias condiciones

Hola a tod@s, ante todo felicitaciones a todos por la importante labor que hacen. Mi interrogante es la siguiente:
hoja1
A B C D
1 COD1 DATE1 TIPO1 3€
2 COD2 DATE2 TIPO2 2€
3 COD3 DATE3 TIPO3 1€
4 COD3 DATE3 TIPO4 5€
Hoja 2
A B C D
1 COD1 DATE1 TIPO1 3€
2 COD2 DATE6 TIPO8 0
3 COD3 DATE7 TIPO3 0
4 COD3 DATE3 TIPO4 5€
Es una pequeña representación de tablas, necesito desde la hoja 2 tomar el CODX y localizarlo en hoja 1, en su fila verificar si DATEX si coincide con la hoja 1 y luego lo mismo con TIPOX y si estas 3 condiciones se cumplen copiar el importe de la columna DE y pegarlo en la hoja 2 en la columna DE, luego continuar el macro hacia abajo. Muchísimas gracias.

1 respuesta

Respuesta
1
En hoja 2 columna DE pones esto:
=si(si.error(coincidir(a1;hoja1!$a$1:$a$4;0);0)=si.error(coincidir(b1;hoja1!$b$1:$b$4;0);0);buscarv(a1;hoja1!$a$1:$d$4;4;falso);"")
Ups.. sorry acabo de caer en cuenta que en hoja 1 los datos CODx se repiten... en este caso la función coincidir no te servirá pues devuelve la intentar matricial del la primera coincidencia... Mmmm...
Dame un tiempillo más a ver que se hace, creo que habrá que intentar con recorrido de lista mediante un bucle.
Te aviso
Otra vez
Ya di con una solución a tu problema, es un script que toma los datos de las celdas ( mediante recorrido en bucle) concatena el contenido de ellas y las convierte en una sola cadena de caracteres la cual compara). Acá esta:
INSERTA un modulo desde el editor de visual basic (alt + f11) en ese modulo pega esto:
Sub encontrar()
Dim i As Long
Dim matriz As String
Dim buscado As String
Dim total As Long
total = Application.WorksheetFunction.CountA(Sheets(2).Range("A:A"))
If total = 0 Then Exit Sub
For i = 1 To total
matriz = UCase(Trim(Sheets(1).Range("A" & i))) & UCase(Trim(Sheets(1).Range("B" & i))) & UCase(Trim(Sheets(1).Range("C" & i)))
buscado = UCase(Trim(Sheets(2).Range("A" & i))) & UCase(Trim(Sheets(2).Range("B" & i))) & UCase(Trim(Sheets(2).Range("C" & i)))
If matriz = buscado Then
Sheets(2).Range("D" & i) = Sheets(1).Range("D" & i)
End If
DoEvents
Next
End Sub
El macro se llama encontrar y lo invocas como cualquier macro.
Tomara uno a uno los datos de hoja 2 y los comparara con los de hoja 1.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas