Errore If



  • Errore If
    di laj (utente non iscritto) data: 05/12/2014 10:02:51

    Ciao a tutti.
    ho un problema, sto cercando di creare una macro che data una data e un giorno della settimana la macro mi restituisce il range della settimana a cui il giorno appartiene, es:

    data giorno risultato
    2014-12-05 ven 2014-12-01 to 2014-12-07

    non sono un esperto, quindi ho scritto quella formula.

    purtroppo mi da errore. Mi sapete dire perchè? e se un modo più veloce per fare quello che vorrei fare?

    grazie mille
    l



     
    Range("C1").Select
        ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""lun"",CONCATENATE(RC[-2],"" to "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+6)),""AAAA-MM-GG"")), _
            IF(RC[-1]=""mar"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-1)),""AAAA-MM-GG""),"" to "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+5)),""AAAA-MM-GG"")), _
            IF(RC[-1]=""mer"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-2)),"AAAA-MM-GG""),"" to "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+4)),""AAAA-MM-GG"")), _
            IF(RC[-1]=""gio"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-3)),""AAAA-MM-GG""),"" to "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+3)),""AAAA-MM-GG"")), _
            IF(RC[-1]=""ven"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-4)),""AAAA-MM-GG""),"" to "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+2)),""AAAA-MM-GG"")), _
            IF(RC[-1]=""sab"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-5)),""AAAA-MM-GG""),"" to "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+1)),""AAAA-MM-GG"")), _
            IF(RC[-1]=""dom"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-6)),""AAAA-MM-GG""),"" to "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+0)),""AAAA-MM-GG"")))))))))"
        Range("C2").Select
    



  • di Lucas87 data: 05/12/2014 10:49:01

    Ciao
    Con la data in A1 restituisce un messaggio
     
    MsgBox "La data " & Range("a1") & " fa parte della settimana dal " & Range("a1") - Weekday(Range("a1"), vbMonday) + 1 & " al " & Range("a1") + 7 - Weekday(Range("a1"), vbMonday) & ""
    



  • di laj (utente non iscritto) data: 05/12/2014 11:39:05

    non ho capito cosa intendi Lucas87



  • di Lucas87 data: 05/12/2014 11:53:27

    Non avendo un file sotto mano è impossibile creare un codice specifico.
    Quindi ti ho dato un esempio; ovvero:
    Se in un foglio scrivi una data in A1 ed esegui il codice che ho messo, ti viene restituito un messaggio con indicati il primo e l'ultimo giorno della settimana a cui la data appartiene.
    La parte di codice che a te interessa è
    Range("a1") - Weekday(Range("a1"), vbMonday) + 1 che calcola il primo giorno
    Range("a1") + 7 - Weekday(Range("a1"), vbMonday) che indica l'ultimo.
    Come utilizzarli per ottenere quello che vuoi lo sai solo tu.


  • Errore If
    di laj (utente non iscritto) data: 09/12/2014 10:43:28

    proverò poi il tuo codice che mi sembra più performante. Per il momento ho inserito quello riportato di seguito...ma da Errore RunTime 1004
    dove sto sbagliando?

    grazie.
    L
     
    Range("C1").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(RC[-1]=""lun"",CONCATENATE(RC[-2],"" TO "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+6)),""AAAA-MM-GG"")),IF(RC[-1]=""MAR"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-1)),""AAAA-MM-GG""),"" TO "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+5)),""AAAA-MM-GG"")),IF(RC[-1]=""MER"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-2))," & _
            """AAAA-MM-GG""),"" TO "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+4)),""AAAA-MM-GG"")),IF(RC[-1]=""GIO"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-3)),""AAAA-MM-GG""),"" TO "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+3)),""AAAA-MM-GG"")),IF(RC[-1]=""VEN"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-4)),""AAAA-MM-GG""),"" TO """ & _
            ",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+2)),""AAAA-MM-GG"")),IF(RC[-1]=""SAB"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-5)),""AAAA-MM-GG""),"" TO "",TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]+1)),""AAAA-MM-GG"")),IF(RC[-1]=""DOM"",CONCATENATE(TEXT(DATE(YEAR(RC[-2]),MONTH(RC[-2]),DAY(RC[-2]-6)),""AAAA-MM-GG""),"" TO "",TEXT(DATE(YEAR(RC[-2]" & _
            ",MONTH(RC[-2]),DAY(RC[-2]+0)),""AAAA-MM-GG"")))))))))"
        Range("C2").Select



  • di Lucas87 data: 09/12/2014 11:19:29

    Serve un file per fare una prova.


  • Errore If
    di laj (utente non iscritto) data: 09/12/2014 11:23:09

    Ho allegato il foglio.

    Grazie
    L



  • di Lucas87 data: 09/12/2014 12:57:09

    Prova a ricreare la formula dall'inizio.
    Solo per la condizione "mar"
    Io sono arrivato a text() e comincia l'errore



  • di Mister_x (utente non iscritto) data: 09/12/2014 14:51:17

    ciao

    non e' piu semplice cambiare la sintassi alla formula

    =TESTO(ADESSO()-(GIORNO.SETTIMANA(ADESSO())-1);"aaaa-mm-gg")& " al " &TESTO(ADESSO()+(7-GIORNO.SETTIMANA(ADESSO()));"aaaa-mm-gg")
    =TEXT(NOW()-(WEEKDAY(NOW())-1),"aaaa-mm-gg")& " al " &TEXT(NOW()+(7-WEEKDAY(NOW())),"aaaa-mm-gg")

    io ho usato adesso() perche' in A1 e' presente la funzione ADESSO() ma si potrebbe usare anche il riferimento alla cella A1
    =TESTO(ADESSO()-(GIORNO.SETTIMANA(A1)-1);"aaaa-mm-gg")& " al " &TESTO(A1+(7-GIORNO.SETTIMANA(ADESSO()));"aaaa-mm-gg")
    =TEXT(NOW()-(WEEKDAY(A1)-1),"aaaa-mm-gg")& " al " &TEXT(A1+(7-WEEKDAY(NOW())),"aaaa-mm-gg")
    PS Oggi e' il giorno 9 per la cronaca

    2014-12-09 mar ADESSO()>>> 2014-12-07 al 2014-12-13
    -------------------- Riferito alla cella A1 >> 2014-12-07 al 2014-12-13

    ciao





  • di Mister_x (utente non iscritto) data: 09/12/2014 14:59:53

    ciao

    scusate l'errore nella seconda formula non avevo cambiato alcuni riferimenti

    =TESTO(A1-(GIORNO.SETTIMANA(A1)-1);"aaaa-mm-gg")& " al " &TESTO(A1+(7-GIORNO.SETTIMANA(A1));"aaaa-mm-gg")
    =TEXT(A1-(WEEKDAY(A1)-1),"aaaa-mm-gg")& " al " &TEXT(A1+(7-WEEKDAY(A1)),"aaaa-mm-gg")

    Riciao




  • Errore If
    di laj (utente non iscritto) data: 09/12/2014 15:07:07

    Ho provato a riscriverla in questo modo...ma come errore dice che è prevista una fine istruzione all'inizio della seconda IF
     
    =IF(RC[-1]=""LUN"",CONCATENATE(TEXT(RC[-1]-(WEEKDAY(RC[-1])),""aaaa-mm-gg"")& "" TO "" &TEXT(RC[-1]+(6-WEEKDAY(A1)),""aaaa-mm-gg"")), _
            IF(RC[-1]=""MAR"",CONCATENATE(TEXT(RC[-1]-(WEEKDAY(RC[-1])-1),""aaaa-mm-gg"")& "" TO "" &TEXT(RC[-1]+(5-WEEKDAY(A1)),""aaaa-mm-gg"")),



  • di Mister_x (utente non iscritto) data: 09/12/2014 16:09:05

    ciao

    scusa la mia ignoranza in materia
    ma perche' continui ad incasinarti prendendo il riferimento alla cella B1 quando quasta a sua volta e' un derivato da A1?????
    se prendi la cella A1 come riferimento eviteresti tanti se e tanti ma, o no???

    ciao


     
    Range("C1").Select
            ActiveCell.FormulaR1C1 = _
            "=TEXT(RC[-2]-(WEEKDAY(RC[-2])-1),""aaaa-mm-gg"")& "" TO "" &TEXT(RC[-2]+(7-WEEKDAY(RC[-2])),""aaaa-mm-gg"")"
        Range("D1").Select





  • Errore If
    di laj (utente non iscritto) data: 09/12/2014 16:47:51

    @Mister_x grazie mille!! mi hai semplificato la vita! Funziona...
    Grazie a tutti