
Un lettore di lunga data mi ha inviato un problema interessante la scorsa settimana. L'obiettivo è di finire con una stringa di testo come "MWF" per lunedì, mercoledì e venerdì. Il problema è che i giorni della settimana vengono inseriti come abbreviazioni sì / no come "NYNYNYN" per "MWF".
Sfida
Quale formula tradurrà la "N" e la "Y" nelle abbreviazioni dei giorni feriali come mostrato nello screenshot qui sopra?
La cartella di lavoro è allegata di seguito. Pubblica la tua risposta nei commenti.
Punti extra per stile ed eleganza, ma vanno bene anche le soluzioni da lavoro :)
Presupposti
- Tutti gli input sono 7 caratteri e contengono solo "Y" o "N"
- I giorni vengono mappati dalla domenica al sabato, SMTWTFS.
Opzioni di soluzione - spoiler!
Opzione n. 1 : concatenazione della forza bruta con la funzione MID, interruzioni di riga aggiunte per la leggibilità:
=IF(MID(B5,1,1)="Y","S","")& IF(MID(B5,2,1)="Y","M","")& IF(MID(B5,3,1)="Y","T","")& IF(MID(B5,4,1)="Y","W","")& IF(MID(B5,5,1)="Y","T","")& IF(MID(B5,6,1)="Y","F","")& IF(MID(B5,7,1)="Y","S","")
Questa sarebbe una soluzione tipica e illustra bene come funziona la concatenazione. Nota: sei libero di utilizzare le interruzioni di riga all'interno della barra della formula per rendere le formule più facili da leggere.
Opzione n. 2 - TEXTJOIN e funzione MID:
=TEXTJOIN("",TRUE,IF(MID(B5,(1,2,3,4,5,6,7),1)="N","",("S","M","T","W","T","F","S")))
Questa soluzione utilizza le costanti di matrice per semplificare notevolmente la formula.
Nota: Jon Wittwer ha pubblicato una versione più sofisticata di questa formula nei commenti di seguito, aumentando la costante di matrice utilizzando ROW e INDIRECT.
Opzione n. 3 - TEXTJOIN, MID e REPT:
=TEXTJOIN("",1,REPT(("S","M","T","W","T","F","S"),MID(B5,(1,2,3,4,5,6,7),1)="Y"))
Una versione * leggermente * più compatta che utilizza REPT, sfruttando il fatto che MID restituirà TRUE o FALSE per ogni valore e TRUE restituirà 1 o zero all'interno di REPT.