엑셀 영어 추출 - egsel yeong-eo chuchul

숫자, 영문자, 한글, 기호를 선택하여 추출하는 VBA함수 소스

A열에 입력된 혼합 문자에서 원하는 유형만 추출해 주는 VBA 함수입니다.

VB 편집기에 작성된 사용자 정의 함수 소스가 있습니다.

[사용자 정의 함수 사용 방법]

1. 함수 마법사에서 [사용자 정의]를 선택하면 작성된 [선택추출] 함수가 표시됩니다.

2.함수를 선택하면 다른 일반 함수처럼 인수를 입력할 수 있습니다.

    1번째 인수는 셀 주소를 입력하고, 2번째 인수는 아래의 4개 중에서 하나를 입력합니다.

     숫자(구분:N, 생략), 영문자(구분:E), 한글(구분:H), 기타문자(구분:O)

3. 함수 복사 방법은 다른 일반 함수와 동일합니다.

아래와 같이 숫자와 영문이 혼합되어 있는 셀에서 영문만 골라내는 수식과 사용자정의함수입니다.

먼저 Chronicle님의 수식입니다.

=MID(A1,MATCH(TRUE,ISERROR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1),0),LEN(A1)-COUNT(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1))

위 수식의 풀이 과정입니다.
    1. 영문자가 시작되는 위치를 파악합니다.
    2. 영문자의 수를 알아냅니다.(총 글자수에서 숫자의 글자수를 뺍니다.) 

다음은 VBA를 이용한 사용자정의함수입니다.
셀에서 영문자만 골라내는 방법은 여러가지가 있습니다.
저는 텍스트 처리에 특화된 정규식을 선택했습니다.
셀 내용 중 영문자만 쏙쏙 골라내는 간단한 규칙입니다.
그 결과는 아래 그림과 같습니다.

Option Explicit

Function GetEng(MyData As StringAs String

With CreateObject("Vbscript.RegExp")    '정규식 생성

.IgnoreCase = True  '대소문자 구분X

.Pattern = "[a-z]+" '영문자만 체크

If .test(MyData) Then   '영문자가 있으면 영문자만 출력

GetEng = .Execute(MyData)(0)

Else    '영문자가 없으면 - 출력

GetEng = "-"

End If

End With

End Function

cs

이제 그 속을 들여다보겠습니다.
정규식의 핵심은 바로 패턴입니다.
영문자만 추출한다는 [a-z]+ 라는 패턴을 사용했습니다.
    1. a부터 z까지이므로 모든 알파벳을 뜻하고
    2. 뒤에 +가 있으니 알파벳이 연속으로 등장하는구나라는 걸 추측할 수 있습니다.

IgnoreCase = True 를 보면 대소문자를 무시한다는 뜻으로 짐작이 갑니다.
비주얼베이직의 특장점 중 하나가 언어를 몰라도 글자만으로 그 뜻을 알 수 있다는 것이지요.

문자만+추출하기.xlsm

한글, 영문, 숫자, 특수문자 등 여러 종류의 문자가 섞여 있을 경우 특정 종류의 문자만 추출하는 VBA 입니다.

원하는 셀에 "=fn문자추출($A4,1)" 입력하고, 1대신 아래 항목중 선택 하면 해당 종류의 문자만 추출 됩니다.

1 : 숫자, 2 : 영문, 3 : 한글, 4 : 기타

VBA 코드는 아래와 같습니다.

더보기

Function fn문자추출(문자열 As String, 구분 As Integer) As String
  Dim i As Integer
  Dim K As String
  Dim NumStr As String, EngStr As String, HanStr As String, EtcStr As String
                                 
  For i = 1 To Len(문자열)
      K = Mid(문자열, i, 1)
      Select Case K
         Case "0" To "9"
           NumStr = NumStr & K
         Case "."
           NumStr = NumStr & K
         Case "A" To "Z"
           EngStr = EngStr & K
         Case "a" To "z"
           EngStr = EngStr & K
         Case "ㄱ" To "홓"
           HanStr = HanStr & K
         Case Else
           EtcStr = EtcStr & K
      End Select
  Next
  
  Select Case 구분
      Case 1:          fn문자추출 = NumStr
      Case 2:          fn문자추출 = EngStr
      Case 3:          fn문자추출 = HanStr
      Case 4:          fn문자추출 = EtcStr
      Case Else:       fn문자추출 = "오류"
  End Select
End Function

문자 선택적 추출.xlsm

0.02MB

Toplist

최신 우편물

태그