Vài ví dụ nhỏ về việc sử dụng hàm CHOOSE trong VBA (1 người xem)

Liên hệ QC

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

Hoang2013

Thành viên gắn bó
Tham gia
15/8/13
Bài viết
1,622
Được thích
1,597
Giới tính
Nam
Nghề nghiệp
Hưu trí
Bài này nhằm minh họa thêm cho (các) bài viết tại:http://www.giaiphapexcel.com/diendan/threads/bài-7-hàm-trong-vba.129808/
PHP:
Const GPE As String = "GPE.COM"
Sub DienThuTrongTuanChoDaySoLieuNgay()
 Dim Cls As Range
 For Each Cls In Range([d3], [d3].End(xlToRight))
    With Cls
        If Weekday(.Value) = 1 Then
            .Offset(-1).Value = "CN"
        Else
            .Offset(-1).Value = "T" & Choose(Weekday(.Value), GPE, "2", "3", "4", "5", "6", "7")
        End If
    End With
 Next Cls
End Sub
Mã:
Sub DoiTenCacTrangTinhCua1FileExcel()
 Dim Sh As Worksheet:                                   Dim W As Byte
 Dim ShName As String:                                  On Error Resume Next
 For Each Sh In ThisWorkbook.Worksheets
    W = W + 1:                  If W > 12 Then Exit For
    ShName = Choose(W, "Hoa", "Hong", "Huong", "Thu", "Cúc", "Lài", "Nhài", "Sim", "Mua", "Mai", "Cóc", "Hòe", GPE)
    Sh.Name = ShName
 Next Sh
End Sub
PHP:
Sub DuyetQuaCacTrangTinhNhapXuatTon()
 Dim ShName As String:            Dim J As Byte
 For J = 1 To 3
    ShName = Choose(J, "Nhap", "Xuat", "Ton", "GPE.COM")
    With Sheets(ShName)
        MsgBox .Cells(3, 5 - J).Value
    End With
 Next J
End Sub


Rất mong các bạn đóng góp & bổ sung cho thêm fần fong fú!
 
Lần chỉnh sửa cuối:
Bạn có thể so sánh cách dùng hàm CHOOSE với:
1. Dùng Array - hoặc bất kỳ cấu trúc nào có thể truy cập bằng chỉ số
2. Code IF-THEN-ELSE
3. Code SELECT CASE
 
Upvote 0
PHP:
Const Q3 As String = "III"
Function Qui(Dat As Date) As String
 Qui = Choose(Month(Dat), "I", "I", "I", "II", "II", "II", Q3, Q3, Q3, "IV", "IV", "IV")
End Function
Mã:
Function Qui_(Dat As Date) As String
 Select Case Month(Dat)
 Case Is < 4
    Qui_ = "I"
 Case Is < 7
    Qui_ = "II"
 Case Is < 10
    Qui_ = "III"
 Case Is > 9
    Qui_ = "IV"
 End Select
End Function
 
Upvote 0
Bạn có thể so sánh cách dùng hàm CHOOSE với:
1. Dùng Array - hoặc bất kỳ cấu trúc nào có thể truy cập bằng chỉ số
2. Code IF-THEN-ELSE
3. Code SELECT CASE
Các cấu trúc thì phải duyệt từng mệnh đề cho đến khi đúng còn hàm CHOOSE trỏ thẳng đến vị trí qua chỉ số.
Còn Array không biết có gì khác biệt lớn không. Viết theo hai cách bên dưới thấy cũng na ná giống nhau.
PHP:
Function QuiA(Dat As Date) As String
QuiA = Choose(DatePart("q", Dat), "I", "II", "III", "IV")
End Function
PHP:
Option Base 1
Function QuiB(Dat As Date) As String
QuiB = Array("I", "II", "III", "IV")(DatePart("q", Dat))
End Function
 
Upvote 0
Các cấu trúc thì phải duyệt từng mệnh đề cho đến khi đúng còn hàm CHOOSE trỏ thẳng đến vị trí qua chỉ số.

Mặt khác:
- Array bắt buộc chỉ số tìm phải nằm trong vòng giới hạn của lượng phần tử: x = Array(0, 1, 2, 3)(5) ' error subscript out of range
- Choose trả về null nếu chỉ số nhỏ hơn 1 hoặc lớn hơn lượng chọn lựa: x = Choose(5, 1, 2, 3) ' kết quả: x = Null
- Select Case có đoạn Case Else để xử lý các trường hợp nằm ngoài. Nếu không có Case Else thì các trường hợp nằm ngoài tuột luôn, không sao cả.

Điểm khác nữa:
- Choose và Array là hàm cho nên tất cả các biểu thức trong dãy tham số chủa chúng đều được tính - nếu tham là hàm thì hàm sẽ được gọi.
x = Choose(3, ham1, ham2(), ham3(), ham4(), ham5()) ' tất cả các hàm đều được gọi
- Select Case là lệnh chọn lựa cho nên nó chỉ tính các biểu thức so sánh, đến khi gặp đúng chỗ nó mới tính biểu thức chọn lựa.
Select Case 3
Case 1
x = ham1()
Case 2
x = ham2()
Case 3
x = ham3() ' chỉ có hàm này được gọi
Case 4
x = ham4()
Case 5
x = ham5()
End Select
Chú thích: nếu các Case (các biểu thức so sánh) là hàm thì các hàm ở cases 1,2, và 3 được gọi. Các hàm ở cases 4 và 5 không.
 
Upvote 0
Web KT

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

Back
Top Bottom