Formelutfordring - konverter J / N til ukedager - Puslespill

Innholdsfortegnelse

En mangeårig leser sendte meg et interessant problem denne uken. Målet er å ende opp med en tekststreng som "MWF" for mandag, onsdag, fredag. Problemet er at ukedagene legges inn som ja / nei forkortelser som "NYNYNYN" for "MWF".

Utfordring

Hvilken formel vil oversette "N" og "Y" til forkortelser på ukedager som vist på skjermbildet ovenfor?

Arbeidsboken er vedlagt nedenfor. Legg ut svaret ditt i kommentarene.

Ekstra poeng for stil og eleganse, men arbeidshestløsninger er også fine :)

Antagelser

  1. Alle innganger er på 7 tegn og inneholder bare "Y" eller "N"
  2. Dagene er kartlagt søndag til lørdag, SMTWTFS.
Svar (klikk for å utvide)

Løsningsmuligheter - spoilere!

Alternativ # 1 - brute force concatenation med MID-funksjonen, linjeskift lagt til for lesbarhet:

=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 vil være en typisk løsning, og illustrerer pent hvordan sammenkobling fungerer. Merk: Du kan bruke linjeskift inne i formellinjen for å gjøre det lettere å lese formler.

Alternativ # 2 - TEXTJOIN og MID-funksjon:

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

Denne løsningen bruker matrisekonstanter til ganske enkelt formelen betraktelig.

Merk: Jon Wittwer la ut en mer sofistikert versjon av denne formelen i kommentarene nedenfor, og spredte opp arraykonstanten ved hjelp av ROW og INDIRECT.

Alternativ # 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 * litt * mer kompakt versjon som bruker REPT, og utnytter det faktum at MID vil returnere SANT eller FALSK for hver verdi, og SANT vil evaluere til 1 eller null inne i REPT.

Interessante artikler...