엑셀 팁 - 한 셀에 들어있는 영어 + 한글을 별개의 셀로 분리하는 작업 지난 번에 쓴 글과 비슷한 내용인데 A처럼 되어있는 것을 B와 C열로 분리하는 작업이다. Option Explicit Sub macro() Dim r As Range Dim lc As Long Dim s As String Dim bl As Boolean For Each r In Range("A1").EntireColumn.SpecialCells(2) Do lc = lc + 1 s = Mid(r, lc, 1) If Asc(s) = 32 Then bl = False ElseIf Asc(s) < 97 Or Asc(s) > 122 Then bl = True End If Loop Until bl = True r(, 2) = Left(r, lc - 1) r(, 3) = Mid(r, lc) lc = 1 bl = False Next End Sub SpecialCells(2) 는 상수값이 들어있는 셀을 의미한다. 쉽게 말해 빈칸이 아닌 셀을 말한다. s = Mid(r, lc, 1) 해당 문자열에서 한 글자씩 떼어내서 아스키값을 검사한다. Asc(s) = 32 아스키값 32는 공백 한칸이다. 1,4 행처럼 숙어도 있기 때문에 공백을 발견하면 자르는 것이 아니라, 영어 소문자가 아닌 것을 만나면 잘라야한다. 그래서 공백이 나올때는 무시하고 지나간다. ElseIf Asc(s) < 97 Or Asc(s) > 122 Then 영어 소문자의 아스키값은 97~122이다. 이 범위에서 벗어나는지를 검사한다. bl = True 영어 소문자가 아니면 bl을 True로 설정하고, Loop Until bl = True bl이 True이면 순환문을 종료 r(, 2) = Left(r, lc - 1) 오른쪽 한칸 위치에는 문자열 왼쪽부터 종료한 위치까지 r(, 3) = Mid(r, lc) 오른쪽 두칸 위치에는 종료한 위치부터 문자열 끝까지 숫자, 영문자, 한글, 기호를 선택하여 추출하는 VBA함수 소스 A열에 입력된 혼합 문자에서 원하는 유형만 추출해 주는 VBA 함수입니다. VB 편집기에 작성된 사용자 정의 함수 소스가 있습니다. [사용자 정의 함수 사용 방법] 1. 함수 마법사에서 [사용자 정의]를 선택하면 작성된 [선택추출] 함수가 표시됩니다. 2.함수를 선택하면 다른 일반 함수처럼 인수를 입력할 수 있습니다. 1번째 인수는 셀 주소를 입력하고, 2번째 인수는 아래의 4개 중에서 하나를 입력합니다. 숫자(구분:N, 생략), 영문자(구분:E), 한글(구분:H), 기타문자(구분:O) 3. 함수 복사 방법은 다른 일반 함수와 동일합니다. 출처 : 엑셀 하루에 하나씩 카페 1.해당 엑셀 시트에서 Alt+F11을 누르거나, 도구-매크로-'Visual Basic Editor"를 실행합니다. ** 단점은 띄어쓰기가 된 걸 인식하지 못한다는 것이다. 아래 함수를 직접 만들어주신 분께 정말 감사드립니다 Function CutText(sText As String, Optional LanguageType As Integer = 1) As Variant ' ---------------------------------------------------------------------------------------- ' 설명 : 인수로 전달한 sText 에서 LanguageType 의 값에 따라 지정한 ' 형식의 텍스트만 분리해서 전달합니다. ' LanguageType 의 사용값 ' 1 : 숫자 ' 2 : 영어 : 띠어쓰기 인식하도록 " " 추가하고, ' 인식하도록 추가 ' 3 : 한글 ' 4 : 한자 ' 작성일 : 2005 / 9 / 20 ' ---------------------------------------------------------------------------------------- Dim sCut As String Dim sTMP As String Dim i As Integer Application.Volatile If LanguageType > 4 Then CutText = CVErr(xlErrNA) '#N/A 오류를 반환 Exit Function End If For i = 1 To Len(sText) sCut = Mid(sText, i, 1) Select Case sCut Case 0 To 9 If LanguageType = 1 Then sTMP = sTMP & sCut Case "a" To "z", "A" To "Z", " ", "'" If LanguageType = 2 Then sTMP = sTMP & sCut Case "가" To "힣", "ㄱ" To "ㅎ", "ㅏ" To "ㅣ" If LanguageType = 3 Then sTMP = sTMP & sCut Case Else If LanguageType = 4 Then If Asc(sCut) >= -13663 And Asc(sCut) < 0 Then sTMP = sTMP & sCut End If End Select Next CutText = sTMP End Function |