trananhtuan281914
Thành viên hoạt động



- Tham gia
- 18/3/20
- Bài viết
- 153
- Được thích
- 37
Công thức ô D4:Chào anh/chị.
Anh chị hướng dẫn giúp em tìm dữ liệu để cho ra kế quả như file đính kèm.
Em cảm ơn.
VLOOKUP(C4;OFFSET($H$3:$I$3;MATCH(B4;$G$4:$G$14;0);;COUNTIF($G$3:$G$14;B4));2;1)
=IFERROR(VLOOKUP(C4;OFFSET($H$3:$I$3;MATCH(B4;$G$4:$G$14;0);;COUNTIF($G$3:$G$14;B4));2;1);10)
Mình có cách nào để xử lý mã hàng B cho đúng không anh, vì em có nhiều mã hàng như B giá cũng khác.Công thức ô D4:
Cách 1: Thay H7=1
Cách 2: Chỉ dùng cho dữ liệu này với H7=600PHP:VLOOKUP(C4;OFFSET($H$3:$I$3;MATCH(B4;$G$4:$G$14;0);;COUNTIF($G$3:$G$14;B4));2;1)
PHP:=IFERROR(VLOOKUP(C4;OFFSET($H$3:$I$3;MATCH(B4;$G$4:$G$14;0);;COUNTIF($G$3:$G$14;B4));2;1);10)
B 600 là mức tối thiểu, thực chất là 1 đến 1 999 sẽ là giá 10B với mức SL tối thiểu để bán =600, chưa hiểu 599 lại có giá bán là 10?
Làm theo kết quả mong muốn tại cột E.
D4:
=IFERROR(LOOKUP(2,1/($G$4:$G$14=B4)/($H$4:$H$14<=C4),$I$4:$I$14),$I$7)
Cố định giá sản phẩm B, những sản phẩm khác tương tự B sẽ không đúng anh.B với mức SL tối thiểu để bán =600, chưa hiểu 599 lại có giá bán là 10?
Làm theo kết quả mong muốn tại cột E.
D4:
=IFERROR(LOOKUP(2,1/($G$4:$G$14=B4)/($H$4:$H$14<=C4),$I$4:$I$14),$I$7)
Chơi như vầy mới vui:B 600 là mức tối thiểu, thực chất là 1 đến 1 999 sẽ là giá 10
D4=LOOKUP(C4,TEXT($H$4:$H$14,"0;;\1")^(MATCH($G$4:$G$14,$G$4:$G$14,)<>ROW($1:$11))/(B4=$G$4:$G$14),$I$4:$I$14)
Xem cái hàm anh viết, em thấy rối rắm quá...hỏng vui anh. Có cách nào diễn đạt cho gần gủi và dễ hiểu hông anh.Chơi như vầy mới vui:
Mã:D4=LOOKUP(C4,TEXT($H$4:$H$14,"0;;\1")^(MATCH($G$4:$G$14,$G$4:$G$14,)<>ROW($1:$11))/(B4=$G$4:$G$14),$I$4:$I$14)
Thân
Dễ mà! Muốn 'hỏng' thì 'hỏng':Xem cái hàm anh viết, em thấy rối rắm quá...hỏng vui anh. Có cách nào diễn đạt cho gần gủi và dễ hiểu hông anh.
D4=LOOKUP(C4,IF(MATCH($G$4:$G$14,$G$4:$G$14,)<>ROW($1:$100),$H$4:$H$14,1)/(B4=$G$4:$G$14),$I$4:$I$14)
Sản phẩm E các mức giá ngược lại, kết quả không đúng anh.Dễ mà! Muốn 'hỏng' thì 'hỏng':
kết thúc bằng Ctrl+Shift+Enter. Fill xuống.Mã:D4=LOOKUP(C4,IF(MATCH($G$4:$G$14,$G$4:$G$14,)<>ROW($1:$100),$H$4:$H$14,1)/(B4=$G$4:$G$14),$I$4:$I$14)
Thân
Tôi đã bảo bạn rồi: "công thức không lỗi, chỉ có tư duy người ra lệnh bị lỗi", nhìn vào bảng ai cũng sẽ trả lời với bạn là chỉ cần 'sort' bảng dữ liệu lại là xong ngay thôi! là kiến thức sơ đẳng thôi mà!Sản phẩm E các mức giá ngược lại, kết quả không đúng anh.
D4=LOOKUP(C4,TEXT(AGGREGATE(15,6,$H$4:$H$18/(B4=$G$4:$G$18),ROW($1:$20)),"0;;\1")^SIGN(ROW($1:$20)-1),MOD(AGGREGATE(15,6,$H$4:$H$18*10^6+$I$4:$I$18/(B4=$G$4:$G$18),ROW($1:$20)),10^6))
Nào dám chơi dị hay thách thức anh, Em chỉ muốn tìm một giải pháp cho 1 giả định thiếu logic. Cảm ơn anh.Tôi đã bảo bạn rồi: "công thức không lỗi, chỉ có tư duy người ra lệnh bị lỗi", nhìn vào bảng ai cũng sẽ trả lời với bạn là chỉ cần 'sort' bảng dữ liệu lại là xong ngay thôi! là kiến thức sơ đẳng thôi mà!
Nhưng nếu bạn muốn "chơi kỳ"! để thách thức, thì tôi cũng sẽ "chơi dị" lại với bạn, và chỉ đến đây thôi không còn thêm "giải thích" hoặc "cách gần gũi" ...gì gì khác nữa. Vậy hén!
Chỉ Enter. Fill xuống.Mã:D4=LOOKUP(C4,TEXT(AGGREGATE(15,6,$H$4:$H$18/(B4=$G$4:$G$18),ROW($1:$20)),"0;;\1")^SIGN(ROW($1:$20)-1),MOD(AGGREGATE(15,6,$H$4:$H$18*10^6+$I$4:$I$18/(B4=$G$4:$G$18),ROW($1:$20)),10^6))
Thân
Em có thêm một điều kiện khách hàng để dò tìm, kết quả là fail. Anh chị xem giúp em.Dễ mà! Muốn 'hỏng' thì 'hỏng':
kết thúc bằng Ctrl+Shift+Enter. Fill xuống.Mã:D4=LOOKUP(C4,IF(MATCH($G$4:$G$14,$G$4:$G$14,)<>ROW($1:$100),$H$4:$H$14,1)/(B4=$G$4:$G$14),$I$4:$I$14)
Thân
Kết quả ra không đúng là do:Em có thêm một điều kiện khách hàng để dò tìm, kết quả là fail. Anh chị xem giúp em.
Bạn đọc câu điều kiện như thế nào thì lập công thức như thế đó:Em bổ sung thêm điều kiện ngày áp dụng cho bảng giá, kết quả fail anh. Em làm như sau, anh xem hướng dẫn dùm em. Cảm ơn anh.
=LOOKUP($K3,IF(MATCH(BangGia!$D$2:$D$40,BangGia!$D$2:$D$40,)<>ROW($1:$100),BangGia!$H$2:$H$40,1)/($J3=BangGia!$J$2:$J$40)/($E3=BangGia!$D$2:$D$40)/($C3=BangGia!$B$2:$B$40),BangGia!$I$2:$I$40)
=LOOKUP($K3,IF(MATCH(BangGia!$D$2:$D$40,BangGia!$D$2:$D$40,)<>ROW($1:$100),BangGia!$H$2:$H$40,1)/($J3>=BangGia!$J$2:$J$40)/($E3=BangGia!$D$2:$D$40)/($C3=BangGia!$B$2:$B$40),BangGia!$I$2:$I$40)Bạn đọc câu điều kiện như thế nào thì lập công thức như thế đó:
Thân
- "Phải chọn 'Giá' từ 'Ngày áp dụng "trở đi".
- Bạn lập điều kiện với dấu "=" mang ý phải đúng y ngày đó ($J3=BangGia!$J$2:$J$40), thì công thức báo lỗi không tìm ra kết quả là chính xác rồi.
Tôi đọc bài của bạn từ đầu đến giờ ;góp ý với bạnEm đã điều chỉnh lại như sau:
=LOOKUP($K3,IF(MATCH(BangGia!$D$2:$D$40,BangGia!$D$2:$D$40,)<>ROW($1:$100),BangGia!$H$2:$H$40,1)/($E3=BangGia!$D$2:$D$40)/($C3=BangGia!$B$2:$B$40),BangGia!$I$2:$I$40)
Kết quả đúng rồi anh.
Em bổ sung thêm điều kiện ngày áp dụng cho bảng giá, kết quả fail anh. Em làm như sau, anh xem hướng dẫn dùm em. Cảm ơn anh.
=LOOKUP($K3,IF(MATCH(BangGia!$D$2:$D$40,BangGia!$D$2:$D$40,)<>ROW($1:$100),BangGia!$H$2:$H$40,1)/($J3=BangGia!$J$2:$J$40)/($E3=BangGia!$D$2:$D$40)/($C3=BangGia!$B$2:$B$40),BangGia!$I$2:$I$40)
Em cảm ơn góp ý của anh/chị xin ghi nhận, Thực sự tại một thời điểm em cũng chưa nghĩ ra hết và excel của em cũng hữu hạn ạ, trong ứng dụng em mới thấy phát sinh nhiều vấn đề nên em mới trao đổi. Nên cũng hơi "Xoắn" anh/chị.Tôi đọc bài của bạn từ đầu đến giờ ;góp ý với bạn
Theo mình Bạn nên đưa ra hết các điều kiện theo thực tế bạn cần xử lý, tránh mỗi lần lại són ra 1 điều kiện kiểu ...dắt, làm như vậy tốn thời gian của mọi người.
Em chưa hiểu công thức của anh, nhờ anh giải thích thêm ạ!Bạn đọc câu điều kiện như thế nào thì lập công thức như thế đó:
Thân
- "Phải chọn 'Giá' từ 'Ngày áp dụng "trở đi".
- Bạn lập điều kiện với dấu "=" mang ý phải đúng y ngày đó ($J3=BangGia!$J$2:$J$40), thì công thức báo lỗi không tìm ra kết quả là chính xác rồi.
Yêu cầu của chủ thớt là "Truy tìm Giá bán của Mã hàng tùy thuộc theo: Mã Khách hàng, Mức số lượng bán và Ngày áp dụng". Do chủ thớt hỏi rãi rác như bạn đã góp ý bài trên, và tự mình áp dụng các công thức vào bài thực tế cuối cùng, cho nên khi tôi nhìn lại công thức mới thấy chưa chính xác, đúng ra nó phải như dưới đây:Em chưa hiểu công thức của anh, nhờ anh giải thích thêm ạ!
Về tổng quát chung em thấy hình như nó là 1 biến thể "lambda" của Lookup (2;1/( mảng các điều kiện 1)/ (mảng điều kiện n); mảng kết quả)
Nhưng khi đi vào chi tiết công thức, em chưa hiểu cái khúc bôi đỏ này
=LOOKUP($K3;IF(MATCH(BangGia!$D$2:$D$32;BangGia!$D$2:$D$32;0)<>ROW($1:$100);BangGia!$H$2:$H$32;1)/..........
* đoạn MATCH(BangGia!$D$2:$D$32;BangGia!$D$2:$D$32;0)<>ROW($1:$100) : có phải là nó sẽ ra {0;0;0;0;0;0;0;0....1;1;1} để làm gì vậy anh?
Rất Mong anh giải thích thêm về công thức này
Cảm ơn anh
O3=LOOKUP($K3,IF(MATCH(BangGia!$J$2:$J$40&BangGia!$D$2:$D$40,IF(($E3=BangGia!$D$2:$D$40)*($C3=BangGia!$B$2:$B$40),BangGia!$J$2:$J$40&BangGia!$D$2:$D$40),)<>ROW($1:$100),BangGia!$H$2:$H$40,1)/($E3=BangGia!$D$2:$D$40)/($C3=BangGia!$B$2:$B$40)/($J3>=BangGia!$J$2:$J$40),BangGia!$I$2:$I$40)
Khi xem lại bài viết của anh ứng dụng rất hiệu quả cho công việc của em, cảm ơn anh rất nhiều.Yêu cầu của chủ thớt là "Truy tìm Giá bán của Mã hàng tùy thuộc theo: Mã Khách hàng, Mức số lượng bán và Ngày áp dụng". Do chủ thớt hỏi rãi rác như bạn đã góp ý bài trên, và tự mình áp dụng các công thức vào bài thực tế cuối cùng, cho nên khi tôi nhìn lại công thức mới thấy chưa chính xác, đúng ra nó phải như dưới đây:
Kết thúc bằng Ctrl+Shift+Enter, fill xuống.Mã:O3=LOOKUP($K3,IF(MATCH(BangGia!$J$2:$J$40&BangGia!$D$2:$D$40,IF(($E3=BangGia!$D$2:$D$40)*($C3=BangGia!$B$2:$B$40),BangGia!$J$2:$J$40&BangGia!$D$2:$D$40),)<>ROW($1:$100),BangGia!$H$2:$H$40,1)/($E3=BangGia!$D$2:$D$40)/($C3=BangGia!$B$2:$B$40)/($J3>=BangGia!$J$2:$J$40),BangGia!$I$2:$I$40)
Vậy công thức bạn hỏi phải là:
IF( MATCH( BangGia!$J$2:$J$40&BangGia!$D$2:$D$40, IF(($E3=BangGia!$D$2:$D$40)*($C3=BangGia!$B$2:$B$40), BangGia!$J$2:$J$40&BangGia!$D$2:$D$40) , ) <> ROW($1:$100),BangGia!$H$2:$H$40,1)
Công thức đó thực hiện biến đổi "Mức Số lượng bán - Cột H sheet 'Banggia'", dòng dữ liệu đầu tiên của từng mã hàng về số 1 dù nó đang có giá trị là bao nhiêu:
Tôi lấy ví dụ trong file đính kèm, công thức tại ô O40:
IF( MATCH( BangGia!$J$2:$J$40&BangGia!$D$2:$D$40, IF(($E40=BangGia!$D$2:$D$40)*($C40=BangGia!$B$2:$B$40), BangGia!$J$2:$J$40&BangGia!$D$2:$D$40) , ) <> ROW($1:$100),BangGia!$H$2:$H$40,1)
Kết quả Giá bán tại ô O40 là 27.000 vì "Ngày đơn hàng" là 02/08/2021 phải theo ngày áp dụng mới từ ngày 01/08/2021.
- Lẽ ra công thức chỉ đơn giản là so khớp bằng công thức:
- MATCH(BangGia!$J$2:$J$40&BangGia!$D$2:$D$40, BangGia!$J$2:$J$40&BangGia!$D$2:$D$40 ,0 ): trả về kết quả là số vị trí dòng của từng mã hàng mà nó tìm thấy đầu tiên. Phải ghép 2 cột "Ngày áp dụng" và "Mã SP" vì theo yêu cầu của chủ thớt Mã hàng sẽ áp dụng có nhiều Ngày tương thích.
- Vd: (Xem công thức cột AA "TM1") mã SP 2 có tại 4 ô (S5, S6, S35, S36) tương ứng với số thứ tự của nó là: 2, 3, 32, 33. Số thứ tự 2 và 3 có chung ngày áp dụng 20/03/2021, nên khi so khớp nó lấy stt: 2 là dòng đầu tiên của SP2 với ngày áp dụng 20/03/2021; Số thứ tự 32 và 33 có chung ngày áp dụng là 01/08/2021, nên khi so khớp nó lấy stt: 32 là dòng đầu tiên của SP2 với ngày áp dụng 01/08/2021.
- Tuy nhiên Giá bán còn phụ thuộc vào "Khách hàng" và "Mã hàng" dành cho khách đó nên phải đặt thêm điều kiện: ($E40=BangGia!$D$2:$D$40)*($C40=BangGia!$B$2:$B$40), nếu thỏa mới cho thể hiện "Ngày áp dụng" và "Mã SP", nên công thức thành:
- "CT So khớp"= MATCH( BangGia!$J$2:$J$40&BangGia!$D$2:$D$40, IF( ($E40=BangGia!$D$2:$D$40)*($C40=BangGia!$B$2:$B$40), BangGia!$J$2:$J$40&BangGia!$D$2:$D$40) , 0 )
- Vd: (Xem công thức cột U "So khớp") bạn chỉ còn thấy nó ra kết quả tại 4 dòng mà thôi.
- Công thức còn lại là:
- IF( "CT So khớp" <> ROW($1:$100), BangGia!$H$2:$H$40, 1 )
- Nếu kết quả thứ tự dòng từ so khớp "khác" với thứ tự dòng liên tục (Xem cột W) : Nếu Đúng thì lấy giá trị cột H, Nếu Sai thì đổi thành 1. (Xem cột X).
Thân