Формула задачи - преобразование Д / Н в дни недели - Головоломка

На прошлой неделе давний читатель прислал мне интересную задачу. Цель состоит в том, чтобы получить текстовую строку типа «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.

Интересные статьи...