Desafío de fórmulas: convierta Y / N en días de la semana - Rompecabezas

Un lector veterano me envió un problema interesante la semana pasada. El objetivo es terminar con una cadena de texto como "MWF" para el lunes, miércoles y viernes. El problema es que los días de la semana se ingresan como abreviaturas sí / no como "NYNYNYN" para "MWF".

Desafío

¿Qué fórmula traducirá la "N" y la "Y" en abreviaturas de días de la semana como se muestra en la captura de pantalla anterior?

El libro de trabajo se adjunta a continuación. Publica tu respuesta en los comentarios.

Puntos extra por estilo y elegancia, pero las soluciones de caballo de batalla también están bien :)

Supuestos

  1. Todas las entradas tienen 7 caracteres y contienen solo "Y" o "N"
  2. Los días se asignan de domingo a sábado, SMTWTFS.
Respuesta (haga clic para expandir)

Opciones de solución: ¡spoilers!

Opción n. ° 1 - concatenación de fuerza bruta con la función MID, saltos de línea agregados para facilitar la lectura:

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

Esta sería una solución típica e ilustra muy bien cómo funciona la concatenación. Nota: puede utilizar saltos de línea dentro de la barra de fórmulas para facilitar la lectura de las fórmulas.

Opción # 2 - Función TEXTJOIN y MID:

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

Esta solución utiliza constantes de matriz para simplificar considerablemente la fórmula.

Nota: Jon Wittwer publicó una versión más sofisticada de esta fórmula en los comentarios a continuación, haciendo girar la constante de matriz usando FILA e INDIRECTO.

Opción # 3 - TEXTJOIN, MID y REPT:

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

Una versión * ligeramente * más compacta que usa REPT, aprovechando el hecho de que MID devolverá VERDADERO o FALSO para cada valor, y VERDADERO evaluará a 1 o cero dentro de REPT.

Articulos interesantes...