Xét ví dụ tại B5:
=INDEX(D5+ROW($1:$30)-1,MATCH(1,--ISERROR(MATCH(D5+ROW($1:$30)-1,$G$3:$G$7,0)),0))
Giả sử D5 = 15/03/2012
* D5+ROW($1:$30)-1 sẽ trả về 1 danh sách 30 ngày liên tiếp {15/3,16/3,17/3,...,13/4} (Gọi tắt là DS)
* Tìm từng ngày trong DS xem có trong với list ngày nghỉ hay không:
MATCH(DS,$G$3:$G$7,0) tạo ra 1 danh sách {1,2,3,#N/A,#N/A...} trong đó ứng với vị trí #N/A của những ngày không phải ngày nghỉ.
* Đánh dấu những ngày #N/A với số 1
--ISERROR(MATCH(DS,$G$3:$G$7,0))
* Tìm vị trí ngày đầu tiên không phải ngày nghỉ:
MATCH(1, --ISERROR(MATCH(DS,$G$3:$G$7,0)),0) trả về 4
* Tìm ngày tại vị trí thứ 4 trong DS
INDEX(DS,4)
Thay DS và 4 theo định nghĩa trên, ta có công thức đầy đủ