엑셀 VBA에서 CHOOSE 함수는 지정된 인덱스(Index) 값에 따라 여러 개의 옵션 중 하나를 선택하여 반환하는 함수입니다.
즉, 여러 개의 값 중 특정 인덱스 위치의 값을 반환하는 역할을 합니다.
1. 기본 문법
CHOOSE(Index, Option1, Option2, Option3, ...)
|
매개변수
|
설명
|
Index
|
선택할 값의 인덱스 (1부터 시작)
|
Option1, Option2, ...
|
선택 가능한 값 목록
|
📌 인덱스 값이 1이면 첫 번째 옵션 반환, 2이면 두 번째 옵션 반환, ...
📌 인덱스가 범위를 벗어나면 오류 발생 (Run-time error '5': Invalid procedure call or argument)
2. 기본 사용 예제
Sub CHOOSE_예제()
Dim 결과 As String
결과 = CHOOSE(2, "사과", "바나나", "포도", "망고")
MsgBox "선택된 과일: " & 결과
End Sub
|
📌 인덱스 2이므로 "바나나"가 반환됨
3. 숫자 선택 예제
Sub 숫자선택()
Dim 선택된숫자 As Integer
선택된숫자 = CHOOSE(3, 10, 20, 30, 40)
MsgBox "선택된 숫자: " & 선택된숫자
End Sub
|
📌 인덱스 3이므로 30이 반환됨
4. 요일 변환 예제
Sub 요일출력()
Dim 요일 As String
요일 = CHOOSE(Weekday(Date), "일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일")
MsgBox "오늘은 " & 요일 & "입니다!"
End Sub
|
📌 오늘 날짜의 요일을 한글로 출력 (Weekday(Date)는 1~7 반환, CHOOSE를 이용하여 변환)
5. 무작위 선택 (랜덤 인덱스)
Sub 랜덤선택()
Dim 랜덤값 As Integer
Dim 결과 As String
Randomize
랜덤값 = Int(4 * Rnd) + 1 ' 1~4 범위의 무작위 숫자 생성
결과 = CHOOSE(랜덤값, "빨강", "파랑", "초록", "노랑")
MsgBox "랜덤으로 선택된 색상: " & 결과
End Sub
|
📌 1~4 중 랜덤한 숫자를 생성한 후, CHOOSE로 색상 선택
6. 사용자 입력 값에 따라 다른 결과 반환 (InputBox 활용)
Sub 사용자선택()
Dim 선택번호 As Integer
Dim 결과 As String
선택번호 = InputBox("1~3 중 하나를 입력하세요:")
If 선택번호 >= 1 And 선택번호 <= 3 Then
결과 = CHOOSE(선택번호, "김밥", "라면", "돈까스")
MsgBox "당신이 선택한 음식: " & 결과
Else
MsgBox "잘못된 번호입니다!"
End If
End Sub
|
📌 사용자가 1~3 중 하나를 입력하면 해당 음식 반환
📌 범위를 벗어난 숫자를 입력하면 "잘못된 번호" 메시지 표시
7. 함수의 반환값을 WorksheetFunction.Max와 함께 사용
Sub 최대값선택()
Dim 최대값 As Integer
최대값 = WorksheetFunction.Max(CHOOSE(1, 50, 100, 30), CHOOSE(3, 50, 100, 30))
MsgBox "최대값: " & 최대값
End Sub
|
📌 첫 번째 CHOOSE는 50을, 세 번째 CHOOSE는 30을 반환하므로, Max(50, 30) = 50이 출력됨
8. CHOOSE를 이용한 함수 조합
Sub 연산선택()
Dim 연산자 As Integer
Dim 결과 As Double
연산자 = InputBox("1: 더하기, 2: 빼기, 3: 곱하기, 4: 나누기 중 선택:")
결과 = CHOOSE(연산자, 10 + 5, 10 - 5, 10 * 5, 10 / 5)
MsgBox "연산 결과: " & 결과
End Sub
|
📌 사용자가 선택한 연산에 따라 계산을 수행 (1=더하기, 2=빼기, 3=곱하기, 4=나누기)
9. CHOOSE를 활용한 범위 지정
Sub 특정범위_선택()
Dim 선택번호 As Integer
Dim 선택된범위 As Range
선택번호 = InputBox("1~3 중 하나를 입력하세요:")
Set 선택된범위 = CHOOSE(선택번호, Range("A1:A10"), Range("B1:B10"), Range("C1:C10"))
선택된범위.Interior.Color = RGB(255, 255, 0) ' 노란색으로 변경
MsgBox "선택된 범위의 배경색이 변경되었습니다!"
End Sub
|
📌 사용자가 1~3을 입력하면 A, B, C 열 중 선택된 범위의 배경색을 변경
📌 CHOOSE 사용 시 주의할 점
- 인덱스 값(Index)은 1부터 시작해야 하며, 0 이하 또는 범위를 초과하면 오류 발생
- vba
- MsgBox CHOOSE(0, "A", "B", "C") ' 오류 발생 (인덱스는 1 이상이어야 함) MsgBox CHOOSE(4, "A", "B", "C") ' 오류 발생 (인덱스 초과)
- 인덱스 값이 실수(2.7 등)인 경우, VBA가 소수점 이하를 버리고 정수로 처리 (Int(2.7) = 2)
- vb
- MsgBox CHOOSE(2.7, "A", "B", "C") ' 결과: "B"
- 배열을 인수로 사용할 수 없음
- vba
- Dim arr As Variant arr = Array("사과", "바나나", "포도") MsgBox CHOOSE(2, arr) ' 오류 발생 (배열 직접 입력 불가)
📝 정리
기능
|
VBA 코드 (CHOOSE 활용)
|
리스트에서 특정 값 선택
|
CHOOSE(2, "사과", "바나나", "포도") → "바나나"
|
숫자 선택
|
CHOOSE(3, 10, 20, 30, 40) → 30
|
요일 변환
|
CHOOSE(Weekday(Date), "일", "월", "화", "수", "목", "금", "토")
|
랜덤 선택
|
CHOOSE(Int(4 * Rnd) + 1, "빨강", "파랑", "초록", "노랑")
|
사용자 입력 값 처리
|
CHOOSE(InputBox("입력: 1~3"), "A", "B", "C")
|
연산 선택
|
CHOOSE(2, 10+5, 10-5, 10*5, 10/5) → 5
|
🔥 VBA의 CHOOSE를 활용하면 인덱스 기반으로 동적인 값을 선택할 수 있습니다! 🚀