상당히 귀찮은 일
어느날 업무 메일을 받았는데,
사과 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
시간이 있으면, 좀 다듬어 보는 것도 좋겠다.
끝