Buscar valor con coincidencia

Buenos, tengo una serie de datos, que simplificados quedarían en tres columnas y de esta manera:
Cod.Destino 1            Fec.Salida 1          Fec.Entrega 1
18 02-02-09 03-02-09
Cod. Destino sería el código de la población local, la fecha de salida es la de la mercancía y por último la de entrega.
Por otro lado, tengo la matriz con todos los festivos locales:
Cod.Destino 2 fecha 2
          7              20/01/2009 
Necesitaría una fórmula, que me permitiera saber que registros tienen festivo local. El razonamiento sería el siguiente: que la "fecha 2" estuviera comprendida entre "Fec.Salida 1" y "Fec.Entrega 1" (o que "fecha 2" fuera igual o mayor que "Fec.Salida 1" y igual o menor que "Fec.Entrega 1") y que "Cod.Destino 1" sea igual que "Cod.Destino 2". El resultado a devolver sería la propia fecha del festivo, es decir "fecha 2".
Quizá es algo sencillo, pero me estoy volviendo loco... Gracias de antemano y un saludo

1 respuesta

Respuesta
1
Vamos a establecer ciertas cosas:
en la columna A=Cod Destino
en la columna B= Fecha Salida 1
en la columna C= Fecha Entrega
en la columna H=listado de codigos
En la columna I=Días festivos de ese código (h)
En principio he creado una nueva función que poniendo esta fórmula en la celda de la columna DE me contesta "" (vacío) o "DÍAS FESTIVO"
La fórmula para la celda D2 sería =fiesta(A2;B2;C2) y busca en la tabla H:I el código y el día y si coinciden los dos, me devuelve "DÍA FESTIVO", tú pot su parte, podrías crear un unos formatos a las celdas para que si te marca día festivo, coloreo es celda.
Para crear la función, desde la hoja excel, teclea a la vez ALT+F11 y se te abrirá el editor de VB, vete al menu y pincha en INSERTAR y en MODULO, en la parte derecha (el cuadro blanco), copia el siguiente código :
'-----------------------------------------------------
Function fiesta(COD As Byte, Fecha1 As Date, Fecha2 As Date) As String
    Dim MiObjeto
    For Each MiObjeto In Range("h:h")
        If MiObjeto.Text = COD Then
            If MiObjeto.Offset(0, 1) = Fecha2 Then
                fiesta = "DÍA FESTIVO"
                Exit For
            Else
                fiesta = ""
            End If
        End If
    Next
End Function
'-----------------------------------------------------
Si necesitas más aclaraciones, pregunta...
Suerte
Lo primero gracias por tu respuesta.He probado la función, pero como bien dices, me devuelve el festivo si la fecha coincide o con fecha de salida o con fecha de entrega. Lo que necesito es poder detectar dónde hay festivos locales ("código de destino"), teniendo en cuenta que para saberlo, la fecha del festivo tiene que ser igual o estar comprendida entre las dos fechas. Por ejemplo, en el código 28 es festivo el 04/02/09 y tengo el registro "cod: 28 fech sal: 01/02/09  fech entrega: 15/02/09", tengo que encontrar la manera de detectar que ha habido un festivo entre esas fechas, desde el 01/02/09 al 15/02/09, ambas inclusive. Por favor, dale una vuelta... porque para mi es imposible. GRacias de antemano y un saludo
Con esta pequeña modificación, compara entre la fecha 1 y la 2, y si esta entre ellas te marca FESTIVO
CAMBIA LA FUNCIÓN:
Function fiesta(COD As Byte, Fecha1 As Date, Fecha2 As Date) As String
    Dim MiObjeto
    fiesta = ""
    For Each MiObjeto In Range("h:h")
        If MiObjeto.Text = COD Then
             If MiObjeto.Offset(0, 1) <= Fecha2 And MiObjeto.Offset(0, 1) >= Fecha1 Then
             fiesta = "DIA FESTIVO"
             Exit For
          End If
        End If
    Next
End Function
Es genial! Funciona perfectamente... por último (y perdona), las extracciones sobre las que trabajo tienen una orden de columnas que no puedo cambiar, comunes a un montón de informes, con lo cual, siempre:
en la columna B=Cod Destino
en la columna D= Fecha Salida 1
en la columna E= Fecha Entrega
La matriz de los festivos la puedo poner al final, por ejemplo en las Vy ww
en la columna V=listado de códigos
en la columna W=Días festivos de ese código (h)
No sé cómo cambiarlo en tu código...
Utiliza la fórmula por ejemplo para la celda F2 o la que creas conveniente, con esta fórmula analizas las fechas y cod destino de la fila 2
=fiesta(B2;D2;E2)
y el codigo sustituyelo por:
Function fiesta(COD As Byte, Fecha1 As Date, Fecha2 As Date) As String
    Dim MiObjeto
    fiesta = ""
    For Each MiObjeto In Range("v:v")
        If MiObjeto.Text = COD Then
             If MiObjeto.Offset(0, 1) <= Fecha2 And MiObjeto.Offset(0, 1) >= Fecha1 Then
             fiesta = "DIA FESTIVO"
             Exit For
          End If
        End If
    Next
End Function
Recuerda que si das por terminada la pregunta, hay que cerrar la pregunta y valorar la ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas