Formelutmaning - konvertera J / N till veckodagar Pussel

Innehållsförteckning

En långvarig läsare skickade mig ett intressant problem den senaste veckan. Målet är att sluta med en textsträng som "MWF" för måndag, onsdag, fredag. Problemet är att vardagarna matas in som ja / nej-förkortningar som "NYNYNYN" för "MWF".

Utmaning

Vilken formel översätter "N" och "Y" till förkortningar på vardagar som visas i skärmdumpen ovan?

Arbetsboken bifogas nedan. Lägg upp ditt svar i kommentarerna.

Extra poäng för stil och elegans, men arbetshästlösningar är också bra :)

Antaganden

  1. Alla ingångar är 7 tecken och innehåller endast "Y" eller "N"
  2. Dagarna kartläggs söndag till lördag, SMTWTFS.
Svar (klicka för att expandera)

Lösningsalternativ - spoilers!

Alternativ # 1 - brute force-sammankoppling med MID-funktionen, radbrytningar läggs till för läsbarhet:

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

Detta skulle vara en typisk lösning och illustrerar snyggt hur sammanfogning fungerar. Obs! Du kan använda radbrytningar i formelfältet för att göra formler lättare att läsa.

Alternativ # 2 - TEXTJOIN- och MID-funktion:

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

Denna lösning använder arraykonstanter för att helt enkelt formeln avsevärt.

Obs: Jon Wittwer publicerade en mer sofistikerad version av denna formel i kommentarerna nedan och spred upp arraykonstanten med ROW och INDIRECT.

Alternativ # 3 - TEXTJOIN, MID och REPT:

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

En * lite * mer kompakt version med REPT, som utnyttjar det faktum att MID kommer att returnera SANT eller FALSKT för varje värde, och SANT utvärderas till 1 eller noll inom REPT.

Intressanta artiklar...