Thử thách công thức - sự khác biệt so với lần nhập trước - Câu đố

Mục lục

Bối cảnh

Một vài tuần trước, tôi có một câu hỏi thú vị từ một độc giả về việc theo dõi cân nặng tăng hoặc giảm trong một bảng đơn giản.

Ý tưởng là nhập một trọng lượng mới mỗi ngày và tính toán sự khác biệt so với ngày hôm trước. Khi mỗi ngày có một mục nhập, công thức rất đơn giản:

Sự khác biệt được tính bằng một công thức như thế này, nhập vào D6 và sao chép xuống bảng:

=IF(C6"",C6-C5,"")

Tuy nhiên, khi bỏ lỡ một hoặc nhiều ngày, mọi thứ sẽ trở nên tồi tệ và kết quả được tính toán không có ý nghĩa:

Không, bạn đã không tăng 157 pound trong một ngày

Vấn đề là công thức sử dụng ô trống trong phép tính, ô này cho kết quả bằng không. Những gì chúng ta cần là một cách để xác định vị trí và sử dụng trọng lượng cuối cùng được ghi trong cột C.

Các thách thức

Công thức nào sẽ tính chênh lệch so với lần nhập cuối cùng, ngay cả khi ngày đã bị bỏ qua?

Kết quả mong muốn - sự khác biệt khi sử dụng mục nhập trước đó

Giả định

  1. Một công thức duy nhất được nhập vào D6 và sao chép xuống (tức là cùng một công thức trong tất cả các ô)
  2. Công thức phải xử lý một hoặc nhiều mục nhập trống trước đó
  3. Không được phép xóa các mục (hàng) trống
  4. Không có cột trợ giúp nào được phép

Lưu ý: một con đường rõ ràng là sử dụng công thức IF lồng nhau. Tôi không khuyến khích điều này, vì nó sẽ không mở rộng quy mô tốt để xử lý một số lượng mục trống liên tiếp không xác định.

Có một giải pháp? Để lại bình luận với công thức đề xuất của bạn bên dưới.

Tôi đã tự mình hack lại một công thức và tôi sẽ chia sẻ giải pháp của mình sau khi tôi cho những độc giả thông minh một chút thời gian để gửi công thức của riêng họ.

Tín dụng thêm

Tìm kiếm thêm thách thức? Đây là kết quả tương tự, với một định dạng số tùy chỉnh được áp dụng. Định dạng số là gì? Gợi ý: Tôi đã vuốt cái này từ Mike Alexander trên blog Bacon Bits của anh ấy.

Trả lời (bấm để mở rộng)

Có những giải pháp thực sự tốt được đề xuất dưới đây, bao gồm một giải pháp rất nhỏ gọn và trang nhã của Panagiotis Stathopoulos. Đối với bản ghi, tôi đã sử dụng LOOKUP và phạm vi mở rộng:

=IF(C6"",C6-LOOKUP(2,1/($C$5:C5""),$C$5:C5),"")

Cơ chế của LOOKUP cho loại vấn đề này được giải thích trong ví dụ này.

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