Hướng dẫn tạo thêm hàm switch trong excel bằng vba. (1 người xem)

Liên hệ QC

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

baocaothang

Thành viên mới
Tham gia
5/5/12
Bài viết
13
Được thích
0
Em đang cần tạo hàm switch để so sánh dữ liệu và thực hiện công việc, nhưng hàm if chỉ giới hạn số lượng 8 hàm lồng vào nhau trong khi em đang cần thực hiện nhiều công việc khác nhau trong nhiều trường hợp khác nhau.

Nên nhờ mọi người chỉ giúp code vba để tạo ra hàm switch.
Em có gởi file ví dụ kèm theo.
 

File đính kèm

Lần chỉnh sửa cuối:
Em đang cần tạo hàm switch để so sánh dữ liệu và thực hiện công việc, nhưng hàm if chỉ giới hạn số lượng 8 hàm lồng vào nhau trong khi em đang cần thực hiện nhiều công việc khác nhau trong nhiều trường hợp khác nhau.

Nên nhờ mọi người chỉ giúp code vba để tạo ra hàm switch.
Em có gởi file ví dụ kèm theo.

Theo mô tả của bạn, tôi thấy cứ dùng hàm VLOOKUP cho khỏe
Nếu bạn có yêu cầu khác hơn, phải mô tả cụ thể hơn (xem file cóc hiểu gì ráo)
 
Upvote 0
Em đã bổ sung file khác có giải thích rõ, nhờ các anh xem lại giúp.
 
Upvote 0
Em đã bổ sung file khác có giải thích rõ, nhờ các anh xem lại giúp.

