Cần hỗ trợ rút gọn bớt đối số hàm IF

Liên hệ QC

teechang306

Thành viên mới
Tham gia
17/8/17
Bài viết
16
Được thích
4
Giới tính
Nữ
Chào mọi người, mình cần phân loại đơn giá cho từng dòng lấy dữ liệu từ một Bảng giá đã được lập sẵn
Mình đang sử dụng hàm IF, kết hợp index, match và hàm or. Nhưng đối số hàm if quá nhiều, làm lâu dần file quá nặng, xử lý chậm. Mình mong người giúp đỡ mình cách xử lý ô công thức ở cột Q ( đơn giá), có hàm nào khác có thể rút gọn hơn không hay có phương pháp nào khác không.
Mình cảm ơn mọi người.
 

File đính kèm

Thứ nhất: Bạn có 160 đầu xe; trong đó có 7 cái mà mình tạm gọi là 'Máy cày'
Sao bạn không đeo biển số lại cho 7 con xe thân iêu này trong hồ sơ quản lí, như
PHP:
63W 01678   LA-01678
67W 1007   BTR-1007
65W 16345   TG-16345 
. .     . .
Thứ hai: Cột [A:a] của CSDL ('SLH') hiện chỉ có 13 danh mục khác nhau
Nếu thiết lập chỉ mục cho chúng, ta có thể nào xài hàm CHOOSE() được chăng, để thay cho IF()?

Nhưng bạn fải biết 1 điều là mình rất kém về công thức đó nha!
 
Thứ nhất: Bạn có 160 đầu xe; trong đó có 7 cái mà mình tạm gọi là 'Máy cày'
Sao bạn không đeo biển số lại cho 7 con xe thân iêu này trong hồ sơ quản lí, như
PHP:
63W 01678   LA-01678
67W 1007   BTR-1007
65W 16345   TG-16345
. .     . .
Thứ hai: Cột [A:a] của CSDL ('SLH') hiện chỉ có 13 danh mục khác nhau
Nếu thiết lập chỉ mục cho chúng, ta có thể nào xài hàm CHOOSE() được chăng, để thay cho IF()?

Nhưng bạn fải biết 1 điều là mình rất kém về công thức đó nha!
Mình sẽ thử xem lại hàm choose, còn về phần mấy cái xe, có xe là thuộc công ty mình giá sẽ tính khác, và xe của khách đến cty mình lấy thì sẽ giá khác. Mà xe khách hàng thì mình không theo dõi được hết
 
Chào mọi người, mình cần phân loại đơn giá cho từng dòng lấy dữ liệu từ một Bảng giá đã được lập sẵn
Mình đang sử dụng hàm IF, kết hợp index, match và hàm or. Nhưng đối số hàm if quá nhiều, làm lâu dần file quá nặng, xử lý chậm. Mình mong người giúp đỡ mình cách xử lý ô công thức ở cột Q ( đơn giá), có hàm nào khác có thể rút gọn hơn không hay có phương pháp nào khác không.
Mình cảm ơn mọi người.
Với công thức:
PHP:
Q3=IF(A3="km",0,IF(TYPE(LEFT(I3,2)+0)=16,IF(D3="PHU HUU",INDEX(PHT,MATCH(K3,KH,0),MATCH(B3,TPHT,0)),IF(D3="HA LONG",INDEX(HLT,MATCH(K3,KH,0),MATCH(B3,THLT,0)),INDEX(TVWH,MATCH(K3,KH,0),MATCH(B3,TTVWH,0)))),IF(TYPE(MATCH(I3,TX,0))=1,INDEX(VC,MATCH(K3,KH,0),MATCH(B3,TVC,0)),IF(A3="HD",INDEX(VL,MATCH(K3,KH,0),MATCH(B3,TVL,0)),IF(A3="HT",IF(D3="Phu Huu",INDEX(PH,MATCH(K3,KH,0),MATCH(B3,TPH,0)),INDEX(HL,MATCH(K3,KH,0),MATCH(B3,THL,0))),IF(A3="HC",IF(D3="HIEP PHUOC",INDEX(HCHP,MATCH(K3,KH,0),MATCH(B3,THCHP,0)),INDEX(HC,MATCH(K3,KH,0),MATCH(B3,THC,0))),IF(OR(A3="CHIMS",A3="HDQ9",A3="LVK",A3="QTR"),INDEX(KB,MATCH(K3,KH,0),MATCH(B3,TKB,0)),INDEX(LT,MATCH(K3,KH,0),MATCH(B3,TLT,0)))))))))
Cứ lặp đi lặp lại MATCH(K3,KH,0) trong các điều kiện nhỏ, và đặc điểm kết cấu của file là từng Vùng thỏa điều kiện bạn đã gán vào 'name', nên tôi đã gom về 1 lần và dùng HLOOKUP() để làm công thức chính. Tuy nhiên, thay vì trong các Vùng 'name' như: PHT, HLT, TVWH, TX, VC, VL, PH, HL, HCHP, HC, KB, LT bạn lấy từ dòng 5, nay tôi đã chỉnh lại từ dòng 2 để phù hợp với hàm Hlookup(), chính nhờ vậy không cần dùng thêm Match() để so các 'name' phụ của các Vùng đó. Vì vậy, bạn có thể giữ lại chỉ duy nhất các Vùng 'name' trên, xóa bỏ các Vùng 'name' phụ được rồi.
Tôi đã chỉnh lại như sau:
PHP:
Q3=IF(A3="km",0,HLOOKUP(B3,IF(TYPE(LEFT(I3,2)+0)=16,IF(D3="PHU HUU",PHT,IF(D3="HA LONG",HLT,TVWH)),IF(TYPE(MATCH(I3,TX,0))=1,VC,IF(A3="HD",VL,IF(A3="HT",IF(D3="Phu Huu",PH,HL),IF(A3="HC",IF(D3="HIEP PHUOC",HCHP,HC),IF(OR(A3={"CHIMS","HDQ9","LVK","QTR"}),KB,LT)))) ) ),MATCH(K3,KH,0),0))
Enter fill xuống.

