VBA의 가장 대표적인
조건판단문으로는 초보때부터 달달 외우던 If구문이 있습니다. 그리고 그 다음으로 많이 사용하는 것이
Select Case구문이 있습니다. Select Case문은 지난 시간에 다음과 같이 사용했습니다.
Select Case Weekday(MyDate)
Case 1 : str=”일요일”
Case 2 : str=”월요일”
Case 3 : str=”화요일”
Case 4 : str=”수요일”
Case 5 : str=”목요일”
Case 6 : str=”금요일”
Case 7 : str=”토요일”
End Select
MsgBox str
그러나 조건판단을 도와주는 자주 사용하지 않는 함수가 있습니다.
Choose()와 Swicth()함수는 조건판단에 따라 적절한 값을 돌려주는 함수입니다.
Choose()함수는 1부터 시작하는 인덱스값에 따라 해당하는 값을 돌려줍니다.
Sub demoChoose()
Debug.Print GetChoice(1)
End SubFunction
GetChoice(Ind As Integer)
GetChoice = Choose(Ind, "Speedy", "United",
"Federal")
End Function |
위의
GetChoice()함수는 Choose()함수를 사용합니다. 이 함수는 "Speedy",
"United", "Federal" 라는 목록을 가지고 있으며 ‘Ind’라는 변수에 따라 목록중
하나를 돌려줍니다. Ind=1이면 "Speedy"를 돌려주고 Ind=2이면 "United"를
돌려줍니다. 마지막으로 Ind=3이면 "Federal" 을 돌려줍니다. 만일 Ind변수값이
1,2,3중 하나가 아니고 0 이나 4이상이면 Null값을 돌려줍니다.
Choose()함수 대신 Array()함수를 사용할
수 있습니다. Array()함수는 제 뉴스레터에 종종 등장하죠. 이것은 배열을 만들어 주는
함수입니다.
Function
GetChoice(Ind As Integer)
GetChoice = Array("Speedy", "United", "Federal")(Ind)
End Function |
Array("Speedy", "United",
"Federal")로 배열을 만들고 잉크가 마르기 전에 바로 각 배열의 원소를 접근하기 위해
Array("Speedy", "United", "Federal")뒤에 (Ind)를 붙여
Array("Speedy", "United", "Federal")(Ind)와 같이 사용합니다.
다만 이것은 배열이므로 “Option Base 1”을 사용하지
않는 한 배열의 인덱스는 0부터 시작합니다. Choose()함수의 인덱스가 1부터 시작하는 것과는
다르죠. 또한 배열의 인덱스를 벗어난 값을 주게 되면 - 예를 들어 이번 예에서는 4 또는 5와 같은
– 다음 그림과 같은 달리는 시간 오류(런타임 오류)가 발생합니다
이런 오류를 신경쓰지
않으려면 그냥 속편하게 Choose함수를 사용하는 게 나을 것 같습니다. 만일 Choose()함수에서
인덱스를 벗어나는 경우를 대비한다면 Choose()함수가 돌려주는 Null을 IsNull()함수를
체크하면 됩니다. |