본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #25 [ 병합셀 다루기 ]

by 일등미노왕국 2023. 2. 2.

 

병합셀을 다루는 구문이다.

 

병합셀은 딱 두 개만 알아두면 된다.

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)

 카운트이프로 해당영역의 중복값을 구하였다.

 

기초방25.xlsm
0.02MB

구문 자체의 난이도가 있는 것이 아니었기에 오늘도 딱 요만큼만 하도록 하겠다.

운동가즈아~~~

댓글