티스토리 뷰

VBA

[Excel][VBA] 코드 실행 순서 제어

어린왕자1234 2021. 11. 22. 10:18

▶ Goto문

▶ If ~ Then문

▶ Select Case문

For ~Next문

    For Each 요소 In 컬렉션 문 

Do ~ Loop문

    Do While ~ Loop문, Do ~ While Loop문

    Do Until ~ Loop문, Do ~ Until Loop문

 

 

■ Goto문

프로그램의 다음 실행 위치를 레이블이 지정된 곳으로 한다.

- 정상 흐름이 레이블을 만나지 않도록 레이블 전에 Exit 문을 삽입한다.

- 오류처리 코드에만 사용하라!!! (코드가 꼬일 수 있음)

 

[ 레이블 지정 ] 

    - 문자열 레이블 :

    - 숫자

 

Sub GoTo_Demo()
    Dim i As String
    Dim a As Integer
1
    i = InputBox("암호를 입력하시오")
    If i <> "1234" Then
        GoTo 2
    Else
        MsgBox ("암호가 정확합니다")
    End If
    
    Exit Sub
    
2
    a = MsgBox("암호를 다시 입력할까요?", vbOKCancel)
    If a = vbOK Then
        GoTo 1
    End If
    
End Sub

 

 If ~ Then문

IF  조건 Then
    참일때 실행할 코드
End IF
IF  조건 Then
    참일때 실행할 코드
Else
    거짓일때 실행할 코드
End IF
IF  조건1 Then
    조건1이 참일때 실행할 코드
ElseIF 조건2 Then
    조건2가 참일때 실행할 코드
Else 
    그외 일때 실행할 코드
End IF
Sub Discout()
    ' 구매 양에 따른 활인율 결정
    Dim Quantity As Integer
    Dim Discount As Double
    
    Quantity = InputBox("Enter Quantity : ")
    If Quantity = "" Then Exit Sub
    If Quantity >= 0 And Quantity < 25 Then
        Discount = 0.1
    ElseIf Quantity < 50 Then
        Discount = 0.15
    ElseIf Quantity < 75 Then
        Discount = 0.2
    Else
        Discount = 0.25
    End If
    MsgBox "Discount : " & Discount
        
End Sub

※ IIF함수

    IIF(조건,참일때 실행문, 거짓일때 사용문)

    엑셀 Worksheet IF함수 구현

    MsgBox ( n = 0, 0, 1/n)

 

 Select Case문

세개 이상의 조건 중에 하나를 선택하는 경우 사용

 

### True 인 Case를 만나면 실행문을 수행하고 바로 Select Case문을 빠져나온다. 그러므로 가능성이 큰 Case를 코드 앞부분에 두는게 효율적이다.

Select Case 판단대상         
    Case 판단할 값1
        값1일때 실행할 코드
    Case 판단할 값2
        값2일 때 실행할 코드
    Case Else
        그외의 경우 실행할 코드
End Select        
※ 판단 대상 : 수식, 변수


※ 판단할 값이 여러개면 쉼표( , )로 구분
Case 7, 8 
   실행문1
Case 9,10
   실행문2
Sub Discout()

    Dim Quantity As Variant
    Dim Discount As Double
    
    Quantity = InputBox("Enter Quantity : ")
    Select Case Quantity
        Case ""
            Exit Sub
        Case Is < 25
            Discount = 0.1
        Case 25 To 49
            Discount = 0.15
        Case 50 To 74
            Discount = 0.2
        Case Else
            Discount = 0.25
    End Select
  
    MsgBox "Discount : " & Discount
        
End Sub
Sub SelectionType()
    ' 선택영역의 타입 출력
    Select Case TypeName(Selection)
        Case "Range"
            Select Case Selection.Count
                Case 1
                    MsgBox "One call is selected"
                Case Else
                    MsgBox Selection.Rows.Count & "rows"
            End Select
        Case "Nothing"
            MsgBox "Nothing is selected"
        Case Else
            MsgBox "Sonething other than a range"
    End Select
    
End Sub





 

 For ~Next문

    For Each 요소 In 컬렉션 문

For Counter변수 = 시작 To [ Step StepVal ]
    실행문
    [ Exit For ]
Next [ Counter변수]
Sub DeleteRow()
    ' 10행~2행 까지 짝수행 삭제
    Dim RowNum As Long
    
    For RowNum = 10 To 2 Step -2  'Step이 음수(감소)
        Rows(RowNum).Delete
    Next
    
End Sub




Sub DeleteRow()
    ' 세로방향으로 1 ~100 숫자 채우기
    Dim StartVal As Integer
    Dim NumToFill As Integer
    Dim cnt As Integer
    
    StartVal = 1
    NumToFill = 100
    For cnt = 0 To NumToFill - 1
        ActiveCell.Offset(cnt, 0).Value = StartVal + cnt
    Next
        
End Sub

 

 Do ~ Loop문

    Do While ~ Loop문, Do ~ While Loop문   : 조건이 True인 동안 실행문 실행

    Do Until ~ Loop문, Do ~ Until Loop문      : 조건이 True일 때 까지 실행문 실행

Do [ While 조건 ]
    실행문
    [ Exit Do ]
Loop
Do 
    실행문
    [ Exit Do ]
Loop [ While 조건 ]
Sub DateFill()
    '[A1]셀부터 이달의 말까지 채우기
    Dim TheDate As Date
    
    TheDate = Date
    [a1].Activate
    Do While Month(Date) = Month(TheDate)
        Selection.Value = TheDate
        TheDate = TheDate + 1
        ActiveCell.Offset(1, 0).Activate
    Loop
    
End Sub
Do [ Until 조건 ]
    실행문
    [ Exit Do ]
Loop
Do 
    실행문
    [ Exit Do ]
Loop [ Until 조건 ]
Sub FileReadWrite()
    ' 줄단위 읽어 [A1]부터 세로 방향으로 쓰기
    Dim LineCnt As Long
    Dim LineOfText As String
    
    Open "C:\Users\TaeIk\Documents\test.txt" For Input As #1
    LineCnt = 0
    
    Do While Not EOF(1)
        Line Input #1, LineOfText
        [A1].Offset(LineCnt, 0) = LineOfText
        LineCnt = LineCnt + 1
    Loop
    Close #1

End Sub

※ While ~ Wend문   = Do While ~ Loop문