Bạn kiểm tra lại file xem đã thỏa chưa.

Chúc bạn ngày vui.
 

File đính kèm

Với công thức:
PHP:
Q3=IF(A3="km",0,IF(TYPE(LEFT(I3,2)+0)=16,IF(D3="PHU HUU",INDEX(PHT,MATCH(K3,KH,0),MATCH(B3,TPHT,0)),IF(D3="HA LONG",INDEX(HLT,MATCH(K3,KH,0),MATCH(B3,THLT,0)),INDEX(TVWH,MATCH(K3,KH,0),MATCH(B3,TTVWH,0)))),IF(TYPE(MATCH(I3,TX,0))=1,INDEX(VC,MATCH(K3,KH,0),MATCH(B3,TVC,0)),IF(A3="HD",INDEX(VL,MATCH(K3,KH,0),MATCH(B3,TVL,0)),IF(A3="HT",IF(D3="Phu Huu",INDEX(PH,MATCH(K3,KH,0),MATCH(B3,TPH,0)),INDEX(HL,MATCH(K3,KH,0),MATCH(B3,THL,0))),IF(A3="HC",IF(D3="HIEP PHUOC",INDEX(HCHP,MATCH(K3,KH,0),MATCH(B3,THCHP,0)),INDEX(HC,MATCH(K3,KH,0),MATCH(B3,THC,0))),IF(OR(A3="CHIMS",A3="HDQ9",A3="LVK",A3="QTR"),INDEX(KB,MATCH(K3,KH,0),MATCH(B3,TKB,0)),INDEX(LT,MATCH(K3,KH,0),MATCH(B3,TLT,0)))))))))
Cứ lặp đi lặp lại MATCH(K3,KH,0) trong các điều kiện nhỏ, và đặc điểm kết cấu của file là từng Vùng thỏa điều kiện bạn đã gán vào 'name', nên tôi đã gom về 1 lần và dùng HLOOKUP() để làm công thức chính. Tuy nhiên, thay vì trong các Vùng 'name' như: PHT, HLT, TVWH, TX, VC, VL, PH, HL, HCHP, HC, KB, LT bạn lấy từ dòng 5, nay tôi đã chỉnh lại từ dòng 2 để phù hợp với hàm Hlookup(), chính nhờ vậy không cần dùng thêm Match() để so các 'name' phụ của các Vùng đó. Vì vậy, bạn có thể giữ lại chỉ duy nhất các Vùng 'name' trên, xóa bỏ các Vùng 'name' phụ được rồi.
Tôi đã chỉnh lại như sau:
PHP:
Q3=IF(A3="km",0,HLOOKUP(B3,IF(TYPE(LEFT(I3,2)+0)=16,IF(D3="PHU HUU",PHT,IF(D3="HA LONG",HLT,TVWH)),IF(TYPE(MATCH(I3,TX,0))=1,VC,IF(A3="HD",VL,IF(A3="HT",IF(D3="Phu Huu",PH,HL),IF(A3="HC",IF(D3="HIEP PHUOC",HCHP,HC),IF(OR(A3={"CHIMS","HDQ9","LVK","QTR"}),KB,LT)))) ) ),MATCH(K3,KH,0),0))
Enter fill xuống.

Bạn kiểm tra lại file xem đã thỏa chưa.

Chúc bạn ngày vui.
Cảm ơn bạn đã giúp mình hiểu ra vấn đề, ban đầu mình cũng cảm thấy việc lặp đi lặp làm hàm match index giống nhau liên tục cũng có vấn đề nhưng không biết cách xử lý ntnao cho hợp lý. Nhờ bạn mình đã hiểu việc lấy làm match index ra làm nhân tử chung cho hlookup, file mình đã nhẹ hơn rất nhiều.
 
Web KT

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

Back
Top Bottom