엑셀 VBA에서 Val 함수는 문자열에서 숫자를 추출하여 숫자 형식으로 변환하는 함수입니다.
즉, 숫자가 포함된 문자열에서 숫자만 가져와 계산할 수 있도록 도와줍니다.
1. 기본 문법
Val(문자열)
|
- 문자열 → 숫자로 변환할 대상 문자열
📌 문자열의 앞부분에서 숫자가 시작되면 숫자로 변환
📌 공백, 문자 등을 만나면 변환을 멈춤
📌 소수점(.)은 인식하지만, 쉼표(,)는 무시됨
2. 기본 사용 예제
Sub 기본_Val()
Dim 결과 As Double
결과 = Val("123")
MsgBox 결과
End Sub
|
📌 출력: 123
📌 문자열 "123"이 숫자로 변환됨
3. 문자와 숫자가 섞인 경우
Sub 문자_숫자_혼합()
Dim 결과 As Double
결과 = Val("123ABC456")
MsgBox 결과
End Sub
|
📌 출력: 123
📌 숫자가 끝나는 "A"에서 변환 중지
4. 숫자가 중간에 있는 경우
Sub 중간숫자()
Dim 결과 As Double
결과 = Val("ABC123XYZ")
MsgBox 결과
End Sub
|
📌 출력: 0
📌 문자가 먼저 나오면 숫자로 변환되지 않음
5. 공백이 포함된 숫자 변환
Sub 공백_포함()
Dim 결과 As Double
결과 = Val(" 456")
MsgBox 결과
End Sub
|
📌 출력: 456
📌 앞쪽 공백은 무시됨
6. 소수점 포함된 숫자 변환
Sub 소수점_포함()
Dim 결과 As Double
결과 = Val("3.14PI")
MsgBox 결과
End Sub
|
📌 출력: 3.14
📌 소수점(.)은 인식되지만, "PI"를 만나 변환 중지
7. 쉼표 포함된 숫자 변환 (쉼표 무시됨)
Sub 쉼표_포함()
Dim 결과 As Double
결과 = Val("1,234.56")
MsgBox 결과
End Sub
|
📌 출력: 1
📌 쉼표(,)를 만나 변환 중지됨 → 사용하지 않는 것이 좋음
🔹 쉼표를 포함한 숫자를 변환하려면 Replace를 활용
Sub 쉼표제거_Val()
Dim 결과 As Double
결과 = Val(Replace("1,234.56", ",", ""))
MsgBox 결과
End Sub
|
📌 출력: 1234.56
📌 쉼표 제거 후 변환 가능
8. 문자열에서 숫자만 추출하기
Sub 숫자만_추출()
Dim 원본 As String, 결과 As String
원본 = "상품코드: A123B456"
Dim i As Integer
For i = 1 To Len(원본)
If IsNumeric(Mid(원본, i, 1)) Then
결과 = 결과 & Mid(원본, i, 1)
End If
Next i
MsgBox "숫자만 추출: " & 결과
End Sub
|
📌 출력: "123456"
📌 문자열 내 숫자만 추출하여 변환
9. 셀 값에서 숫자만 가져오기
Sub 셀_숫자추출()
Dim 셀값 As String, 결과 As Double
셀값 = Range("A1").Value
결과 = Val(셀값)
Range("B1").Value = 결과
End Sub
|
📌 A1 셀 값에서 숫자 부분만 추출하여 B1에 저장
📌 "가격: 500원" → 500 저장
10. 사용자 입력값 숫자로 변환
Sub 사용자입력_숫자변환()
Dim 입력값 As String, 숫자값 As Double
입력값 = InputBox("숫자를 입력하세요:")
숫자값 = Val(입력값)
If 숫자값 = 0 And 입력값 <> "0" Then
MsgBox "숫자가 아닌 값이 입력되었습니다.", vbExclamation
Else
MsgBox "입력한 숫자: " & 숫자값
End If
End Sub
|
📌 입력값이 숫자가 아니면 경고 메시지 출력
📌 "1000abc" 입력 시 → "입력한 숫자: 1000"
11. Val vs CDbl 비교
함수
|
설명
|
Val("100abc")
|
100 → 숫자가 끝나는 곳에서 변환 중지
|
CDbl("100abc")
|
오류 발생 (Type Mismatch)
|
Val("1,234.56")
|
1 (쉼표를 만나 변환 중지)
|
CDbl("1,234.56")
|
오류 발생
|
Val("3.14pi")
|
3.14 (문자를 만나 변환 중지)
|
CDbl("3.14pi")
|
오류 발생
|
📌 CDbl은 숫자만 포함된 문자열만 변환 가능, Val은 숫자 앞부분만 변환
📌 쉼표(,)를 포함한 숫자는 Replace 후 Val 사용
📝 정리
기능
|
VBA 코드
|
기본 숫자 변환
|
Val("123")
|
문자가 섞인 경우 변환
|
Val("123ABC") → 123
|
중간 숫자 변환 안됨
|
Val("ABC123") → 0
|
공백 포함 숫자 변환
|
Val(" 456") → 456
|
소수점 포함 변환
|
Val("3.14PI") → 3.14
|
쉼표 포함 숫자 변환
|
Val(Replace("1,234.56", ",", "")) → 1234.56
|
문자열에서 숫자만 추출
|
If IsNumeric(Mid(문자열, i, 1)) Then
|
셀 값에서 숫자 추출
|
Val(Range("A1").Value)
|
사용자 입력값 숫자로 변환
|
Val(InputBox("숫자 입력"))
|
🔥 VBA의 Val을 활용하면 문자열에서 숫자를 쉽게 변환할 수 있습니다! 🚀