hàm vlookup kết hợp (1 người xem)

Liên hệ QC

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

họcexcelnhanh1

Thành viên mới
Tham gia
12/10/20
Bài viết
2
Được thích
0
Chào các anh/chị, nhờ mọi người giúp đỡ em về bài tập Vlookup này với ạ, phần yêu cầu tìm đơn giá vì kết hợp thêm điều kiện tháng nên em hơi rối mong mọi người giúp đỡ ạ.
- dựa vào ký tự đầu và ký tự cuối mã hàng tra trong bảng dò và phụ thuộc vào tháng bán hàng.
 

File đính kèm

  • bailam.png
    bailam.png
    260.4 KB · Đọc: 9
Chào các anh/chị, nhờ mọi người giúp đỡ em về bài tập Vlookup này với ạ, phần yêu cầu tìm đơn giá vì kết hợp thêm điều kiện tháng nên em hơi rối mong mọi người giúp đỡ ạ.
- dựa vào ký tự đầu và ký tự cuối mã hàng tra trong bảng dò và phụ thuộc vào tháng bán hàng.
Rối hơn nữa là bạn gởi cái hình thì mọi người làm gì với nó?
 
Công thức ô D4:
PHP:
=VLOOKUP(LEFT(A4;2)&RIGHT(A4;1);$H$5:$N$10;MONTH(B4)+1;0)
Hoặc:
=HLOOKUP(MONTH(B4);$I$4:$N$10;MATCH(LEFT(A4;2)&RIGHT(A4;1);$H$4:$H$10;0))
Hoặc:
=INDEX($I$5:$N$10;MATCH(LEFT(A4;2)&RIGHT(A4;1);$H$5:$H$10;0);MONTH(B4))
----------------------------------------------------------
 
Lần chỉnh sửa cuối:
Đơn giá
Mã:
=VLOOKUP(LEFT(A4,2)&RIGHT(A4),$H$3:$N$10,MONTH(B4)+1,0)

Thành tiền:
Mã:
=C4*D4*(1+OR(MONTH(B4)=3,MONTH(B4)=4)*0.05)
 
Thành tiền:
Mã:
=C4*D4*(1+OR(MONTH(B4)=3;MONTH(B4)=4)*0,05)
Em cũng làm bài này xong rồi nhưng công thức hơi dài hơn của bác Ba Tê với của anh.
Em hỏi anh chỗ này. Công thức ở trên của anh ra kết quả đúng. Còn của em thì như kiểu thông thường (tất nhiên kết quả cũng đúng):
Mã:
=C4*IF(OR(MONTH(B4)=3;MONTH(B4)=4);D4*1,05;D4)

Em không hiểu cái logic trong công thức của anh á. Nó hoạt động suy luận có giống với công thức của em không? Em nhìn đơn giản sao mà hơi không hiểu. Tại anh không cần dùng đến hàm IF.
:oops:
 
Mã:
=C4*IF(OR(MONTH(B4)=3;MONTH(B4)=4);D4*1,05;D4)
Em không hiểu cái logic trong công thức của anh á. Nó hoạt động suy luận có giống với công thức của em không? Em nhìn đơn giản sao mà hơi không hiểu. Tại anh không cần dùng đến hàm IF.
Rút D4 ra ngoài làm thừa số chung
=C4*D4*
IF(OR(MONTH(B4)=3;MONTH(B4)=4);1,05;1)

Cái IF viết lại: =1+ k*0.5 với k=hàm OR
Nếu OR = true=>1+0.5
nếu OR = false=>1+0
 
Rút D4 ra ngoài làm thừa số chung
=C4*D4*
IF(OR(MONTH(B4)=3;MONTH(B4)=4);1,05;1)

Cái IF viết lại: =1+ k*0.5 với k=hàm OR
Nếu OR = true=>1+0.5
nếu OR = false=>1+0
Chèn đét. Đơn giản vậy mà phức tạp ghê. Anh rút 2 lần thừa số chung luôn. Với cả True nó là 1, False nó là 0 nữa, trong đây nó ẩn chứa luận lý của If luôn rồi, hay quá. Đều là 2 chỗ để em học và áp dụng trong tương lai. :D
Em hiểu rồi. Cảm ơn anh.
 
Em cũng làm bài này xong rồi nhưng công thức hơi dài hơn của bác Ba Tê với của anh.
Em hỏi anh chỗ này. Công thức ở trên của anh ra kết quả đúng. Còn của em thì như kiểu thông thường (tất nhiên kết quả cũng đúng):
Mã:
=C4*IF(OR(MONTH(B4)=3;MONTH(B4)=4);D4*1,05;D4)

