Tính ngày công từ bảng phân ca

  • Thread starter ngvanduc
  • Ngày gửi
N

ngvanduc

Sơ cấp
8/10/10
6
0
0
55
ho chi minh city
Trong file có 2 sheet:BANGPHANCA và NGAYCONG
Nhờ Anh Chị tính giùm Ngày công từ Bảng phân ca, lưu ý ngày tính công từ ngày 26/11/2011 đến ngày 25/12/2011. Em muốn đáp số trong ô E9 và E10 là 1 là chính xác.
Các anh chị sử dụng hàm index, match, vlookup, hlookup, để em dễ hiểu. Cảm ơn nhiều!
 
Khóa học Quản trị dòng tiền
IChiNoVa

IChiNoVa

Phu cà phê
2/4/05
134
4
18
Sòn Gài
www.xommuaban.vn
Bạn dùng countif là đúng rồi mà.
Có lẽ bạn đang gặp khó khăn để kéo công thức từ trái sang phải và từ trên xuống dưới.
Do thiết kế ở 2 sheet khác nhau: 1 sheet, ngày được sếp theo hàng dọc, 1 sheet lại xếp theo hàng ngang nên bạn ko thể kéo công thức theo chiều ngang được.

Bạn chịu khó ctrl-C công thức ở sheet ngaycong và ctrl-V cho từng ngày từ 26 đến 25, sau đó mới kéo đồng loạt từ trên xuống cho tất cả nhân viên.

Bạn xem file att, mình vẫn giữ nguyên công thức của bạn, nhưng có thêm $ để khoá địa chỉ, để khi bạn kéo công thức xuống sẽ cho kết quả đúng.
Lưu ý chỉ đúng khi kéo công thức xuống, ko áp dụng cho kéo công thức chiều ngang vì cho kết quả sai.

Nếu bạn muốn công thức vừa kéo theo chiều ngang vừa kéo xuống được, thì bạn tìm hiểu thêm 1 số hàm để thay đổi địa chỉ tham chiếu trong công thức: address, indirect, Nhưng hơi rắc rối. Mình cũng ít khi dùng đến 2 hàm này.
 
N

ngvanduc

Sơ cấp
8/10/10
6
0
0
55
ho chi minh city
Nhưng mà bạn ơi, giả sử bảng phân ca mình phân ca tiếp cho năm 2012, trong khi đó range trong hàm countif thì lại cố định. Ở đây mình muốn nếu ngày trong sheet "NGAYCONG" thay đổi thì nó cũng update theo ngày trong sheet "BANGPHANCA". Bạn có thể giúp mình được khong?
 
IChiNoVa

IChiNoVa

Phu cà phê
2/4/05
134
4
18
Sòn Gài
www.xommuaban.vn
Cách đơn giản là bạn làm từng file cho mỗi năm, hàng tháng bạn chỉ sửa lại ngày ở cả 2 sheet là được vì sửa ngày cũng nhanh do ngày được xếp theo thứ tự.

Còn cách khác, bạn xem file att.
Cách này mình sử dụng hàm các indirect, address, column kết hợp với nhau như đã nói ở trên do đó bạn chỉ cần tạo công thức cho 1 ô và có thể kéo công thức cả theo chiều ngang lẫn chiều dọc.

Bạn muốn ngày trong bảng NGAYCONG có thể thay đổi, nghĩa là ngày công trong sheet NGAYCONG là chưa biết, bạn muốn tính ngày công bất kỳ mà bạn gõ vào sheet NGAYCONG.
ý tưởng công thức là: VD bạn muốn tính ngày công 28/11/2011 thì công thức sẽ dò tìm ngày 28/11 trong sheet BANGPHANCA, lấy vị trí dòng của nó trong BANGPHANCA, tiếp theo hàm countif sẽ tính tổng ngày công trong ngày đó.

Hàm mactch sẽ lấy vị trí dòng của ngày 28/11
Hàm column sẽ lấy vị trí cột: là vùng dữ liệu bạn muốn tính countif, nghĩa là bạn tính countif từ cột C đến cột AH
Kết hợp 2 hàm trên với hàm address: nó sẽ cho kết quả là chuỗi C28:AH28
Hàm indirect sẽ biến chuỗi trên thành địa chỉ tham chiếu, phục vụ cho hàm countif.
 
N

ngvanduc

Sơ cấp
8/10/10
6
0
0
55
ho chi minh city
Thật tuyệt vời! Cảm ơn IchiNoVa nhiều nhé! bởi vì mình gà lắm. Thank you so much.
 
IChiNoVa

IChiNoVa

Phu cà phê
2/4/05
134
4
18
Sòn Gài
www.xommuaban.vn
=COUNTIF(INDIRECT("BANGPHANCA!" & ADDRESS(MATCH(G$7,BANGPHANCA!$A:$A,0),COLUMN(BANGPHANCA!$C:$C)) & ":" & ADDRESS(MATCH(G$7,BANGPHANCA!$A:$A,0),COLUMN(BANGPHANCA!$AH:$AH))),$D10)


Nãy mình quên chưa lưu ý bạn chỗ này: trong công thức trên, bạn để ý hàm COLUMN(BANGPHANCA!$C:$C) và COLUMN(BANGPHANCA!$AH:$AH)

kết quả của 2 hàm này là 3, và 34. Bạn có thể gõ trực tiếp số 3, và 34 vào công thức trên, nhưng làm cho countif chỉ tính toán cố đinh từ cột C đến AH.
Công thức sẽ bị hạn chế, và có thể dẫn đến kết quả bị sai trong trường hợp bạn chèn thêm cột vào sheet BANGPHANCA trong vùng giữa cột C và AH, khi đó vùng tính toán được mở rộng ra, nhưng công thức countif lại chỉ tính trong vùng từ C->AH (do cố định tham số 3 và 34).

Nên bạn dùng hàm column để thay đối các tham số chủ động hơn (nếu bạn chèn thêm 1 cột vào vùng từ cột C->AH của sheet BANGPHANCA, thì 2 hàm column sẽ cho kết quả là 3 và 35, chứ ko phải là 3 và 34 nữa)

Trường hợp bạn xoá bớt các cột từ C->AH đi thì, công thức cũng sẽ thay đổi theo do dùng column và hoàn toàn ko bị lỗi.

Mình hay dùng hàm column và row để tránh các lỗi như trên và lỗi nữa là #NA khi xoá hay chèn dòng và cột rất hiệu quả.
 
N

ngvanduc

Sơ cấp
8/10/10
6
0
0
55
ho chi minh city
Mình hiểu rồi! Một lần nữa cảm ơn bạn nhiều. It's so very kind of you to help me this.
Chúc bạn thành công trong cuộc sống!
 
N

ngvanduc

Sơ cấp
8/10/10
6
0
0
55
ho chi minh city
Bạn IChinova ơi, cho làm phiền thêm 1 chút nhá
giả sử mình muốn kết quả sẽ là tên của nhân viên thay vì là 1 thì mình làm sao?
thử suy nghĩ giúp mình nhé! cảm ơn bạn
 
IChiNoVa

IChiNoVa

Phu cà phê
2/4/05
134
4
18
Sòn Gài
www.xommuaban.vn
Cái này thì sửa lại công thức chút thôi: nếu kết quả của countif >0 thì cho kết quả là $D9, còn ngược lại thì là rỗng.
Thêm hàm if bao ở ngoài công thức đã có là được:
=if(COUNTIF(...)>0,$D9,"")

Cụ thể:

=IF(COUNTIF(INDIRECT("BANGPHANCA!" & ADDRESS(MATCH(E$7,BANGPHANCA!$A:$A,0),COLUMN(BANGPHANCA!$C:$C)) & ":" & ADDRESS(MATCH(E$7,BANGPHANCA!$A:$A,0),COLUMN(BANGPHANCA!$AH:$AH))),$D9)>0,$D9,"")
 
Sửa lần cuối:
N

ngvanduc

Sơ cấp
8/10/10
6
0
0
55
ho chi minh city
Hi! lại làm phiền bạn nữa rồi. Nếu làm được thì tốt nếu không được thì mình làm file trên cũng được
Giả sử vào ngày 26/11/2011
Khi nhập tên sau vào sheet BANGPHANCA thì kết quả bên sheet NGAYCONG là như sau
Thắng -------------------> 1 nghĩa là 1 ngày công
Thắng-P ------------------> P nghĩa là nghỉ phép
Thắng-O ------------------> O nghĩa là nghỉ ốm
Thắng-B ------------------> B nghĩa là nghỉ bù
Thắng-H -------------------> H nghĩa là nghỉ để đi học
Đây chính là mục đích cuối cùng của mình khi lập bảng này, lúc đầu mình chỉ nghĩ có thể dựa trên công thức của bạn để làm tiếp. Nhưng khi mình làm thử chỉ được kết quả đúng ở 1 ô cell F5 trong NGAYCONG, nhưng khi copy vào bảng thì sai. Bạn có thể xem thử file đính kèm.
Nếu không được thì thôi bạn nhá. Cảm ơn nhiều!
 

Xem nhiều