Dùng hàm Switch trong VBA

Tham gia ngày
26 Tháng một 2019
Bài viết
4
Thích
2
Điểm
15
Tuổi
29
#1
Chào mọi người
Mọi người cho mình hỏi xíu, ai biết xin hướng dẫn giùm mình xíu. Cảm ơn!
Vì hàm IF chỉ cho phép lặp lại 8 lần, mà dữ liệu của mình có quá nhiều hàng nên không thể sử dụng hàm IF. Mình có tham khảo mọi người hướng dẫn sử dụng hàm Switch (code vba) trong excel nhưng mình không biết viết nên ai biết thì hướng dẫn giùm mình với
Ví dụ mình có bảng dữ liệu như bên dưới, giá trị mình cần tìm là ngày tương ứng với giá trị cần so sánh. Ví dụ như SUM(AH$25:AH26) nhỏ hơn giá trí ở cột AQ thì sẽ trả về ngày tương ứng ở cột AP, nhưng vì ngày nhập hàng quá nhiều nên mình không thể sử dụng toàn bộ bằng hàng if được.

1548508281022.png
 

ptm0412

Excel Ordinary Member
Thành viên BQT
Super Moderator
Tham gia ngày
4 Tháng mười một 2007
Bài viết
9,201
Thích
28,032
Điểm
1,910
Tuổi
57
#4
Lookup được với điều kiện sắp thứ tự và dữ liệu không trùng. Cột AQ đang có những giá trị giống nhau nhưng lại muốn trả về kết quả khác nhau lấy trên cột AP
 
Tham gia ngày
26 Tháng một 2019
Bài viết
4
Thích
2
Điểm
15
Tuổi
29
#5
vì là máy công ty nên không thể muốn cài gì thì cài, nếu máy ở nhà thì mình đã đổi bộ office rồi, mọi người ơi help giùm mình với
 

phuocam

Thành viên mới
Tham gia ngày
16 Tháng năm 2013
Bài viết
1,894
Thích
2,336
Điểm
560
#6
Cột AP dòng 2,3,4 có 1/22, 1/24,1/25
Cột AQ dòng 2,3,4 có 53802,53802,53802
Trường hợp giá trị cần tìm nhỏ hơn 53802 thì giá trị trả về là: 1/22?, 1/24? hay 1/25 ?
 
Tham gia ngày
26 Tháng một 2019
Bài viết
4
Thích
2
Điểm
15
Tuổi
29
#7
Cột AP dòng 2,3,4 có 1/22, 1/24,1/25
Cột AQ dòng 2,3,4 có 53802,53802,53802
Trường hợp giá trị cần tìm nhỏ hơn 53802 thì giá trị trả về là: 1/22?, 1/24? hay 1/25 ?
Trong trường hợp dùng If này thì nếu giá trị nhỏ hơn 53802 nó sẽ trả về 1/22, còn nếu là 53810 chẳng hạn thì đều không phải 1/22, 1/24, 1/25 mà sẽ trả về 01/28
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
5,218
Thích
8,885
Điểm
860
#8
Mình là người đầu tiên & chắc cũng đang là người cuối cùng xài hàm Switch()
Nhưng vấn đề của bạn chỉ có thể giải quyết 1 khi đưa file giả lập lên
Cái ảnh đó ờ #01 nên bỏ đi!
 

HieuCD

Thành viên gạo cội
Tham gia ngày
14 Tháng chín 2010
Bài viết
5,152
Thích
8,303
Điểm
560
#10
Chào mọi người
Mọi người cho mình hỏi xíu, ai biết xin hướng dẫn giùm mình xíu. Cảm ơn!
Vì hàm IF chỉ cho phép lặp lại 8 lần, mà dữ liệu của mình có quá nhiều hàng nên không thể sử dụng hàm IF. Mình có tham khảo mọi người hướng dẫn sử dụng hàm Switch (code vba) trong excel nhưng mình không biết viết nên ai biết thì hướng dẫn giùm mình với
Ví dụ mình có bảng dữ liệu như bên dưới, giá trị mình cần tìm là ngày tương ứng với giá trị cần so sánh. Ví dụ như SUM(AH$25:AH26) nhỏ hơn giá trí ở cột AQ thì sẽ trả về ngày tương ứng ở cột AP, nhưng vì ngày nhập hàng quá nhiều nên mình không thể sử dụng toàn bộ bằng hàng if được.

