Formula challenge - converti Y / N in giorni della settimana - Puzzle

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

  1. Tutti gli input sono 7 caratteri e contengono solo "Y" o "N"
  2. I giorni vengono mappati dalla domenica al sabato, SMTWTFS.
Rispondi (fai clic per espandere)

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.

Articoli interessanti...