Em không hiểu cái logic trong công thức của anh á. Nó hoạt động suy luận có giống với công thức của em không? Em nhìn đơn giản sao mà hơi không hiểu. Tại anh không cần dùng đến hàm IF.
...
Thực ra cách tính ấy nó chỉ trông hoành tráng và ngắn hơn vài ký tự thôi chứ về hiệu quả thì thua hàm IF.
Hàm IF có khả năng shortcut cho nên nếu điều kiện thoả thì nó bỏ qua chỗ còn lại.
IF(điều kiện, A, A*1.05) so với
A*(1+(điều kiện)*0.05)
Con toán trước chỉ gọi hàm IF để xét kết quả của lô gic. Nếu điều kiện True thì con toán trước chỉ tính A, tức là xét điều kiện xong thì lấy A được ngay.
Con toán sau luôn luôn tính tất cả biểu thức, tức là xét điều kiện xong, ép kiểu sang 0/1, nhân với 0.05, cộng 1 rồi nhân cho A. Con toán nhân số thực là con toán nặng ký.

Lưu ý: tôi tránh không phê phán cách tính ấy. Chỉ vì bạn nói câu "không cần dùng đến hàm IF" cho nên tôi tránh các bạn khác hiểu lầm là hàm IF không "ngon lành" bằng
 
Cảm ơn bác. Sẵn con hỏi cái này luôn:
Hàm IF có khả năng shortcut
Con hay thấy bác dùng 2 từ này: shortcut (như trường hợp hàm If trên) với từ volatile (hàm Offset). Bác cho con hỏi trong các ngữ cảnh bác đề cập tới thì 2 từ đó dịch ra tiếng Việt là gì? Và ý nghĩa của nó ra sao? 2 từ này có dùng trong trường hợp nào nữa không?
 
Con hay thấy bác dùng 2 từ này: shortcut (như trường hợp hàm If trên) với từ volatile (hàm Offset). Bác cho con hỏi trong các ngữ cảnh bác đề cập tới thì 2 từ đó dịch ra tiếng Việt là gì? Và ý nghĩa của nó ra sao? 2 từ này có dùng trong trường hợp nào nữa không?
Nếu phân tích ra 2 cách: Giả sử xét vế TRUE
IF(điều kiện, A, A*1.05), lấy luôn giá trị A
A*(1+(điều kiện)*0.05) lấy giá trị A trước sau đó xét *1 hay 1.05: Xét về lý thuyết về tốc độ thì chậm hơn, vì qua phép toán A*1
Tuy nhiên để cho gọn công thức mình hay chọn cách này. IF thì dễ hiểu hơn cho người mới dùng Excel.

Dùng từ "shortcut" là áo dụng cho IF: không cần xét đến vế (TRUE/FALSE)*0.05
Còn hàm volatile:
Giả sử ô A1=1
Ô A2=A1+1=2
Ô A3=OFFSET(B1,1,1) (= C2)
Thay gía trị A1=2 và Enter.
Bạn thấy kết quả hiện ra tại A2 là 3
Kết quả hầu như tức thời không nhận ra độ trễ. Nhưng thực ra, Excel phải thực hiện qua 2 bước: Tính toán lại ô A2, đồng thời tính lại kết quả OFFSET, mặc dù OFFSET không hề dính dáng đến sự thay đổi này.
Với nhiều hàm OFFSET, và bên trong hàm OFFSET có lồng ghép nhiều hàm phức tạp bên trong lên quan đến nhiều ô khác nhau, tốc độ có thể bị ảnh hưởng.
Tương tự như hàm NOW(),RAND(), TODAY() rõ ràng nó là volatile, vì mỗi khi cập nhật nó lại phải tính tóan lại
INDIRECT, CELL, INFO... cũng là volatile.
 
Cảm ơn bác. Sẵn con hỏi cái này luôn:

Con hay thấy bác dùng 2 từ này: shortcut (như trường hợp hàm If trên) với từ volatile (hàm Offset). Bác cho con hỏi trong các ngữ cảnh bác đề cập tới thì 2 từ đó dịch ra tiếng Việt là gì? Và ý nghĩa của nó ra sao? 2 từ này có dùng trong trường hợp nào nữa không?
Cách làm việc của logic shorcut có nghĩa à tới lô gic đủ xài rồi thì không cần tính tiếp. Đó là ý nghĩa của shortcut.
Không chỉ hàm IF có tính chất này, còn nhiều hàm khác, đặc biệt là AND vả OR.
AND(điều kiên 1, điều kiện 2, điều kiện 3). Nếu diều kiện 1 đã không thoả thì nó tự biết cả cụm không thoả và nó tự biết bỏ qua, không cần xét đến 2, 3. Nếu 1 thoả thì xét tiếp 2, nếu khong thoả thì bỏ qua 3.
Ngược lại, OR(điều kiên 1, điều kiện 2, điều kiện 3). Nếu 1 thoả thì nó không cần xét tiếp 2, 3.
Tôi có giải thích trường hợp ngoại lệ. Xem bài tôi bổ xung cho bài viết về hàm CHOOSE.

Cách làm việc của hàm volatile là "bất cứ có sự thay đổi nào trong workbook nó đều tính lại các ô có các hàm này". Vì vậy, khi dùng hàm này phải cẩn thận:
1. Nếu dùng nhiều quá, bạn sẽ thấy nó tính lại lâu bỏ bố.
2. Bạn cần xem lại kết quả cuối cùng. Nhất là khi kết quả có liên quan đến VBA.
 
Web KT

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

Back
Top Bottom