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

[기초방] VBA 100제 #57 [ 영역 합계구하기 ]

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

빈셀의 크기는 유지한채 내용 있는 셀들만 합계를 구하는 구문이다. 이 문제는 Areas 를 알고 있는것과 그렇지 않은 것 사이의 차이가 많이 난다. 

더보기
Option Explicit

Sub 기초방57()

    Dim rngAll As Range: Set rngAll = Range("d5:d" & Cells(Rows.Count, "d").End(3).Row)
    Dim rngA As Range, rngX As Range, rngF As Range
    Dim i, j, Vtemp()
    
    ReDim Vtemp(rngAll.Cells.Count - 1)                 '= 임시배열 크기는 전체영역 크기로 잡음
    
    For Each rngX In rngAll.SpecialCells(4).Areas       '=  빈영역을 임시 배열에 담아라
        
            Vtemp(i) = rngX.Cells.Count
            i = i + 1
        
    Next rngX
    
    Set rngF = [f5]                                     '= 출력영역
    
    For Each rngA In rngAll.SpecialCells(2).Areas       '= 값들이 있는 영역을 순환해서
    
        rngF = WorksheetFunction.sum(rngA)              '= 해당 영역들의 합계를 구해라
        Set rngF = rngF.Offset(Vtemp(j) + 1)            '= 다음 출력위치는 임시배열에 넣은 값 다음으로 설정
        j = j + 1
     
    Next rngA


End Sub

 

코드 진행은 빈셀의 크기를 임시배열에 담은 후

값이 있는 셀의 영역을 합계를 낸 후 임시배열에 넣은 빈셀의 크기대로 Offset을 하면서 코드를 진행하는 것이다.

 

그냥 간만에 소프트한 문제를 내 보았다...주말 잘보내길..

 

기초방57.xlsm
0.02MB

댓글