병합셀을 다루는 구문이다.
병합셀은 딱 두 개만 알아두면 된다.
If rngX.MergeCells Then rngX.Next.Resize(rngX.MergeArea.Count, 1) = rngX
if rngX.MergeCells : 병합된 셀이니 병합이면 이렇게 병합이 아니라면 이렇게....
MergeArea.Count : 병합된 영역의 크기
이 두개를 모르면 맨땅에 헤딩각!!!
더보기
Option Explicit
Sub 기초방25()
Dim rngX As Range: Set rngX = [c7]
Dim rngM As Range
Dim R&
Dim cnt&: cnt = 1
Do Until IsEmpty(rngX) '= 병합된 셀들을 순환
If rngX.MergeCells Then rngX.Next.Resize(rngX.MergeArea.Count, 1) = rngX
'= 병합된 셀이면 병합된 셀의 숫자를 세어서 그만큼의 영역에
'= 순환셀의 값을 집어 넣어라
Set rngX = rngX.Offset(1) '= 다음 구문을 위한 순한을 해라
Loop
Set rngX = [d7] '= 25번 문제의 기준
Do Until IsEmpty(rngX)
R = Application.CountIf([d7:d18], rngX) '= 기준의 중복값을 구해라
rngX(1, -1).Resize(R, 1).Merge '= 연번 영역을 병합
rngX(1, -1).Resize(R, 1) = cnt '= 연번 출력
cnt = cnt + 1 '= 카운트
Set rngX = rngX.Offset(R)
Loop
Haja_Format
End Sub
Function Haja_Format()
With [b7].CurrentRegion
.Borders.LineStyle = 1
.HorizontalAlignment = xlCenter
End With
End Function
병합된 셀의 크기를 구하려면 전통적인 방식은 이전셀과 현재 셀을 비교 하여 값의 일치여부를 따지면서 일치 시 중복 카운트를 하나씩 증가하다가 값이 불일치 되었을 때 현재까지 카운팅 숫자만큼 병합하거나 이후 작업을 하면 되는데 오늘은
R = Application.CountIf([d7:d18], rngX)
카운트이프로 해당영역의 중복값을 구하였다.
구문 자체의 난이도가 있는 것이 아니었기에 오늘도 딱 요만큼만 하도록 하겠다.
운동가즈아~~~
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #26_1 [ 그룹별 목차 만들기 ] (0) | 2023.02.05 |
---|---|
[기초방] VBA 100제 #26 [ 그룹별 시트 만들기 ] (0) | 2023.02.03 |
[기초방] VBA 100제 #24 [ 멀티 필터링 ] (2) | 2023.02.01 |
[기초방] VBA 100제 #23 [ 제품 나열하기 ] (0) | 2023.01.31 |
[기초방] VBA 100제 #22 [ 부서별최대값구하기 ] (0) | 2023.01.30 |
댓글