Thử thách công thức - chuyển Y / N thành các ngày trong tuần - Câu đố

Một độc giả lâu năm đã gửi cho tôi một vấn đề thú vị trong tuần vừa qua. Mục tiêu là kết thúc bằng một chuỗi văn bản như "MWF" cho Thứ Hai, Thứ Tư, Thứ Sáu. Vấn đề là các ngày trong tuần được nhập dưới dạng có / không từ viết tắt như "NYNYNYN" cho "MWF".

Thử thách

Công thức nào sẽ dịch các chữ viết tắt "N" và "Y" thành các ngày trong tuần như trong ảnh chụp màn hình ở trên?

Sổ làm việc được đính kèm bên dưới. Đăng câu trả lời của bạn trong các bình luận.

Thêm điểm cho phong cách và sự sang trọng, nhưng các giải pháp workhorse cũng tốt :)

Giả định

  1. Tất cả các đầu vào là 7 ký tự và chỉ chứa "Y" hoặc "N"
  2. Các ngày được lập bản đồ từ Chủ Nhật đến Thứ Bảy, SMTWTFS.
Trả lời (bấm để mở rộng)

Các tùy chọn giải pháp - hư hỏng!

Tùy chọn # 1 - ghép nối brute force với hàm MID, các dấu ngắt dòng được thêm vào để dễ đọc:

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

Đây sẽ là một giải pháp điển hình và minh họa độc đáo cách hoạt động của nối. Lưu ý: bạn có thể tự do sử dụng dấu ngắt dòng bên trong thanh công thức để làm cho công thức dễ đọc hơn.

Tùy chọn # 2 - TEXTJOIN và chức năng MID:

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

Giải pháp này sử dụng hằng số mảng để đơn giản hóa công thức đáng kể.

Lưu ý: Jon Wittwer đã đăng một phiên bản phức tạp hơn của công thức này trong các nhận xét bên dưới, quay hằng số mảng bằng cách sử dụng ROW và INDIRECT.

Tùy chọn # 3 - TEXTJOIN, MID và REPT:

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

Một phiên bản nhỏ gọn hơn * một chút * sử dụng REPT, lợi dụng thực tế là MID sẽ trả về TRUE hoặc FALSE cho mỗi giá trị và TRUE sẽ đánh giá bằng 1 hoặc không bên trong REPT.

thú vị bài viết...