Trong file bạn nói rằng:
Mã:
Nếu xuất xứ hàng là [B]SCHNEIDER [/B]thì dùng hàm vlookup tra xem trong file [B]SCH.xls[/B] "MCCB 3P 400A 36KA" là mã hàng nào.
Nếu xuất xứ hàng là [B]ABB[/B] thì dùng hàm vlookup tra xem trong file [B]ABB.xls[/B] "MCCB 3P 200A 36KA" là mã hàng nào.
Nếu xuất xứ hàng là [B]SIEMENS[/B] thì dùng hàm vlookup tra xem trong file [B]SIE.xls[/B] "MCCB 3P 200A 36KA" là mã hàng nào.
[COLOR=#ff0000][B]...[/B][/COLOR]
Có bao nhiêu bạn cứ ghi hết ra thành 1 bảng tra đi
Cái ... của bạn ai biết đâu mà đoán
Nói cho cùng thì đây là dạng yêu cầu lấy dữ liệu từ file đang đóng đúng không? (SWITCH cái quỷ gì chứ)
 
Upvote 0
Dạ không phải, lấy dữ liệu từ file đang đóng em đã làm được rồi. Nhưng em dùng hàm if+vlookup như trong file em đưa kèm theo. Bây giờ em cũng muốn thực hiện đúng chức năng đó nhưng không dùng if+vlookup mà dùng switch+vlookup.
Nếu chỉ có 8 xuất xứ như : schneider,abb,hager,ls,mitsu,ge,siemens,china. thì em đã dùng hàm If+vlookup được. Nhưng bây giờ số lượng nhiều hơn nên phải dùng switch : schneider,abb,hager,ls,mitsu,ge,siemens,china,vietnam,shilin,...
 
Upvote 0
Dạ không phải, lấy dữ liệu từ file đang đóng em đã làm được rồi. Nhưng em dùng hàm if+vlookup như trong file em đưa kèm theo. Bây giờ em cũng muốn thực hiện đúng chức năng đó nhưng không dùng if+vlookup mà dùng switch+vlookup.
Nếu chỉ có 8 xuất xứ như : schneider,abb,hager,ls,mitsu,ge,siemens,china. thì em đã dùng hàm If+vlookup được. Nhưng bây giờ số lượng nhiều hơn nên phải dùng switch : schneider,abb,hager,ls,mitsu,ge,siemens,china,vietnam,shilin,...
Tôi nghĩ là bạn nên tạo 1 bảng dò tương ứng gồm 2 cột: Xuất xứTên file. Sau đó thay vì 1 rừng IF hay SWITCH đó thì bạn sử dụng hàm INDIRECT, VLOOKUP và phép toán nối chuỗi để trả về địa chỉ bảng dò tương ứng với Xuất xứ.
 
Upvote 0
Tôi nghĩ là bạn nên tạo 1 bảng dò tương ứng gồm 2 cột: Xuất xứTên file. Sau đó thay vì 1 rừng IF hay SWITCH đó thì bạn sử dụng hàm INDIRECT, VLOOKUP và phép toán nối chuỗi để trả về địa chỉ bảng dò tương ứng với Xuất xứ.

Không dùng INDIRECT với file đang đóng được đâu (file đang mở thì được)
Tuy nhiên, tôi vẫn đồng ý là phải có 1 bảng tra, xong rồi tính gì thì tính (hổng có cái bảng ấy lấy gì mà thử nghiệm đây)
 
Upvote 0
Em đã gởi thêm file có bảng để tra và hàm IF+VLOOkUP em đã làm được ở đầu bài.
Nhờ mọi người hướng dẫn cách đổi sang phương pháp sử dụng theo kiểu SWITCH+VLOOKUP.
 
Upvote 0
Em đã gởi thêm file có bảng để tra và hàm IF+VLOOkUP em đã làm được ở đầu bài.
Nhờ mọi người hướng dẫn cách đổi sang phương pháp sử dụng theo kiểu SWITCH+VLOOKUP.

Bạn cứ đưa ra yêu cầu, người ta sẽ giải giúp bạn... Bạn đừng tự mình đưa ra hướng đi mà bạn cho là đúng, đơn giản vì tôi sẽ giải quyết bằng cách của tôi chứ chẳng có SWITCH gì cả
Công thức tôi gõ tại D5 là:
Mã:
=HLOOKUP($B5,[COLOR=#008000]GetData[/COLOR]([COLOR=#ff0000]$N$3[/COLOR]&VLOOKUP($C5,[COLOR=#0000cd]$M$5:$N$100[/COLOR],2,0),"[COLOR=#ff8c00]Sheet1[/COLOR]","[COLOR=#b22222]B2:D500[/COLOR]"),3,0)
Trong đó:
$M$5:$N$100 là bảng tra Tên File từ Xuất xứ
$N$3 là đường dẫn đến thư mục chưa file
GetData là hàm tự tạo để lấy dữ liệu từ file đang đóng, trả về 1 mảng
Sheet1 là tên sheet tại file mà bạn muốn lấy dữ liệu
B2:D500 là vùng dữ liệu tại file mà bạn muốn lấy dữ liệu
------------------
Xem trong file Main.xls nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn cứ đưa ra yêu cầu, người ta sẽ giải giúp bạn... Bạn đừng tự mình đưa ra hướng đi mà bạn cho là đúng, đơn giản vì tôi sẽ giải quyết bằng cách của tôi chứ chẳng có SWITCH gì cả
Công thức tôi gõ tại D5 là:
Mã:
=HLOOKUP($B5,[COLOR=#008000]GetData[/COLOR]([COLOR=#ff0000]$N$3[/COLOR]&VLOOKUP($C5,[COLOR=#0000cd]$M$5:$N$100[/COLOR],2,0),"[COLOR=#ff8c00]Sheet1[/COLOR]","[COLOR=#b22222]B2:D500[/COLOR]"),3,0)
Trong đó:
$M$5:$N$100 là bảng tra Tên File từ Xuất xứ
$N$3 là đường dẫn đến thư mục chưa file
GetData là hàm tự tạo để lấy dữ liệu từ file đang đóng, trả về 1 mảng
Sheet1 là tên sheet tại file mà bạn muốn lấy dữ liệu
B2:D500 là vùng dữ liệu tại file mà bạn muốn lấy dữ liệu
------------------
Xem trong file Main.xls nhé

Cám ơn anh vì đã viết giúp hàm GetData
 
Upvote 0
bạn cứ đưa ra yêu cầu, người ta sẽ giải giúp bạn... Bạn đừng tự mình đưa ra hướng đi mà bạn cho là đúng, đơn giản vì tôi sẽ giải quyết bằng cách của tôi chứ chẳng có switch gì cả
công thức tôi gõ tại d5 là:
Mã:
=hlookup($b5,[color=#008000]getdata[/color]([color=#ff0000]$n$3[/color]&vlookup($c5,[color=#0000cd]$m$5:$n$100[/color],2,0),"[color=#ff8c00]sheet1[/color]","[color=#b22222]b2:d500[/color]"),3,0)
trong đó:
$m$5:$n$100 là bảng tra tên file từ xuất xứ
$n$3 là đường dẫn đến thư mục chưa file
getdata là hàm tự tạo để lấy dữ liệu từ file đang đóng, trả về 1 mảng
sheet1 là tên sheet tại file mà bạn muốn lấy dữ liệu
b2:d500 là vùng dữ liệu tại file mà bạn muốn lấy dữ liệu
------------------
xem trong file main.xls nhé


bây giờ em muốn lấy tiếp dữ liệu trong cột "h","w","d","so cuc",... Thì em phải sửa hàm trên lại như thế nào vậy anh.
Hồi trước khi dùng if+vlookup em chỉ cần đổi số 3 trong hàm vlookup thành 4 để lấy giá trị trong cột "h", 5 cho cột "w", 6 cho cột "d", và các cột khác tăng dàn số lên.
 
Upvote 0
bây giờ em muốn lấy tiếp dữ liệu trong cột "h","w","d","so cuc",... Thì em phải sửa hàm trên lại như thế nào vậy anh.
Hồi trước khi dùng if+vlookup em chỉ cần đổi số 3 trong hàm vlookup thành 4 để lấy giá trị trong cột "h", 5 cho cột "w", 6 cho cột "d", và các cột khác tăng dàn số lên.

Xem chi tiết trong file nhé
 

File đính kèm

Upvote 0
Nhờ anh giải thích giúp em chức năng của HLOOKUP trong hàm viết ở ô D5. em thấy HLOOKUP tra theo hàng nhưng em cần lấy dữ liệu theo cột mà vẫn đúng như vậy là tại sao vậy anh.

Đơn giản vì hàm GetData khi lấy dữ liệu từ file đang đóng thì nó đã xoay dữ liệu 90 độ rồi (cột chuyển thành dòng và dòng chuyển thành cột). Vậy nên khi áp dụng thay vì dùng VLOOKUP ta sẽ dùng HLOOKUP và ngược lại
Thế thôi
--------------
Nói thêm: Vì dùng công thức nên mỗi cell sẽ gọi hàm 1 lần, dẫn đến file sẽ chậm khi dữ liệu nhiều... Trường hợp này ta dùng Sub là hay nhất (tạo 1 nút, nhấn 1 phát ra kết quả luôn) ---> Bạn tự nghiên cứu nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom