
Dolgoletni bralec mi je minuli teden poslal zanimivo težavo. Cilj je, da na koncu dobite besedilni niz, kot je "MWF" za ponedeljek, sredo, petek. Težava je v tem, da se delavniki vnesejo kot okrajšave da / ne, kot je "NYNYNYN" za "MWF".
Izziv
Katera formula bo prevedla "N" in "Y" v okrajšave v tednu, kot je prikazano na zgornjem posnetku zaslona?
Delovni zvezek je priložen spodaj. Odgovor objavite v komentarjih.
Dodatne točke za slog in eleganco, ampak tudi rešitve za delovne konje so v redu :)
Predpostavke
- Vsi vnosi imajo 7 znakov in vsebujejo samo "Y" ali "N"
- Dnevi so preslikani od nedelje do sobote, SMTWTFS.
Možnosti rešitve - spojlerji!
Možnost # 1 - združevanje surove sile s funkcijo MID, dodani so prelomi vrstic za berljivost:
=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","")
To bi bila tipična rešitev in lepo ponazarja, kako združevanje deluje. Opomba: za lažje branje formul lahko uporabite prelome vrstic znotraj vrstice s formulami.
Možnost # 2 - TEXTJOIN in MID funkcija:
=TEXTJOIN("",TRUE,IF(MID(B5,(1,2,3,4,5,6,7),1)="N","",("S","M","T","W","T","F","S")))
Ta rešitev uporablja konstante matrike, da precej preprosto poenostavi formulo.
Opomba: Jon Wittwer je v spodnjih komentarjih objavil bolj izpopolnjeno različico te formule in vrtil konstanto matrike z uporabo ROW in INDIRECT.
Možnost št. 3 - TEXTJOIN, MID in REPT:
=TEXTJOIN("",1,REPT(("S","M","T","W","T","F","S"),MID(B5,(1,2,3,4,5,6,7),1)="Y"))
* Nekoliko * bolj kompaktna različica z uporabo REPT, pri čemer izkoristi dejstvo, da bo MID vrnil TRUE ali FALSE za vsako vrednost, TRUE pa bo znotraj REPT ocenil na 1 ali nič.