Задача формули - перетворити Y / N на дні тижня - Головоломка

Минулого тижня багаторічний читач надіслав мені цікаву проблему. Мета - закінчити текстовим рядком на зразок "MWF" для понеділка, середи, п'ятниці. Проблема полягає в тому, що будні вводяться як так / ні скорочення, як "NYNYNYN" для "MWF".

Виклик

Яка формула переведе "N" і "Y" у абревіатури робочого дня, як показано на скріншоті вище?

Книга додається нижче. Опублікуйте свою відповідь у коментарях.

Додаткові бали для стилю та елегантності, але рішення з робочим конем теж прекрасні :)

Припущення

  1. Усі входи мають 7 символів і містять лише "Y" або "N"
  2. Дні відображаються з неділі по суботу, SMTWTFS.
Відповідь (натисніть, щоб розгорнути)

Варіанти рішення - спойлери!

Варіант №1 - об’єднання грубої сили за допомогою функції MID, додані розриви рядків для читабельності:

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

Це було б типовим рішенням і чудово ілюструє, як працює конкатенація. Примітка: ви можете використовувати розриви рядків всередині рядка формул, щоб полегшити читання формул.

Варіант №2 - функція TEXTJOIN та MID:

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

Це рішення використовує константи масиву, щоб просто формулу значно.

Примітка: Джон Вітвер ​​опублікував більш досконалу версію цієї формули в коментарях нижче, обертаючи константу масиву, використовуючи ROW та INDIRECT.

Варіант №3 - TEXTJOIN, MID і REPT:

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

* Трохи * більш компактна версія з використанням REPT, використовуючи той факт, що MID повертає TRUE або FALSE для кожного значення, а TRUE буде оцінюватися як 1 або нуль всередині REPT.

Цікаві статті...