Khải Huyền
Thành viên mới

- Tham gia
- 28/2/20
- Bài viết
- 22
- Được thích
- 2
1/ Bạn nên gửi kèm file.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
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ì ạ?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ỉ ?
=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))
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á ạ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ì đó.
- Bạn xem thử 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ì ạ?
Tự kiểm tra lại, vì công thức đúng, nhập lại ngày K4 cho đúngem 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á ạ
Nếu tôi hiểu ý thì L5em 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
=SUM(INDEX(J15:J2000,MATCH(K4,B15:B2000,0)):INDEX(J15:J2000,IFERROR(MATCH(TRUE,B15:B2000>K4,0)-1,2000-14)))
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ỳ.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ì ạ?
em cảm ơn bác nhiều ạ, đúng như kết quả em cần luôn ạNếu tôi hiểu ý thì L5
kết thúc bằng Ctrl + Shift + EnterMã:=SUM(INDEX(J15:J2000,MATCH(K4,B15:B2000,0)):INDEX(J15:J2000,IFERROR(MATCH(TRUE,B15:B2000>K4,0)-1,2000-14)))
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 ạ, nhưng file này bị nhảy ngày tự động theo thời gian khi mở file lên rồi ạ- Bạn xem thử nhé.
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 ạ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
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 ạ?Nếu tôi hiểu ý thì L5
kết thúc bằng Ctrl + Shift + EnterMã:=SUM(INDEX(J15:J2000,MATCH(K4,B15:B2000,0)):INDEX(J15:J2000,IFERROR(MATCH(TRUE,B15:B2000>K4,0)-1,2000-14)))
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
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.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 ạ?
Công thức làm cho tập tin của bạn ở bài #3
=SUM(INDEX(J15:J2000,MATCH(K4,B15:B2000,0)):INDEX(J15:J2000,IFERROR(MATCH(TRUE,B15:B2000>K4,0)-1,ROWS(J15:J2000)))
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 ạ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.