왼쪽에 있는 표를 이름별로 나열하는 구문이다.
이문제는 이름과 이름과 하위분류로 이루어져있다.
이름이 나오면 한행을 이동후 E열에 이름부터 다시 출력을 하여야 한다.
If InStr(rngA, " ") = 0 Then
Set rngX = Cells(rngX.Row + 1, "e")
rngX = Split(rngA, " ")(0)
문자 조합이 이름은 이름만 있고 이름과 하위분류로 구성된것은 이름 + [공백 ] + 하위분류로 되어 있기 때문에
Instr로 공백 유무를 따지면 이게 이름으로 구성되어 있는지 이름과 하위분류의 조합인지를 알 수 있다. 따라서 위의 구문은 이름으로만 구성이 되었다면 한행을 내려와서 E열에 이름을 출력하라는 구문임을 알 수 있다.
내말 몬말인지 알지??
출력은 [e5] 부터 출력인데 rngX 의 초기 설정값이 e4인걸 확인 바란다.
엑사남님이 처음이니까 엑사남님부터 rngX의 row 값에 +1 을 해서 "e" 열에 이름을 출력하면서 마지막 모카님까지 차례대로 출력을 하게된다.
더보기
Option Explicit
Sub 기초방_18()
Dim rngAll As Range: Set rngAll = [b5:b25]
Dim rngA As Range
Dim rngX As Range: Set rngX = [e4]
For Each rngA In rngAll
If InStr(rngA, " ") = 0 Then '= 이름만 있는 행이면
Set rngX = Cells(rngX.Row + 1, "e") '= 현재 있는 행에서 한행 내려와서 "e" 열을
'= rngX로 설정
rngX = Split(rngA, " ")(0) '= 이름을 출력
Else: rngX = Split(rngA, " ")(1) '= 이름과 서브제목으로 구성이라면 서브제목을 출력
End If
Set rngX = rngX.Offset(, 1) '= 열방향으로 rngX를 계속 이어나가라.
Next rngA
End Sub
이번 코드에 사용된 instr은 크롤링할때 문자 파싱할때도 많이 사용되는 함수기 때문에 이번기회에 익혀두길 바란다.
Set rngX = Cells(rngX.Row + 1, "e") 이 구문도 야무지게 사용할 수 있으니 체크하길 바란다.
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #20 [ 패턴별 색상칠하기 ] (0) | 2023.01.26 |
---|---|
[기초방] VBA 100제 #19 [ 이름별 나열하기 ] (0) | 2023.01.18 |
[기초방] VBA 100제 #17 [ CHR + ASC ] (0) | 2023.01.17 |
[기초방] VBA 100제 #16 [ 이벤트 + 빈셀삭제하기 ] (0) | 2023.01.16 |
[기초방] VBA 100제 #15 [ 이벤트 + 사용자함수 ] (0) | 2023.01.15 |
댓글