[ 숫자 문자 혼용한 숫자에 콤마를 삽입하기 ] 에 대해 알아봅니다.
 
A B
홍길동1000000 홍길동1,000,000
홍길동1000 전우치 2000 홍길동1,000 전우치 2,000
12345만세34568조중동폐간 12,345만세34,568조중동폐간


Sheet1
시트 에 사용한 수식
입니다. by MicroSoft Excel v 2003
   $ 가 있는 수식은 절대(혼합)참조로 셀 주소를 고정합니다. 참조하세요!!
No 셀주소 왼쪽의 셀에 수식을 넣으면 오른쪽 결과가 나옵니다.
(복사)를 누르면 셀의 수식이 클립보드(메모리)로 복사되는데,
익스플로러의 종류에 따라 (복사)가 작동이 안 될 수 있습니다.
결과 수식을
1 B2 =SampleStrNum(A2) 홍길동1,000,000
2   B2  셀의 수식을 여기에 복사하세요 -→ B2:B4    

   보시는 내용은 위의 표에 값이, 아래의 표에는 해당 셀의 수식이 있습니다.   
   첨부파일을 참조하시거나, 원하는 부분을 시트(셀)에 붙여 넣으세요.
     도움이 되시기를 바랍니다.

Option Explicit

Function SampleStrNum(MyStr As String)
Dim i As Double, j As Double, k As Double
Dim Strr As String  '한 글자씩 오려내는 문자변수
Dim cnt As Double   '문자열의 길이
Dim VarStr() As String   '문자열끼리 모이는 임시변수
Dim VarNum() As String   '숫자끼리 모이는 임시변수
Dim Power1 As String     '직전에 처리한게 숫자였냐 문자냐
Dim Power2 As String     '지금 처리할 문자가 숫자냐 문자냐
Dim MyAnsw() As String   '최종 결과
Dim Num1st As Boolean    '첫 부분이 숫자이냐 아니냐
ReDim VarStr(1 To 1) As String     '문자열끼리 모이는 임시변수
ReDim VarNum(1 To 1) As String     '숫자끼리 모이는 임시변수
     cnt = Len(MyStr)    '입력받은 문자열의 길이

For i = 1 To cnt         '문자열 처음부터 끝까지를 보되
Strr = Mid(MyStr, i, 1)  '그 중 지정한 위치의 한 글자
     If IsNumeric(Strr) Then  '그 글자가 숫자이면
          Power2 = "num"      '지금 처리할 문자가 숫자면 Power2 를 num 으로
          If Power1 <> Power2 Then      'Power1 , Power2 가 다르다면
               j = j + 1      '숫자용 변수를 하나 증가시키고
               ReDim Preserve VarNum(1 To j) As String '변수를 재 선언하고
               Power1 = Power2     'Power1 , Power2 를 일치시킵니다.
          End If
               VarNum(j) = VarNum(j) & Strr  '해당 변수에 있는 숫자에 지금 숫자 한자리를 붙입니다.
     If i = 1 Then Num1st = True        '첫 부분이 숫자이냐 아니냐만을 판단합니다
     Else
          Power2 = "str"      '지금 처리할 문자가 문자라면 Power2 를 str 으로
          If Power1 <> Power2 Then      'Power1 , Power2 가 다르다면
               k = k + 1      '문자용 변수를 하나 증가시키고
               ReDim Preserve VarStr(1 To k) As String '변수를 재 선언하고
               Power1 = Power2     'Power1 , Power2 를 일치시킵니다.
          End If
               VarStr(k) = VarStr(k) & Strr  '해당 변수에 있는 숫자에 지금 숫자 한자리를 붙입니다.
     End If
Next
     If j > k Then  '숫자용 변수의 개수 j 와
          cnt = j   '문자용 변수 k 중 큰거를 기준으로합니다
     Else
          cnt = k
     End If
ReDim MyAnsw(1 To cnt) As String   '결과 배열을 만든 다음
If Num1st = True Then              '첫 부분이 숫자이면 여기를 수행
     For i = 1 To cnt
          If Not IsEmpty(VarNum(i)) Then     '숫자 부분이 공백 아니면(값이 있으면)
          MyAnsw(i) = Format(VarNum(i), "#,#")    ' 천단위 , 찍은값으로 표시
          End If
     MyAnsw(i) = MyAnsw(i) & VarStr(i)       '좀전에 받은 숫자와 문자변수중 하나를 연결합니다
     Next
Else                               '첫 부분이 문자이면 여기를 수행
     For i = 1 To cnt
     MyAnsw(i) = VarStr(i)         '문자변수중 하나를 대입한 다음
          If Not IsEmpty(VarNum(i)) Then     '숫자 부분이 공백 아니면(값이 있으면)
          MyAnsw(i) = MyAnsw(i) & Format(VarNum(i), "#,#")  ' 천단위 , 찍은값을 연결합니다
          End If
     Next
End If
SampleStrNum = Join(MyAnsw, "")    '숫자와 문자를 연결한 MyAnsw 의 각 값을 하나로 모읍니다.
End Function

잘 안될 경우 메일 주시거나 리플 남겨주세요



Posted by 오즈맨스머프