Bài toán tạo lịch làm việc tại công trường! (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

lolo0011

Thành viên mới
Tham gia
18/10/11
Bài viết
48
Được thích
57
Xin các anh giúp em cách viết hàm giúp tìm ngày như file đính kèm!
 

File đính kèm

Tại B4:
Mã:
=INDEX(D4+ROW($1:$30)-1,MATCH(1,--ISERROR(MATCH(D4+ROW($1:$30)-1,$G$3:$G$7,0)),0))
Kết thúc bằng Ctrl-Shift-Enter
 
Tại B4:
Mã:
=INDEX(D4+ROW($1:$30)-1,MATCH(1,--ISERROR(MATCH(D4+ROW($1:$30)-1,$G$3:$G$7,0)),0))
Kết thúc bằng Ctrl-Shift-Enter
He, quả là cao thủ; vậy mà mình cứ tưởng phải viết bằng VBA mới chạy đựoc chứ.Bạn có thể giải thích ý nghĩa của hàm này cho minh hiểu thêm được không!
 
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 đủ
 
Một cách khác:
Mã:
=MIN(IF(ISNA(MATCH(ROW(INDIRECT(D4&":"&D4+100)),$G$3:$G$7,0)),ROW(INDIRECT(D4&":"&D4+100))))
Ctrl-Shift-Enter
 
hay quá! cảm ơn anh nhiều nhiều! Tiện thể anh giải thích giúp em cách thứ hai này được không!
 
Web KT

Bài viết mới nhất

Back
Top Bottom