Các lệnh logic điều khiển trong VBA

tuhocvba

Administrator
Thành viên BQT
1. Lệnh GoTo
Lệnh GoTo là chỉ thị điều khiển nhảy tới thực thi một dòng lệnh, bỏ qua các lệnh ở sau GoTo.

GoTo tuhocvba '<= nhảy tới đoạn code có nhãn tuhocvba
 Xử lý thực thi.... ' <= Đoạn code này sẽ không được thực thi
tuhocvba:
 Xử lý thực thi.... ' <= đoạn code sẽ được thực thi
Mã:
Sub sample()

    MsgBox "01: tuhocvba.net"
   
    MsgBox "02: tuhocvba.net"
   
    GoTo tuhocvba
   
    MsgBox "03: tuhocvba.net"
   
    MsgBox "04: tuhocvba.net"
   
tuhocvba:
   
    MsgBox "05: tuhocvba.net"

End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh


Nguồn tham khảo:
 

vbano1

SMod
Thành viên BQT
2. Lệnh If~then
Cấu trúc:
Mã:
If Điều_Kiện Then
 Điều_Kiện thỏa mãn thì tiến hành xử lý 1
Else
 Điều_Kiện không thỏa mãn thì tiến hành xử lý 2
End If
Trong một số trường hợp ta còn gặp cấu trúc như sau:

Ví dụ:
Mã:
if (a=2) then
x = x+1
else
x = x-1
End if
Mã:
If DK1 Then
 DK1 thỏa mãn thì xử lý 1
ElseIf DK2 Then
 DK2 thỏa mãn thì xử lý 2
・・・
Else
 Tất cả các trường hợp trên không thỏa mãn thì tiến hành xử lý...
End If
Chú ý, với đối tượng ta có logic is
Ví dụ:

Mã:
Sub sample()

    Dim a As Object
    Dim b As Object
   
    Set a = Sheets("Sheet1")
    Set b = Sheets("Sheet1")

    If a Is b Then
   
        MsgBox "a va b giong nhau"

    Else
   
        MsgBox "a va b khong giong nhau"
   
    End If

End Sub
 

giaiphapvba

Administrator
Thành viên BQT
3. Lệnh GoSub:
Mã:
Sub Sample()
    Dim a As Integer
    a = InputBox("Hay nhap so vao") 'Hiện cửa sổ để người dùng nhập số. Chả hạn ta nhập vào là 1
    If a < 10 Then GoSub Sub1  'Chạy tới vị trí Sub1 để thực thi nếu a < 10. Vì ta nhập a = 1 nên nó sẽ chạy tới Sub1
    MsgBox a
    Exit Sub
Sub1:
    a = a + 10  'Vì nhập vào a = 1 ở trên. nên lúc này a = a + 10 = 11.
    Return  'Nó sẽ quay lại vị trí dòng lệnh GoSub Sub1 ở trên. Do a = 11 nên a > 10. Vì thế lệnh Msgbox a được thực thi.