View attachment 211670
AQ25 =INDEX($AP$2:$AP$14,IFERROR(MATCH(SUM(AH$25:AH25),AQ$2:AQ$14-10^-10)+1,1),)
Nhấn Ctrl+Shift+Enter
 
Lần chỉnh sửa cuối:

VetMini

Thành viên gạo cội
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,052
Thích
6,988
Điểm
560
#11
Chào mọi người
Mọi người cho mình hỏi xíu, ai biết xin hướng dẫn giùm mình xíu. Cảm ơn!
Vì hàm IF chỉ cho phép lặp lại 8 lần, mà dữ liệu của mình có quá nhiều hàng nên không thể sử dụng hàm IF. Mình có tham khảo mọi người hướng dẫn sử dụng hàm Switch (code vba) trong excel nhưng mình không biết viết nên ai biết thì hướng dẫn giùm mình với
Ví dụ mình có bảng dữ liệu như bên dưới, giá trị mình cần tìm là ngày tương ứng với giá trị cần so sánh. Ví dụ như SUM(AH$25:AH26) nhỏ hơn giá trí ở cột AQ thì sẽ trả về ngày tương ứng ở cột AP, nhưng vì ngày nhập hàng quá nhiều nên mình không thể sử dụng toàn bộ bằng hàng if được.
Hàm Switch vì là hàm nên sẽ đòi hỏi các tham số tính ra đủ hết. Và vì vậy sẽ rất kém hiệu quả.
Trường hợp muốn viết hàm tự tạo để tránh IF bị giới hạn 8 lượt thì nên dùng IF-Then-ElseIf-...Else, cách này hiệu quả hơn.

Mình là người đầu tiên & chắc cũng đang là người cuối cùng xài hàm Switch()
...
Hàm Switch, cũng như khàm IIF, có nhiều giới hạn. Ngày xưa Access ra các hàm này là để giúp dễ viết mấy câu truy vấn SQL.
Ngày nay, mỗi lần muốn dùng hàm IIF thì phải suy nghĩ hiệu quả của nó. Switch thì lại càng khó khăn hơn; Select-Case hầu như có thể hoàn toàn thay thế nó.
 

tam888

Thành viên tích cực
Tham gia ngày
22 Tháng tám 2013
Bài viết
607
Thích
352
Điểm
435
#13
Hàm Switch vì là hàm nên sẽ đòi hỏi các tham số tính ra đủ hết. Và vì vậy sẽ rất kém hiệu quả.
Trường hợp muốn viết hàm tự tạo để tránh IF bị giới hạn 8 lượt thì nên dùng IF-Then-ElseIf-...Else, cách này hiệu quả hơn.


Hàm Switch, cũng như khàm IIF, có nhiều giới hạn. Ngày xưa Access ra các hàm này là để giúp dễ viết mấy câu truy vấn SQL.
Ngày nay, mỗi lần muốn dùng hàm IIF thì phải suy nghĩ hiệu quả của nó. Switch thì lại càng khó khăn hơn; Select-Case hầu như có thể hoàn toàn thay thế nó.
Ở GPE này đa số code có số dòng (số ký tự) ngắn là tốt, nên đâu quan tâm việc bác đề cập switch đứng về mặt ngắn này thì là nhất
 

VetMini

Thành viên gạo cội
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,052
Thích
6,988
Điểm
560
#17
Ở GPE này đa số code có số dòng (số ký tự) ngắn là tốt, nên đâu quan tâm việc bác đề cập switch đứng về mặt ngắn này thì là nhất
Nhiều lúc tôi cũng đặt câu hỏi tại sao các vị ở GPE đây cứ bám mãi với Windows.
Đổi qua Unix/Linux tha hồ mà trổ tài rút ngắn câu lệnh. Nó thích hợp luôn với cả những vị thích dùng công thức khủng.
 
Top