Identificare date



  • Identificare date
    di Mik (utente non iscritto) data: 16/02/2010

    Ciao a tutti e grazie per l'aiuto che offrite gratuitamente a chi deve programmare in vba.
    questo è il mio quesito:
    ho un foglio di calcolo dove scelgo in anticipo il mese, ho una data iniziale e una finale e 4 celle contenenti le settimane del mese suddivise in questo modo: prima cella settimana "1-7", seconda "8-14", "15-21", "22-31".
    se ad esempio il mese in considerazione è marzo e la data iniziale e finale sono, rispettivamente, 15/03/2010 e 23/04/2010, dato che il mese considerato è appunto marzo, il periodo che mi interessa è dal 15/03 al 31/03. quello che la macro deve fare è identificare quali settimane sono comprese in quel range temporale. in questo caso le settimane interessate sono 15-21 e 22-31. ovviamente i due range potevano anche essere, ad esempio 18/03/2010 e 24/03/2010 (15-21 e 22-31) oppure 01/01/2010 e 18/03/2010 (1-7, 8-14 e 15-21) oppure 01/01/2010 e 22/07/2010 (tutte le settimane). ho fatto tante prove, ma non sono riuscito ad arrivare a una conclusione.
    spero che qualcuno di voi riesca a darmi una mano.
    ciao e grazie



  • di Enzo (utente non iscritto) data: 16/02/2010

    Ti allego un file prova e fa sapere
    devi adattartelo in quanto nel mio esempio
    se trova il periodo nella cella sottostante inserisce ok
    tu puoi adattartelo come vuoi



  • di Mik (utente non iscritto) data: 16/02/2010

    Grazie tante per la risposta e per l'allegato.
    il problema è che bisogna tenete in considerazione anche i mesi e inoltre le date possono essere molteplici, quindi non vanno considerati solo i periodi specifici 1-7, ecc...
    per quel che riguarda la prima settimana, avevo provato in questo modo, ma non funziona bene:

    ps: come mai il segno "più" non viene visualizzato? o almeno nell'anteprima...
     
    Dim Data1, Data2 As Date
    Dim i As Integer
    
    For i = 0 To ListDATA1.ListCount - 1
    Data1 = ListDATA1.List(i)
    Data2 = ListDATA2.List(i)
    
    If Data1 <= "01/03/2010" And Data2 >= "07/03/2010" Or (Data1 <= "01/03/2010" And ((Data2 <= "07/03/2010" And Data2 >= "01/03/2010")) Or ((Data1 >= "01/03/2010" And Data1 <= "07/03/2010")) And Data2 >= "07/03/2010") Or (Data1 >= "01/03/2010" And Data2 <= "07/03/2010") Then
    Range("F27").Value = Range("F27").Value più 1
    End If
    Next i
    



  • di Enzo (utente non iscritto) data: 16/02/2010

    Mi sono attenuto al tuo esempio



  • di Mik (utente non iscritto) data: 16/02/2010

    Ho dimenticato due parentesi... ecco il codice corretto, che comunque non funziona bene:
     
    Dim Data1, Data2 As Date
    Dim i As Integer
    
    For i = 0 To ListDATA1.ListCount - 1
    Data1 = ListDATA1.List(i)
    Data2 = ListDATA2.List(i)
    
    If (Data1 <= "01/03/2010" And Data2 >= "07/03/2010") Or (Data1 <= "01/03/2010" And ((Data2 <= "07/03/2010" And Data2 >= "01/03/2010")) Or ((Data1 >= "01/03/2010" And Data1 <= "07/03/2010")) And Data2 >= "07/03/2010") Or (Data1 >= "01/03/2010" And Data2 <= "07/03/2010") Then
    Range("F27").Value = Range("F27").Value "più" 1
    End If
    Next i
    



  • di Enzo (utente non iscritto) data: 16/02/2010

    Se alleghi un file forse si capisce



  • di Mik (utente non iscritto) data: 16/02/2010

    Hai ragione, ho allegato il file.
    e' un po' incasinato... non farci caso, non sono un programmatore.
    devi cliccare prima su start e poi su date.
    per cancellare i valori clicca su clear.



  • di Enzo (utente non iscritto) data: 16/02/2010

    Provero' a dargli un occhiata



  • di Mik (utente non iscritto) data: 16/02/2010

    Ok, grazie mille!!!



  • di Mik (utente non iscritto) data: 18/02/2010

    Ciao enzo,
    il problema era banale.
    pensavo si potessero dichiarare due variabili in quel modo e invece, a quanto pare, no...
    grazie lo stesso per la disponibilità!
     
    Dim Data1 As Date, Data2 As Date