Vorrei creare un "date picker" multiplo, che all'occorrenza possa anche accogliere delle indicazioni come "ogni ultimo mercoledì del mese", per inviare una email ad esempio.
Ho provato a cercare una formula per individuare l'ultimo giorno (lunedì, martedì, mercoledì, giovedì, venerdì, sabato o domenica) in un mese.
Non ho trovato nulla di interessante e ho prodotto qualcosa. La formula può valere per "l'ultimo venerdì del mese", "il secondo mercoledì del mese", il quarto giovedì ecc.
Per "primo", "secondo", "terzo" e "quarto" occorre indicare in una cella 1, 2, 3, 4; per "ultimo", "penultimo", "terzultimo", "quartultimo" occorre indicare -1, -2, -3, -4
Il risultato si trova in un nuovo foglio "Weekdays" che ho aggiunto al calendario condiviso (che è in sola lettura ma può essere copiato):
https://docs.google.com/spreadsheets/d/1W1Z9JkUb58wDi8LRxS4XcrKcwWbTFWxmNxUq_cHx8BA/edit?usp=sharing
La formula ha bisogno di tre dati:
- E2 un giorno di un certo mese (nel formato data di Google Sheet)
- C5 il giorno della settimana desiderato (da 1 per domenica a 7 per sabato)
- C6 un valore di 1, 2, 3 o 4 oppure di -1, -2, -3, -4 (a significare primo, secondo... penultimo, terzultimo...
Il valore riportato è la data richiesta.
La formula è:
=(FINE.MESE(E2; (-1 + (C6 < 0))) + 1) + RESTO((C5 - GIORNO.SETTIMANA((FINE.MESE(E2; (-1 + (C6 < 0))) + 1))); 7) + (C6 * 7)
I comandi in inglese sono:
=(EOMONTH(E2; (-1 + (C6 < 0))) + 1) +
MOD((C5 - WEEKDAY((EOMONTH(E2; (-1 + (C6 < 0))) + 1))); 7) +
(C6 * 7
)
Se la variabile è negativa, si parte dal primo giorno del mese successivo e si trova il primo giorno del mese successivo, poi si sottrare un multiplo di 7 (7, 14, 21, 28).
Nella funzione FINE.MESE(), l'espressione (-1 + (C6 < 0)) genere -1 o 0. Vale -1 quando si cerca il primo, secondo... giorno del mese mentre vale 0 (mese corrente) quando si cerca l'ultimo, il penultimo... giorno del mese.
Nessun commento:
Posta un commento
NOTA: Attualmente i commenti sono moderati, vale a dire che non compariranno immediatamente. Questo mi consente sia eliminare eventuale spam sia di leggere i messaggi e eventualmente rispondere.