이 코드는 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
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
[VBA] using wildcard in SQl string in VBA (0) | 2015.06.28 |
---|---|
[VBA] 폴더에서 파일 리스트 가져오기 (0) | 2015.06.25 |
[VBA] 찾고자 하는 파일의 경로명 알아내기 (0) | 2015.06.20 |
[VBA] 파일 복사 (VBA FileCopy) (0) | 2015.06.19 |
[VBA] 문자와 숫자를 분리하여 추출하는 배열 (0) | 2015.06.18 |