VBA Function

CHOOSE 함수

노만e 2025. 3. 15. 05:23

엑셀 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 사용 시 주의할 점

  1. 인덱스 값(Index)은 1부터 시작해야 하며, 0 이하 또는 범위를 초과하면 오류 발생
  2. vba
  3. MsgBox CHOOSE(0, "A", "B", "C") ' 오류 발생 (인덱스는 1 이상이어야 함) MsgBox CHOOSE(4, "A", "B", "C") ' 오류 발생 (인덱스 초과)
  4. 인덱스 값이 실수(2.7 등)인 경우, VBA가 소수점 이하를 버리고 정수로 처리 (Int(2.7) = 2)
  5. vb
  6. MsgBox CHOOSE(2.7, "A", "B", "C") ' 결과: "B"
  7. 배열을 인수로 사용할 수 없음
  8. vba
  9. 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를 활용하면 인덱스 기반으로 동적인 값을 선택할 수 있습니다! 🚀