Cabaran formula - menukar Y / N menjadi hari dalam seminggu - Teka-teki

Pembaca lama menghantar masalah menarik kepada saya minggu lalu. Tujuannya adalah berakhir dengan rentetan teks seperti "MWF" untuk hari Isnin, Rabu, Jumaat. Masalahnya ialah hari kerja dimasukkan sebagai singkatan ya / tidak seperti "NYNYNYN" untuk "MWF".

Cabaran

Apakah formula yang akan menerjemahkan singkatan "N" dan "Y" ke singkatan hari minggu seperti yang ditunjukkan dalam tangkapan skrin di atas?

Buku kerja dilampirkan di bawah. Hantarkan jawapan anda di komen.

Titik tambahan untuk gaya dan keanggunan, tetapi penyelesaian tenaga kerja juga baik :)

Andaian

  1. Semua input adalah 7 aksara dan hanya mengandungi "Y" atau "N"
  2. Hari dipetakan pada hari Ahad hingga Sabtu, SMTWTFS.
Jawapan (klik untuk mengembangkan)

Pilihan penyelesaian - spoiler!

Pilihan # 1 - gabungan kekuatan brute dengan fungsi MID, jeda baris ditambahkan untuk keterbacaan:

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

Ini akan menjadi penyelesaian biasa, dan dengan baik menggambarkan bagaimana penggabungan berfungsi. Catatan: anda bebas menggunakan jeda baris di dalam bar formula untuk membuat formula lebih mudah dibaca.

Pilihan # 2 - Fungsi TEXTJOIN dan MID:

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

Penyelesaian ini menggunakan pemalar larik untuk rumus dengan cukup.

Catatan: Jon Wittwer menyiarkan versi formula yang lebih canggih dalam komen di bawah, memutar pemalar larik menggunakan ROW dan INDIRECT.

Pilihan # 3 - TEXTJOIN, MID, dan REPT:

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

Versi * sedikit * lebih ringkas menggunakan REPT, memanfaatkan fakta bahawa MID akan mengembalikan TRUE atau FALSE untuk setiap nilai, dan TRUE akan dinilai menjadi 1 atau sifar di dalam REPT.

Artikel menarik...