Formeludfordring - konverter J / N til ugedage - Gåde

Indholdsfortegnelse

En mangeårig læser sendte mig et interessant problem i den forløbne uge. Målet er at ende med en tekststreng som "MWF" til mandag, onsdag, fredag. Problemet er, at hverdage indtastes som ja / nej-forkortelser som "NYNYNYN" for "MWF".

Udfordring

Hvilken formel oversætter "N" og "Y" til forkortelser på hverdage som vist på skærmbilledet ovenfor?

Arbejdsmappen er vedhæftet nedenfor. Send dit svar i kommentarerne.

Ekstra point for stil og elegance, men arbejdshestløsninger er også fine :)

Antagelser

  1. Alle input er på 7 tegn og indeholder kun "Y" eller "N"
  2. Dage er kortlagt søndag til lørdag, SMTWTFS.
Svar (klik for at udvide)

Løsningsmuligheder - spoilere!

Mulighed nr. 1 - brute force-sammenkædning med MID-funktionen, linjeskift tilføjet for læsbarhed:

=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","")

Dette ville være en typisk løsning og illustrerer pænt, hvordan sammenkædning fungerer. Bemærk: du er fri til at bruge linjeskift inde i formellinjen for at gøre formler lettere at læse.

Mulighed nr. 2 - TEXTJOIN og MID-funktion:

=TEXTJOIN("",TRUE,IF(MID(B5,(1,2,3,4,5,6,7),1)="N","",("S","M","T","W","T","F","S")))

Denne løsning bruger arraykonstanter til simpelthen formlen betydeligt.

Bemærk: Jon Wittwer indsendte en mere sofistikeret version af denne formel i kommentarerne nedenfor og spandt op arraykonstanten ved hjælp af ROW og INDIRECT.

Mulighed nr. 3 - TEXTJOIN, MID og REPT:

=TEXTJOIN("",1,REPT(("S","M","T","W","T","F","S"),MID(B5,(1,2,3,4,5,6,7),1)="Y"))

En * lidt * mere kompakt version, der bruger REPT, idet man drager fordel af, at MID returnerer SAND eller FALSK for hver værdi, og SAND vurderes til 1 eller nul inden for REPT.

Interessante artikler...