나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 조삿갓 (choga21)

추천:  2
파일:     조회:  4055
제목:   [강좌] Select Case 구문과 If Else 구문의 장단점 비교
     
  Select Case 구문은 If Else 구문을 특정 상황에서 간략하게 표현하기 위한 것입니다.
다음 예를 비교해 보시면 
"이런 상황에서는 Select Case 구문이 아주 편리하겠구나!"
하고 느끼실 것입니다.

char = Mid(MyString, c, 1)
If char >= "가" And char <= "힣" Then
    한글코드_처리
ElseIf (char >= "一" And char <= "龜") Or (char >= "豈" And char <= "廓") Then
    한자글코드_처리
ElseIf char = "+" Then
    덧셈_처리
ElseIf char = "*" Or LCase(char) = "x" Then
    곱셈_처리
ElseIf IsNumeric(char) Then
    수치_처리
ElseIf char <= " " Then
    제어코드_처리
Else
    예외처리
End If

다음은 이와 똑같은 기능을 수행하는 Select Case 조건 블록입니다.

Select Case Mid(MyString, c, 1)
    Case "가" To "힣"
        한글코드_처리
    Case "一" To "龜", "豈" To "廓"
        한자글코드_처리
    Case "+"
        덧셈_처리
    Case "*", "x", "X"
        곱셈_처리
    Case "0" To "9"
        수치_처리
    Case Is <= " "
        제어코드_처리
    Else
        예외처리
    Case Else
End Select

차이가 확실히 느껴지지요?
다만 Case 이후의 조건식에서는 판정 대상이 되는 변수에 
IsNumeric이나 LCase와 같은 함수를 덧씌우지는 못합니다.


한편, 어떤 상황(조건이 규칙적이거나 배열요소 등을 활용할 경우)에서는
If 구문에 반복문을 결합하여 사용하는 것이
여러 Case를 반복적으로 나열하는 것보다 효율적일 때가 있습니다.

다음 예를 보시죠

    season = Array("봄", "여름", "가을", "겨울")
    mount = Array("금강산", "봉래산", "풍악산", "계골산")
    For s = 0 To 3
        If mystr = mount(s) Then Exit For
    Next s
    If s < 4 Then
        MsgBox season(s) & "에는 " & mount(s), , "철따라 새 옷 갈아입는 금강산"
    Else
        MsgBox "그런 계절도 있나요?", , "입력 오류"
    End If

첫 번째의 조건 검색 구문은 반복문과 If 구문을 결합하여 간소화했고
두 번째의 조건 분지 명령도 하나의 조건에 대해 참인가 거짓인가만 분지되므로 If 구문이 더 편리할 것입니다.

그런데, 이것을 다음과 같이 하면 문법 오류가 됩니다.

    season = Array("봄", "여름", "가을", "겨울")
    mount = Array("금강산", "봉래산", "풍악산", "계골산")
    Select Case m
        For s = 0 To 3
        Case mount(s)
            MsgBox season(s) & "에는 " & mount(s), , "철따라 새 옷 갈아입는 금강산"
        Next m
        Case Else
            MsgBox "그런 계절도 있나요?", , "입력 오류"
    End Select

얼핏 생각하면 반복적인 Case 블록의 나열을 For 루프로 간편화 하려는 의도인데
이건 반칙입니다. 왜냐하면 For/Next 블록과 Case/Case 블록이 서로 교차하기 때문이지요.

다음의 경우처럼 각 명령 블록들 사이에 완전한 포함관계가 되면 괜찮지만
두 개의 서로 다른 블록이 일부만 교차하여 교집합을 형성하고 있으면 안됩니다.

    Select Case m
        Case ...
            For ...
                ....
            Next ..
        Case ...
            ...
        Case Else
            Do
                ...
            Loop
    End Select

    For ...
        Select Case m
            Case ...
                    ....
            Case Else
                Do
                    ...
                Loop
        End Select
    Next ..
 
[불량 게시물 신고]  
참죤날다목적인 방법을 알려 주심에 감사드립니다.
열심히 배우겠습니다
감사합니다
09-14 (15:34)
삭제 ■신고
        
  

작성일 : 2017-09-14(10:35)
최종수정일 : 2017-09-14(10:39)
 


 ◎ 관련글

  제 목   작성자   날짜
목록상자에 자료 일괄 불러오기 참죤날 2017-09-13
[강좌] Select Case 구문과 If Else 구문의 장단점 비교 조삿갓 2017-09-14