728x90

[VBA기초] 공백제거



엑셀을 다루다보면 첫번째 셀만 공백을 제거하고 싶을 때가 있습니다.

보통은 Trim 함수를 사용하면 제거가 되는데요.



위 엑셀은 Trim 함수를 써도 첫번째 공백이 제거가 되지 않네요.

시스템에서 가져온 데이터들이 보통 이런 경우들이 많은데요.

이런 경우에는 어떻게 해결할까요?

바로 아스키코드 값을 알아낸 다음에 셀의 첫번째 문자열의 값을 알아내는 겁니다.


Sub 첫문자열공백제거()
    Dim rngTarget As Range
    Dim rngC As Range
    Dim sName  As String
   
    ActiveCell.Select     '// 현재 커서가 있을 셀 선택
    Set rngTarget = Range(ActiveCell, Cells(Rows.Count, ActiveCell.Column).End(3))
   
    For Each rngC In rngTarget
        sName = Left(rngC.Value, 1)     '// 첫번째 문자열 추출
        'MsgBox Asc(sName)              '//첫공백의 아스키 값을 알아내고자 한다면...
        If Asc(sName) = 63  Or Asc(sName) = 32 Then   '//스페이스바의 아스키 값은 32
            rngC = Mid(rngC, 2, Len(rngC))
        ElseIf Asc(sName) < 65 Or Asc(sName) > 90 Then    '// 첫글자가 영문자 대문자가 아닌지 검사
            rngC = UCase(sName) & Right(rngC, Len(rngC) - 1)
            '// 첫글자를 영문대문자로 변경 처리
        End If
    Next
   
End Sub

공백제거.vbs


위 VBA 함수를 이용하여 MsgBox Asc(sName) 를 활성화하여 공백의 값을 알아냅니다.

스페이스바의 아스키 값은 32 이더군요. (http://link2me.tistory.com/222 게시물 참조)

그런 다음에 'MsgBox Asc(sName) 로 처리하고 나서 F5 를 누르면 됩니다.

아니면 단축키 매크로 만들면 되구요.




첫 문자열 공백제거를 위한 단축키를 만들어서 누르면 ActiveCell 이 있는 열 전체가 모두 공백이 제거 됩니다.



공백의 아스키 값을 알아낼 수 없었다면 힘들게 하나 하나 지우는 고생을 했을 수도 있고

강제로 Mid함수를 이용하여 해당 행만 업데이트 할 수 있습니다.



블로그 이미지

Link2Me

,