giorno settimana



  • giorno settimana
    di Textomb data: 31/07/2014 18:22:07

    Salve a tutti.
    dato un giorno della settimana, vorrei estrarre il suo relativo numero. Per es. Mercoledì = 3
    Esiste la funzione GIORNO.SETTIMANA ma, ha bisogno di una data come argomento (ovvero un numero seriale che rappresenta una data)
    Nel mio caso ho semplicemente il giorno della settimana (quindi non una data ma semplicemente una stringa con il nome del giorno della settimana)
    Per arrivare allo scopo ho scritto la UDF che trovate di seguito ma, mi piacerebbe evitare di usare codice.
    Senza ricorrere al codice un modo possibile è il seguente:
    CERCA.VERT(A1;{"Lunedì"1."Martedì"2."Mercoledì"3."Giovedì"4."Venerdì"5."Sabato"6."Domenica"7};2;FALSO)
    Ma anche questo metodo non mi piace molto.

    Infine vorrei evitare di utilizzare colonne di appoggio.

    Mi date qualche altra idea...?
    grazie mille.
     
    Option Explicit
    
    Public Function WD(d As String) As Byte
        Dim ArrW, i As Byte
        
            ArrW = Application.GetCustomListContents(2)
        
        For i = 1 To UBound(ArrW)
            If UCase(ArrW(i)) = UCase(d) Then WD = i
        Next
    
    End Function



  • di lepat (utente non iscritto) data: 31/07/2014 18:43:40

    perché non ti piace il cerca.vert ? mi sembra la soluzione più pulita



  • di Raffaele_53 (utente non iscritto) data: 31/07/2014 18:49:37

    Non capisco perchè non ti piace la formula (forse perchè con versioni differenti d'excel, funziona si/no)
    Alternativa il famoso SE -->=SE(A1="Lunedi";1;SE(A1="Martedi";2;SE(A1="Mercoledi";3;SE(A1="Giovedi";4;SE(A1="Venerdi";5;SE(A1="Sabato";6;7))))))



  • di Textomb data: 31/07/2014 18:49:42

    Si, forse hai ragione.
    Il fatto è che il giorno lo trovo scritto una volta con la prima lettera maiuscola e le altre minuscole. Un'altra volta tutte maiuscole. A volte tutte minuscole. Insomma ho estrema variabilità...
    Ecco perchè nella UDF trovi UCASE... così risolvo il problema.
    Ma nella formula del Cerca.Vert mi scoccia ripeterlo ad ogni occorrenza...
    Cercavo una formula più pulita (sempre se si trova...)



  • di Textomb data: 31/07/2014 18:54:12

    Ragazzi vi prego di scusarmi. Sarà perchè ormai non ne posso più.
    Ho notato che il Cerca.Vert non è case sensitive.
    Quindi funziona sempre anche se il nome del giorno della settimana è scritto in modi diversi...
    Pertanto resta, apparentemente, la formula più idonea al mio scopo.
    Resto comunque aperto a Vostre nuove soluzioni.



  • di Raffaele_53 (utente non iscritto) data: 31/07/2014 18:56:25

    Usa CERCA.VERT(MAIUSC(A1); e correggi la parte finale.....{"Lunedì"1."Martedì"2."Mercoledì"3."Giovedì"4."Venerdì"5."Sabato"6."Domenica"7};2;FALSO)



  • di gaetanopr data: 31/07/2014 19:09:38

    Puoi usare la funzione "CONFRONTA"
    Definisci una matrice e assegni un nome
    ad esempio NOME "Giorni" con la seguente matrice
    ={"Dom";"Lun";"Mar";"Mer";"Gio";"Ven";"Sab"}

    poi usi la seguente formula
     
    =CONFRONTA(A1;Giorni;0)-1



  • di gaetanopr data: 31/07/2014 19:13:30

    CORREGGO
    La matrice deve essere questa
    ={"Lun";"Mar";"Mer";"Gio";"Ven";"Sab";"Dom"}


     
    =CONFRONTA(A1;Giorni;0)



  • di Textomb data: 31/07/2014 19:23:57

    Bravo Gaetano. Facile. Ed è proprio per questo che mi piace.
    Ovviamente la matrice nel mio caso deve contenere il nome intero del giorno e non abbreviato ed ho verificato che CONFRONTA non è case sensitive. Quindi esattamente come serve a me.



  • di gaetanopr data: 31/07/2014 19:30:25

    Ciao Textomb,
    cit:"Ovviamente la matrice nel mio caso deve contenere il nome intero del giorno e non abbreviato"
    per adesso vado al risparmio