VBA Function

Val 함수

노만e 2025. 3. 16. 17:35

엑셀 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을 활용하면 문자열에서 숫자를 쉽게 변환할 수 있습니다! 🚀