Utilizzo Funzione Se Tra Date

Anonimo
2015-06-17T21:53:42+00:00

buona sera

ho creato una formula usando IF ma sono più di 64 (75 condizioni) quindi non riesco ad applicarla

c'è un metodo per aggirare questo ostacolo?

il mio problema e riportare una data in una cella

se la cella A1 ha una data compresa tra lo 01-01-2015 e lo 05-01-2015 la cella A2 deve riportare 27-01-2015

se la cella A1 ha una data compresa tra lo 06-01-2015 e il 31-01-2015 la cella A2 deve riportare 27-02-2015

se sempre la cella A1 ha una data compresa tra lo 01-02-2015 e lo 05-02-2015 la cella A2 deve riportare 27-03-2015 e se invece sempre la cella A1 ha una data compresa tra lo 06-02-2015 e il 28-02-2015 la cella A2 deve riportare 27-03-2015

in pratica qualsiasi data io inserisca in A1 compresa tra 01 e 05 di ogni mese la cella A2 deve riportarmi il 27 dello stesso mese

se io inserisco qualsiasi altra data in A1 tra 06 e 28, 29, 30, 31 (dipende dai mesi) la cella A2 deve riportarmi il 27 del mese successivo

se qualche 27 cade di sabato allora la cella A2 deve riportare un giorno prima (per esempio il 27 giugno 2015 è sabato quindi la cella A2 deve riportare 26 giugno 2015) se è domenica la cella A2 deve riportare 2 giorni prima (esempio il 27 settembre 2015 è domenica quindi la cella A2 deve riportare 25 giugno 2015)

PS: uso excel 2010 in inglese

Grazie in anticipo per l'aiuto

Saluti

Stefano

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

11 risposte

Ordina per: Più utili
  1. Anonimo
    2015-06-18T05:19:03+00:00

    Ciao Canapone,

    È per me davvero un piacere contraccambiare i saluti! Seguo la tue formule con grande interesse.

    Ho usato una UDF a causa della lunghezza della formula, per facilità di uso e anche a causa della possibilità che delle condizioni addizionali potrebbero successivamente essere divulgate. Comunque, la tua formula dovrebbe andare benissimo!

    Alla prossima.

    ===

    Regards

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-06-18T05:07:25+00:00

    Ciao a tutti,

    ho letto che usi Excel 2010, provo con AGGREGA:

    =AGGREGA(14;6;DATA(ANNO(A2);MESE(A2)+(GIORNO(A2)>5);RIF.RIGA($25:$27))/(GIORNO.SETTIMANA(DATA(ANNO(A2);MESE(A2)+(GIORNO(A2)>5);RIF.RIGA($25:$27));2)<6);1)

    =AGGREGATE(14,6,DATE(YEAR(A2),MONTH(A2)+(DAY(A2)>5),ROW($25:$27))/(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+(DAY(A2)>5),ROW($25:$27)),2)<6),1)

    Saluti

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-06-18T04:48:34+00:00

    Saluto subito Norman,

    faccio una prova con una formula tradizionale, visto che sono a zero con il VBA

    =DATA(ANNO(A2);MESE(A2)+(GIORNO(A2)>5);27)-(GIORNO.SETTIMANA(DATA(ANNO(A2);MESE(A2)+(GIORNO(A2)>5);27))=7)-(GIORNO.SETTIMANA(DATA(ANNO(A2);MESE(A2)+(GIORNO(A2)>5);27))=1)*2

    Questa dovrebbe esserne la traduzione

    =DATE(YEAR(A2),MONTH(A2)+(DAY(A2)>5),27)-(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+(DAY(A2)>5),27))=7)-(WEEKDAY(DATE(YEAR(A2),MONTH(A2)+(DAY(A2)>5),27))=1)*2

    Spero sia d'aiuto


    refuso:  mese(a2) non mese(A1)

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-06-18T02:25:47+00:00

    Ciao Stefano,

    Più robusta sarebbe la seguente versione:

    '=========>>

    Option Explicit

    '--------->>

    Public Function MyDate(rCell As Range)

        Dim vVal As Variant

        Dim d As Long, m As Long, y As Long, iFactor As Long

        Dim dDate As Date

        vVal = rCell.Value

        If Not IsDate(vVal) Then

            GoTo XIT

        ElseIf Year(vVal) < Year(#1/1/1900#) Then

            GoTo XIT

        End If

        d = Day(vVal)

        m = Month(vVal)

        y = Year(vVal)

        If d = 27 Then

            Select Case Weekday(vVal)

            Case vbSaturday

                iFactor = 1

            Case vbSunday

                iFactor = 2

            End Select

        End If

        Select Case d

        Case Is > 5

            dDate = DateSerial(y, m + 1 + CBool(iFactor), 27 - iFactor)

        Case Else

            dDate = DateSerial(y, m, 27)

        End Select

        MyDate = dDate

        Exit Function

    XIT:

        MyDate = CVErr(xlErrNA)

    End Function

    '<<=========

    ===

    Regards

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2015-06-17T23:15:31+00:00

    Ciao Stefano,

    Potresti usare la seguente UDF (User-Defined Function = Funzione definita dall'utente):

    • Alt-F11 per aprire l'editor di VBA
    • Alt-IMper inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Function MyDate(rCell As Range)

        Dim vVal As Variant

        Dim d As Long, m As Long, y As Long, iFactor As Long

        Dim dDate As Date

        vVal = rCell.Value

        If Not IsDate(vVal) Then

            MyDate = CVErr(xlErrNA)

            Exit Function

        End If

        d = Day(vVal)

        m = Month(vVal)

        y = Year(vVal)

        If d = 27 Then

            Select Case Weekday(vVal)

            Case vbSaturday

                iFactor = 1

            Case vbSunday

                iFactor = 2

            End Select

        End If

        Select Case d

            Case Is > 5

                dDate = DateSerial(y, m + 1 + CBool(iFactor), 27 - iFactor)

            Case Else

            dDate = DateSerial(y, m, 27)

        End Select

        MyDate = dDate

    End Function

    '<<========= 

    Alt-Q per chiudere l'editor di VBA e tornare a Excel.

    Questa UDF verrebbe usata come le normali funzioni di Excel, ad esempio:

    =MyDate(A1)

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento