em xin phép được hỏi là viết hàm như thế nào để khi nhập số ngày tháng năm sẽ tính tổng được của giá vốn của ngày đó (2 người xem)

Liên hệ QC

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

Khải Huyền

Thành viên mới
Tham gia
28/2/20
Bài viết
22
Được thích
2
em xin phép được hỏi là viết hàm như thế nào để khi nhập số ngày tháng năm sẽ tính tổng được của giá vốn của ngày đó ở bảng dưới ạ? vì em dùng sumifs nó chỉ ra được số liệu của dòng có ngày đó, mấy hàng sau không gõ lại ngày thì nó không tổng được ạ...
1.png
 
em xin phép được hỏi là viết hàm như thế nào để khi nhập số ngày tháng năm sẽ tính tổng được của giá vốn của ngày đó ở bảng dưới ạ? vì em dùng sumifs nó chỉ ra được số liệu của dòng có ngày đó, mấy hàng sau không gõ lại ngày thì nó không tổng được ạ...
View attachment 232708
1/ Bạn nên gửi kèm file.
2/ Nếu không nhập ngày thì sẽ căn cứ điều kiện nào để tính tổng nhỉ ?
 
1/ Bạn nên gửi kèm file.
2/ Nếu không nhập ngày thì sẽ căn cứ điều kiện nào để tính tổng nhỉ ?
như sheet SOQUY trong file dưới thì chỉ cần nhập ngày 1 row, cách nhiều row nhập tiếp, nhưng ở ô trên chỉ cần chọn ngày, giá trị trả ra sẽ đúng là tổng của ngày đó ( mặt dù mấy row sau nó trống ) em thắc mắc k biết dùng hàm gì ạ?
 

File đính kèm

hay hay người có thể chỉ giáo em viết code là ở column E15 trở xuống nhập tên thì column B15 sẽ tự động nhảy ngày theo ngày em nhập được không ạ?
 
Nếu vẫn muốn tính tổng thì công thức này
L5:
=SUM(OFFSET($J$14,MATCH($K$4,$B$15:$B$2000,0),0, LOOKUP(2, 1/(OFFSET($B$15, MATCH($K$4,$B$15:$B$2000,0),0):$B$2000>0),ROW($B$15:$B$2000))-14))

(chú ý: nếu gọi dòng cuối cùng của bảng là n, thì tại Bn+1 nên nhập một ký tự nào đó để đảm bảo công thức đúng)

Nhưng, không nên nhập số liệu kiểu này, thấy kiểu sao sao, hoặc là ngày đầy đủ cho các ô, hoặc là xem lại bố trí dữ liệu, nên có mã số theo ngày gì đó.
 
Nếu vẫn muốn tính tổng thì công thức này
L5:
=SUM(OFFSET($J$14,MATCH($K$4,$B$15:$B$2000,0),0, LOOKUP(2, 1/(OFFSET($B$15, MATCH($K$4,$B$15:$B$2000,0),0):$B$2000>0),ROW($B$15:$B$2000))-14))

(chú ý: nếu gọi dòng cuối cùng của bảng là n, thì tại Bn+1 nên nhập một ký tự nào đó để đảm bảo công thức đúng)

Nhưng, không nên nhập số liệu kiểu này, thấy kiểu sao sao, hoặc là ngày đầy đủ cho các ô, hoặc là xem lại bố trí dữ liệu, nên có mã số theo ngày gì đó.
em cảm ơn bác đã chỉ và góp ý, nhưng theo công thức của bác thì vẫn ra con số tổng hết, em thì lại đang cần tổng của 1 ngày mình chọn thôi ạ...vì thế nếu không viết hàm được thì có cao nhân nào chỉ em viết code nếu column nhập tên hàng thì column ngày sẽ tự nhảy ngày tháng theo hôm mình nhập được không ạ? vì doanh thu bán hàng 1 ngày hơn cả trăm hàng, nhập tay từng ô theo 1 ngày vất vả quá ạ
 
như sheet SOQUY trong file dưới thì chỉ cần nhập ngày 1 row, cách nhiều row nhập tiếp, nhưng ở ô trên chỉ cần chọn ngày, giá trị trả ra sẽ đúng là tổng của ngày đó ( mặt dù mấy row sau nó trống ) em thắc mắc k biết dùng hàm gì ạ?
- Bạn xem thử nhé.
 

File đính kèm

em cảm ơn bác đã chỉ và góp ý, nhưng theo công thức của bác thì vẫn ra con số tổng hết, em thì lại đang cần tổng của 1 ngày mình chọn thôi ạ...vì thế nếu không viết hàm được thì có cao nhân nào chỉ em viết code nếu column nhập tên hàng thì column ngày sẽ tự nhảy ngày tháng theo hôm mình nhập được không ạ? vì doanh thu bán hàng 1 ngày hơn cả trăm hàng, nhập tay từng ô theo 1 ngày vất vả quá ạ
Tự kiểm tra lại, vì công thức đúng, nhập lại ngày K4 cho đúng
 
em xin phép được hỏi là viết hàm như thế nào để khi nhập số ngày tháng năm sẽ tính tổng được của giá vốn của ngày đó ở bảng dưới ạ? vì em dùng sumifs nó chỉ ra được số liệu của dòng có ngày đó, mấy hàng sau không gõ lại ngày thì nó không tổng được ạ...
View attachment 232708
Nếu tôi hiểu ý thì L5
Mã:
=SUM(INDEX(J15:J2000,MATCH(K4,B15:B2000,0)):INDEX(J15:J2000,IFERROR(MATCH(TRUE,B15:B2000>K4,0)-1,2000-14)))
kết thúc bằng Ctrl + Shift + Enter

Tùy theo đặc thù công việc sửa 2000 thành số đủ lớn, vd. 3000 hoặc 500

Công thức làm cho tập tin của bạn ở bài #3
 
như sheet SOQUY trong file dưới thì chỉ cần nhập ngày 1 row, cách nhiều row nhập tiếp, nhưng ở ô trên chỉ cần chọn ngày, giá trị trả ra sẽ đúng là tổng của ngày đó ( mặt dù mấy row sau nó trống ) em thắc mắc k biết dùng hàm gì ạ?
Nếu dữ liệu của bạn có số dòng lớn hơn 1000 dòng, theo tôi bạn nên tạo cột phụ để tự động điền ngày, rồi chỉ cần dùng hàm SUMIF() là có thể cộng theo 1 ngày bất kỳ.
Ví dụ: bạn có thể tạo công thức sau vào sheet DT-day:
O15=IF(B15, B15,O14)
Copy xuống dưới. Xong bên sheet SO QUY bạn dùng:
=SUMIF('DT-day'!$O$15 :$O$2000, "ngày cần cộng tổng", 'DT-day'!$J$15), chỉ Enter là xong.

Thân
 
Nếu tôi hiểu ý thì L5
Mã:
=SUM(INDEX(J15:J2000,MATCH(K4,B15:B2000,0)):INDEX(J15:J2000,IFERROR(MATCH(TRUE,B15:B2000>K4,0)-1,2000-14)))
kết thúc bằng Ctrl + Shift + Enter

Tùy theo đặc thù công việc sửa 2000 thành số đủ lớn, vd. 3000 hoặc 500

Công thức làm cho tập tin của bạn ở bài #3
em cảm ơn bác nhiều ạ, đúng như kết quả em cần luôn ạ
Bài đã được tự động gộp:

em cảm ơn bác nhiều ạ, nhưng file này bị nhảy ngày tự động theo thời gian khi mở file lên rồi ạ
Bài đã được tự động gộp:

Nếu dữ liệu của bạn có số dòng lớn hơn 1000 dòng, theo tôi bạn nên tạo cột phụ để tự động điền ngày, rồi chỉ cần dùng hàm SUMIF() là có thể cộng theo 1 ngày bất kỳ.
Ví dụ: bạn có thể tạo công thức sau vào sheet DT-day:
O15=IF(B15, B15,O14)
Copy xuống dưới. Xong bên sheet SO QUY bạn dùng:
=SUMIF('DT-day'!$O$15 :$O$2000, "ngày cần cộng tổng", 'DT-day'!$J$15), chỉ Enter là xong.

Thân
cảm ơn bác nhiều ạ, bác giúp em giải quyết được cái không biết rồi ạ
 
Lần chỉnh sửa cuối:
Nếu tôi hiểu ý thì L5
Mã:
=SUM(INDEX(J15:J2000,MATCH(K4,B15:B2000,0)):INDEX(J15:J2000,IFERROR(MATCH(TRUE,B15:B2000>K4,0)-1,2000-14)))
kết thúc bằng Ctrl + Shift + Enter

Tùy theo đặc thù công việc sửa 2000 thành số đủ lớn, vd. 3000 hoặc 500

Công thức làm cho tập tin của bạn ở bài #3
bác ơi, chỉ giúp em với, sao ngày nào nhập cũng ra đúng ( so vs cách thủ công nhập từng ngày của em để dùng sumifs ) thì riêng ngày 03/03 là giá vốn bị sai là sao vậy ạ?
 

File đính kèm

bác ơi, chỉ giúp em với, sao ngày nào nhập cũng ra đúng ( so vs cách thủ công nhập từng ngày của em để dùng sumifs ) thì riêng ngày 03/03 là giá vốn bị sai là sao vậy ạ?
Do bạn chơi kiểu mỗi ngày chỉ nhập 1 lần ở cột B (bài #3), còn các dòng trống tiếp theo cho tới ngày khác thì cũng thuộc ngày ấy, nên để xác định các Giá Vốn cho ngày cuối cùng trong dữ liệu, tức ngày mà sau đó bạn sẽ không nhập ngày khác nữa, thì dữ liệu phải thỏa điều kiện là: Tất cả các dòng ở cột J bắt đầu từ dòng có ngày cuối cùng ở cột B xuống dưới là thuộc của ngày đó. Trong khi đó bạn có J847 = 74023746. Đó là giá vốn của ngày nào? Bởi B847 = rỗng. Có giá vốn ở J847 nhưng nó không thuộc ngày nào? Công thức SUMIFS của bạn không tính J847 = 74023746 do B847 rỗng, công thức của tôi tính cả J847 = 74023746. Đó là sự khác biệt. Nếu bạn nhập B847 = 2020-03-03 thì 2 công thức mới cho kết quả như nhau.

Tôi viết rất rõ
Công thức làm cho tập tin của bạn ở bài #3

Trong tập tin ở bài #3 mỗi ngày chỉ được ghi 1 lần (các dòng tiếp theo nếu cùng ngày thì sẽ rỗng). Trong tập tin ở bài #12 thì tất cả các ngày đều được liệt kê.

Tôi đã viết rõ như thế thì khi bạn liệt kê hết các ngày thì không dùng được công thức của tôi. Vì tôi viết rõ là nó dùng cho bài #3. Khi bạn đã liệt kê hết các ngày thì dùng SUMIF hoặc SUMIFS thôi.

Nếu ở bài #12 bạn xóa ở cột B các ô: B16:B109, B112:B202, B205:B302, B305:B398, B401:B512, B515:B624, B627:B742, B745:B846 để cho giống hệt bài #3 thì mới dùng công thức của tôi. Và lúc đó J847 = 74023746 cũng thuộc ngày 2020-03-03.

Nếu bạn vẫn sẽ dùng kiểu chỉ liệt kê 1 lần cho mỗi ngày thì hãy sửa công thức của tôi thành
Mã:
=SUM(INDEX(J15:J2000,MATCH(K4,B15:B2000,0)):INDEX(J15:J2000,IFERROR(MATCH(TRUE,B15:B2000>K4,0)-1,ROWS(J15:J2000)))

Tức chỉ có 1 thay đổi là thay 2000-14 bằng ROWS(J15:J2000). ROWS(J15:J2000) cũng chính là 2000-14 = 1986 thôi. Nhưng viết thế để dễ nhớ là khi thay đổi vùng thì phải nhớ thay đổi cả ROWS(J15:J2000). Tức ở bài #12 bạn có vùng J15:J20000 thì phải sửa trong công thức thành ROWS(J15:J20000)

Tóm lại có 2 khả năng:

1. Mỗi ngày chỉ nhập 1 lần ở cột B như bài #3 thì sử dụng công thức của tôi. Cần nhớ là ngày ở dòng sau phải > ngày ở dòng trước.

2. Tất cả các ngày đều được liệt kê như bài #12 thì dùng SUMIF thôi. Công thức của tôi là "xoay xở" khi bạn không liệt kê hết các ngày. Khi liệt kê hết các ngày thì SUMIF chứ "xoay xở" làm gì nữa bạn? Cực chẳng đã mới phải "xoay xở" chứ khi liệt kê hết các ngày thì chơi SUMIF thôi.
 
Lần chỉnh sửa cuối:
Do bạn chơi kiểu mỗi ngày chỉ nhập 1 lần ở cột B (bài #3), còn các dòng trống tiếp theo cho tới ngày khác thì cũng thuộc ngày ấy, nên để xác định các Giá Vốn cho ngày cuối cùng trong dữ liệu, tức ngày mà sau đó bạn sẽ không nhập ngày khác nữa, thì dữ liệu phải thỏa điều kiện là: Tất cả các dòng ở cột J bắt đầu từ dòng có ngày cuối cùng ở cột B xuống dưới là thuộc của ngày đó. Trong khi đó bạn có J847 = 74023746. Đó là giá vốn của ngày nào? Bởi B847 = rỗng. Có giá vốn ở J847 nhưng nó không thuộc ngày nào? Công thức SUMIFS của bạn không tính J847 = 74023746 do B847 rỗng, công thức của tôi tính cả J847 = 74023746. Đó là sự khác biệt. Nếu bạn nhập B847 = 2020-03-03 thì 2 công thức mới cho kết quả như nhau.

Tôi viết rất rõ


Trong tập tin ở bài #3 mỗi ngày chỉ được ghi 1 lần (các dòng tiếp theo nếu cùng ngày thì sẽ rỗng). Trong tập tin ở bài #12 thì tất cả các ngày đều được liệt kê.

Tôi đã viết rõ như thế thì khi bạn liệt kê hết các ngày thì không dùng được công thức của tôi. Vì tôi viết rõ là nó dùng cho bài #3. Khi bạn đã liệt kê hết các ngày thì dùng SUMIF hoặc SUMIFS thôi.

Nếu ở bài #12 bạn xóa ở cột B các ô: B16:B109, B112:B202, B205:B302, B305:B398, B401:B512, B515:B624, B627:B742, B745:B846 để cho giống hệt bài #3 thì mới dùng công thức của tôi. Và lúc đó J847 = 74023746 cũng thuộc ngày 2020-03-03.

Nếu bạn vẫn sẽ dùng kiểu chỉ liệt kê 1 lần cho mỗi ngày thì hãy sửa công thức của tôi thành
Mã:
=SUM(INDEX(J15:J2000,MATCH(K4,B15:B2000,0)):INDEX(J15:J2000,IFERROR(MATCH(TRUE,B15:B2000>K4,0)-1,ROWS(J15:J2000)))

Tức chỉ có 1 thay đổi là thay 2000-14 bằng ROWS(J15:J2000). ROWS(J15:J2000) cũng chính là 2000-14 = 1986 thôi. Nhưng viết thế để dễ nhớ là khi thay đổi vùng thì phải nhớ thay đổi cả ROWS(J15:J2000). Tức ở bài #12 bạn có vùng J15:J20000 thì phải sửa trong công thức thành ROWS(J15:J20000)

Tóm lại có 2 khả năng:

1. Mỗi ngày chỉ nhập 1 lần ở cột B như bài #3 thì sử dụng công thức của tôi. Cần nhớ là ngày ở dòng sau phải > ngày ở dòng trước.

2. Tất cả các ngày đều được liệt kê như bài #12 thì dùng SUMIF thôi. Công thức của tôi là "xoay xở" khi bạn không liệt kê hết các ngày. Khi liệt kê hết các ngày thì SUMIF chứ "xoay xở" làm gì nữa bạn? Cực chẳng đã mới phải "xoay xở" chứ khi liệt kê hết các ngày thì chơi SUMIF thôi.
dạ, em hiểu rồi ạ, do sai xót khi copy, cảm ơn bác nhiều ạ, do hàng nhiều quá, nhập từng ngày cực quá nên công thức của bác quá hay luôn ạ...còn vấn đề em nhập từng ngày do hôm qua để báo cáo ngay nên mới ngồi nhập vào ấy ạ...còn công thức của bác em dùng cho lâu dài ạ
 
Web KT

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

Back
Top Bottom