End Sub
Lệnh này khá giống với , giúp chúng ta tránh lỗi (vị trí có thể xảy ra lỗi mà chúng ta phán đoán được.
Trở lại với chương trình trên khi chúng ta nhập vào là 1. Tôi đã giải thích bằng comment trong đoạn code trên.
Kết quả:
Bạn cần đăng nhập để thấy đính kèm


Nguồn:
 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
4. Select Case: Liệt kê các trường hợp có thể xảy ra
Select Case Đối tượng mà ta muốn làm việc
 Case Điều kiện 1
  Điều kiện 1 mà đúng thì thực thi lệnh...
 Case Điều kiện 2
  Điều kiện 2 mà đúng thì thực thi lệnh...
・・・
 Case Else
  Tất cả các điều kiện trên đều không đúng thì thực thi lệnh...
End Select
Ví dụ:
Mã:
Sub sample()

    Dim a As Integer
    
    a = 10

    Select Case a
    
        Case 9
        
            MsgBox "a la 9"
            
        Case 10
        
            MsgBox "a la 10"
 
        Case Else
        
            MsgBox "a khong phai la 9 va 10"
    
    End Select

End Sub
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Liệt kê như trên là hay gặp nhất. Ta cũng có thể dùng To để vắn tắt như sau:
Mã:
Sub sample()

    Dim a As Integer
    
    a = 10

    Select Case a
    
        Case 1 To 5
        
            MsgBox "a nam trong khoang 1~5"
            
        Case 6 To 10
        
            MsgBox "a nam trong khoang 6~10"
                    
        Case 11 To 15
        
            MsgBox "a nam trong khoang 11~15"
                  
            
        Case Else
        
            MsgBox "a >= 16"
    
    End Select

End Sub
Và ta cũng có thể dùng Is để liệt kê như sau:
Mã:
Sub sample()

    Dim a As Integer
    
    a = 10

    Select Case a
    
        Case Is >= 15
        
            MsgBox "a>=15"
            
        Case Is >= 10
        
            MsgBox "a nam trong khoang 14~10"
                    
        Case Is >= 5
        
            MsgBox "a nam trong khoang  9~5"
                  
            
        Case Else
        
            MsgBox "a < = 4"
    
    End Select

End Sub
Các liệt kê sau đây có lẽ là dễ nhớ hơn hai cách vừa nêu:
Mã:
Sub sample()

    Dim a As Integer
    
    a = 10

    Select Case a
    
        Case 0, 2, 4, 6, 8, 10
        
            MsgBox "a la so chan"
            
        Case 1, 3, 5, 7, 9, 11
        
            MsgBox "a la so le"
    
    End Select

End Sub
Các bạn nắm được logic của nó là được, thực tế khi code có thể quên cú pháp, bạn có thể google từ khóa "VBA select case" là lập tức sẽ ra trang tham khảo. Vì vậy đừng lo lắng quá nhé.
Bài viết được diễn đàn tham khảo từ:
 

Euler

Administrator
Thành viên BQT
5. For~Next
Cấu trúc:
For số_đếm = giá_trị_ban_đầu To giá_trị_giới_hạn
 Lệnh bên trong vòng lặp
Next số_đếm
Trong trường hợp này, bước nhảy mặc định hiểu là 1 nếu bạn không nói gì.
Một cách chính quy, nên viết như sau:
For số_đếm = giá_trị_ban_đầu To giá_trị_giới_hạn Step bước_nhảy
 Lệnh bên trong vòng lặp
Next số_đếm
Chúng ta có code sau:
Mã:
Sub sample()

    Dim i As Integer

    For i = 1 To 3
   
        MsgBox "Vong lap thu: " & i
   
    Next i

End Sub
Kết quả là:
Bạn cần đăng nhập để thấy đính kèm

Diễn giải: Ở code trên không nhắc gì tới bước nhảy (step) cho nên VBA mặc định hiểu bước nhảy là 1 (step 1).
Ban đầu i = 1 và nó đưa ra kết quả là hộp thoại 1.
Tiếp tục i tăng lên 1 đơn vị (step 1) nên i = 2. Nó ra tiếp hộp thoại 2.
Tiếp tục i tăng lên 1 đơn vị (step 1) nên i = 3. Nó ra tiếp hộp thoại 3.
Tiếp tục i tăng lên 1 đơn vị (step 1) nên i = 4, lúc này i > giới hạn (=3) cho nên câu lệnh bên trong for không được thực thi, vòng lặp kết thúc.
Về logic của For ~ Next thì diễn đàn đã có video thuyết minh rồi, các bạn xem thêm ở đây:
Bạn cần đăng nhập để thấy đa phương tiện
 

tuhocvba

Administrator
Thành viên BQT
6. For Each ~ Next
Cấu trúc:
For Each element In group
[Xử lý...]
[Exit For]

Next [element]

Group ở đây là một nhóm các đối tượng hoặc là tập hợp các phần tử của một mảng
Ví dụ:
Mã:
Sub sample()
    Dim st As Object
    For Each st In Sheets
        MsgBox st.Name
    Next
End Sub
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Bạn cần đăng nhập để thấy đính kèm

st ở trên ta khai báo là đối tượng ( Object).
sheets ở đây là tập hợp tất cả các sheet có trong file.

Bây giờ ta có ví dụ với mảng:
Mã:
Sub sample()
    Dim arrayData As Variant
    Dim i As Variant   
    'Mảng
    arrayData = Array(1, 3, 5)   
    For Each i In arrayData
        msgbox i   
    Next i
End Sub
Kết quả:
Bạn cần đăng nhập để thấy đính kèm

Mảng ta khai báo là Variant cho nên i trong chương trình cũng được khai báo là Variant.
Nguồn tham khảo:
 
Top