728x90

이 코드는 VBA 고수이신 "하나를하더라도최선을"님이 만들어주신 코드다.

배열로 담아낼 때 Flag 를 사용한 기법을 나중에 활용할 일이 있을 거 같아서 적어둔다.



코드 설명

IF Not flag Then 라인은 Not flag = true 일 때만 문장이 실행되므로, flag = false 일때만 실행됨

- flag 변수 선언시에는 false 로 되어 있어서 IF문은 참(true)이므로 실행된다.

- Dat(1) 배열에 값을 계속 저장한다. flag=true 이므로 flag IF문은 실행되지 않으므로

- 밑줄 글자가 끝나고 밑줄 아닌 글자가 오면 flag=false 처리하여 false 상태를 유지하다가

- 새로운 밑줄글자를 만나면, Dat(2) 배열에 값을 저장하기 시작한다.


Sub underline_text()
    Dim C, rngAll As Range, Dat As Variant, n%, flag As Boolean, i%
    Set rngAll = Range([A2], Cells(Rows.Count, "A").End(3))
    For Each C In rngAll
        ReDim Dat(1 To 1): n = 0    '// 배열 및 배열에 사용할 변수 초기화
        For i = 1 To Len(C)
            If C.Characters(Start:=i, Length:=1).Font.Underline = xlUnderlineStyleSingle Then '// 밑줄 글자이면
                If Not flag Then  '// boolean 이 true 일때만 IF문이 실행됨. not flag = true, 즉 flag = false 일때만 실행
                    n = n + 1   '// 사용할 배열의 크기를 1씩 늘려감
                    ReDim Preserve Dat(1 To n)  '// 기존값을 유지하면서 배열크기를 다시 설정
                End If
                Dat(n) = Dat(n) & Mid(C, i, 1)
                flag = True
            Else    '// 밑줄 그어진 글자가 아니면
                flag = False  '// boolean 을 False 로 설정
            End If
        Next i
        C.Offset(, 1) = Join(Dat, " , ")  '// 배열을 ", "로 조인하여 셀에 뿌림
    Next C
End Sub

블로그 이미지

Link2Me

,