본문 바로가기
WeekdayLife/excel

[엑셀VBA] 문자와 숫자가 섞여있는 셀값에서 숫자만 추출하기

by JO_i 2022. 9. 23.

상당히 귀찮은 일

어느날 업무 메일을 받았는데,

사과 30,000,000원

딸기 20,000,000원

과자 1,000,000원

과자 비율 : 2%

이 딴식으로 글이 써있다고 치고, 위의 내용을 엑셀로 복사하면 상당히 귀찮은 일이 펼쳐진다.

복사를 하면 아래그림과 같이 될 것이기 때문이다.

 

 

 

 

숫자만 빼서 사용하고 싶다.

반복적으로 사용할 수 있을 거 같으니, 가장 쉬운 방법으로 VBA를 짜본다.

 

 

 

음. 원했던 기능까지는 잘된다. 제약사항은 다음과 같다.

[전제] 첫번째 나오는 숫자 배열만 인식

[전제] ,,+,-,%는 숫자로 인식

 

[전제] 비연속적이지 않은 숫자에서는 멈춘다.

[제한] (1.금액 : 3,000,000원) 숫자를 앞에 쓴 문장이라면 당연히 거기서 멈춘다. 1만 추출된다.

[제한] (- 3,000,000) 처럼 +또는-를 숫자와 한칸 띄어 썼다면 - 만 추출된다.(비연속)

[제한] (- 금액 : 3,000,000원) 처럼 -를 사용했다면, - 만 추출된다.(비연속)

 

[제한] (300만원) 처럼 단위가 글로 적혀 있어도, 그냥 숫자 "300"만 추출

 

 

Sub sepText()

'현재 셀의 값이 한글/영문/공백/숫자가 섞여 있을때,
'첫 번째 숫자를 우측 셀에 반환합니다.
'

'배열변수
Dim mytxtarray() As String

'현재 셀
mytxt = ActiveCell
'현재 셀 값의 길이
mytxtlen = Len(mytxt)

'배열변수의 길이 설정
ReDim mytxtarray(mytxtlen)

'첫번째 숫자 배열 이후에, 다른 문자가 나올경우 멈출 수 있는 카운터
counter = 0

For i = 1 To mytxtlen
    mytxtarray(i) = Mid(mytxt, i, 1)
   
    If IsNumeric(mytxtarray(i)) Or mytxtarray(i) = "-" Or mytxtarray(i) = "+" Or mytxtarray(i) = "," Or mytxtarray(i) = "%" Or mytxtarray(i) = "." Then
        ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(0, 1).Value & mytxtarray(i)
        counter = 3    
    Else
        If counter <> 3 Then
            counter = 1
        Else: GoTo dd:
        End If
    End If
Next i

dd:

End Sub

 

 

시간이 있으면, 좀 다듬어 보는 것도 좋겠다.