bài tâp về thời gian

Liên hệ QC

giot_nang_pha_le_910

Thành viên mới
Tham gia
6/9/11
Bài viết
17
Được thích
1
1. làm thế nào để biết tháng 1,2,…,5 có bao nhiêu ngày (kèm thuyết minh từng tháng nếu có)

2. Trong data validation,sẽ xổ danh sách từ A->Z. Lúc đó ta chỉ gõ ký tự đại diện thì sẽ chuyển đến dư liệu cần tìm không? Hiện tại khi mình gõ ký tự đại diện thì data validation mới xổ danh sách xuống có ký tự đại diện đó thôi. Trong trường hợp mình không gõ ký tự đại diện thì data validation trống trong khi đó mình muốn nó xổ hết danh sách lun
 

File đính kèm

Mình mới chỉ làm câu 1

Bằng macro sự kiện tại cột 'B'
 

File đính kèm

Có thể dùng công thức cho câu 1 như trong file đính kèm.
 

File đính kèm

Có hàm EOMONTH sao không lấy ra xài nhỉ:
H1=IF(G1="","",MIN($B$2,EOMONTH(G1,0)))
 
Giải thuật cho câu 1:

Đây là bài toán đại số tập hợp. Tìm các phần giao giữa một nhóm và nhiều nhóm khác.
Nhóm căn bản là "Ngày Đầu"-"Ngày Cuối", các nhóm cần giao là "tháng 1", "tháng 2", ... Như vậy ta có thể thấy các nhóm ở đây là loại nhóm có phần tử là trị nguyên liên tục.

Công thức tổng hợp rất dễ. Nếu ta nhóm căn bản có trị từ cbMin đến cbMax, và nhóm i có trị từ iMin đến iMax, thì số phần từ giao là:
MIN(cbMax, iMax) - MAX(cbMin, iMin) + 1 :: chỉ lấy trị dương

Đem vào đề bài này thì: cbMin = Ngày Đầu; cbMax = Ngày Cuối; cbMin = ngày đầu tháng; iMax = ngày cuối tháng

Công thức:

Tôi không ghi thuyết minh lẫn công thức vào file cho bạn vì đây là bài tập, làm như thế là khuyến khích bạn chẳng cần học hỏi gì cả, chỉ việc đem nguyên file nộp cho thầy/cô

Giả sử ngày bắt đầu là $A$2, và ngày cuối là $B$2

- Chọn một cell cố định nào đó, ví dụ $C$2, để tính năm (không làm cũng được nhưng làm thì công thức dễ ghi hơn): =YEAR($A$2)
- ghi số tháng (1,2,3,...) vào một range nào đó, ví dụ F1:F12
- ghi công thức tính vào range G1:G12

Công thức ở cell G1
= MAX( MIN(EOMONTH(DATE($C$2,1,1), $F1-1), $B$2) - MAX(DATE($C$2,$F1,1), $A$2) + 1, 0)
Nếu không có tính cell $C$2 thì thay bẳng YEAR($A$2)

DATE($C$2,1,1) = ngày đầu năm
DATE($C$2,$F1,1) = ngày đầu tháng cần tính
EOMONTH(DATE($C$2,1,1) = ngày cuối tháng cần tính
MIN(EOMONTH(DATE($C$2,1,1), $F1-1), $B$2) = chọn ngày nhỏ hơn giũa ngày cuối tháng và ngày kết thúc
MAX(DATE($C$2,$F1,1), $A$2) = chọn ngày lớn hơn giữa ngày đầu tháng và ngày bắt đầu
MAX( ..., 0) = chỉ lấy trị dương, trị âm coi như 0

Chú thích: chỉ áp dụng được trong vòng một năm. Nếu thời gian trải qua 2 năm (vd từ thàng 11 năm này sang thnags 3 năm sau) thì công thức cần chỉnh sửa nhiều.
 
Web KT

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

Back
Top Bottom