
Wieloletni czytelnik przesłał mi ciekawy problem w zeszłym tygodniu. Celem jest utworzenie ciągu tekstowego, takiego jak „MWF”, na poniedziałek, środę i piątek. Problem polega na tym, że dni tygodnia są wprowadzane jako skróty tak / nie, jak „NYNYNYN” dla „MWF”.
Wyzwanie
Jaka formuła przetłumaczy „N” i „Y” na skróty dni tygodnia, jak pokazano na powyższym zrzucie ekranu?
Skoroszyt jest załączony poniżej. Opublikuj swoją odpowiedź w komentarzach.
Dodatkowe punkty za styl i elegancję, ale rozwiązania dla koni roboczych też są w porządku :)
Założenia
- Wszystkie dane wejściowe mają 7 znaków i zawierają tylko „T” lub „N”
- Dni są mapowane od niedzieli do soboty, SMTWTFS.
Opcje rozwiązania - spojlery!
Opcja nr 1 - brutalna konkatenacja z funkcją MID, dodane podziały wierszy dla czytelności:
=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","")
Byłoby to typowe rozwiązanie i ładnie ilustruje, jak działa konkatenacja. Uwaga: możesz swobodnie używać podziałów wierszy na pasku formuły, aby ułatwić czytanie formuł.
Opcja nr 2 - funkcja TEXTJOIN i MID:
=TEXTJOIN("",TRUE,IF(MID(B5,(1,2,3,4,5,6,7),1)="N","",("S","M","T","W","T","F","S")))
To rozwiązanie wykorzystuje stałe tablicowe do uproszczenia formuły.
Uwaga: Jon Wittwer opublikował bardziej wyrafinowaną wersję tej formuły w komentarzach poniżej, obracając stałą tablicową za pomocą ROW i INDIRECT.
Opcja nr 3 - TEXTJOIN, MID i REPT:
=TEXTJOIN("",1,REPT(("S","M","T","W","T","F","S"),MID(B5,(1,2,3,4,5,6,7),1)="Y"))
* Nieco * bardziej zwarta wersja używająca REPT, wykorzystująca fakt, że MID zwróci TRUE lub FALSE dla każdej wartości, a TRUE da 1 lub zero wewnątrz REPT.