VBA Sum 함수(범위, 열 등)
In this Article
이 튜토리얼에서는 VBA에서 Excel 합계 함수를 사용하는 방법을 보여줍니다.
합계 함수는 가장 널리 사용되는 Excel 함수 중 하나이며 아마도 Excel 사용자가 가장 처음으로 사용하는 함수일 것입니다. VBA에는 실제로 이에 상응하는 함수가 없으므로 사용자는 WorkSheetFunction 개체를 사용하여 VBA에 내장된 Excel 함수를 사용해야 합니다.
Sum WorksheetFunction
WorksheetFunction 개체를 사용하여 Excel의 함수 삽입 대화 상자에서 사용할 수 있는 대부분의 Excel 함수를 호출할 수 있습니다. SUM 함수도 그중 하나입니다.
Sub TestFunction
Range("D33") = Application.WorksheetFunction.Sum("D1:D32")
End Sub
SUM 함수에는 최대 30개의 인수를 사용할 수 있습니다. 각 인수는 셀 범위를 참조할 수도 있습니다.
아래 예제는 셀 D1부터 D9까지 합계를 구합니다.
Sub TestSum()
Range("D10") = Application.WorksheetFunction.SUM("D1:D9")
End Sub
아래 예에서는 열 D의 범위와 열 F의 범위를 더합니다. Application 개체를 입력하지 않아도 입력한 것으로 간주합니다.
Sub TestSum()
Range("D25") = WorksheetFunction.SUM (Range("D1:D24"), Range("F1:F24"))
End Sub
단일 범위의 셀의 경우 셀 앞의 수식에 ‘Range’라는 단어를 입력하지 않아도 코드에서 있는 것으로 간주합니다. 그러나 여러 개의 인수를 사용하는 경우에는 반드시 입력해야 합니다.
변수에 Sum 결과 할당하기
수식의 결과를 Excel 범위로 직접 다시 작성하는 대신 코드의 다른 부분에서 사용하고 싶을 수 있습니다. 이 경우 결과를 변수에 할당하여 나중에 코드에서 사용할 수 있습니다.
Sub AssignSumVariable()
Dim result as Double
'변수에 할당합니다
result = WorksheetFunction.SUM(Range("G2:G7"), Range("H2:H7"))
'결과를 보여줍니다
MsgBox ""합계는 " & result
End Sub
Range 개체 합계 구하기
Range 개체에 셀 그룹을 할당하고 해당 Range 개체를 WorksheetFunction 개체와 함께 사용할 수 있습니다.
Sub TestSumRange()
Dim rng As Range
'셀의 범위를 정의해줍니다
Set rng = Range("D2:E10")
'정의된 Range 개체를 함수에 사용합니다
Range("E11") = WorksheetFunction.SUM(rng)
'Range 개체를 초기화합니다
Set rng = Nothing
End Sub
여러개의 Range 개체 합계 구하기
비슷한 방법으로 여러개의 Range개체의 합계를 구할 수 있습니다.
Sub TestSumMultipleRanges()
Dim rngA As Range
Dim rngB as Range
'셀의 범위를 정의해 줍니다
Set rngA = Range("D2:D10")
Set rngB = Range("E2:E10")
'정의된 Range 개체들을 함수에 사용합니다
Range("E11") = WorksheetFunction.SUM(rngA, rngB)
'Range 개체들을 초기화합니다
Set rngA = Nothing
Set rngB = Nothing
End Sub
전체 열 또는 행의 합계 구하기
Sum 함수를 사용하여 전체 열 또는 전체 행을 더할 수도 있습니다.
아래 프로시저는 D 열의 셀 중 숫자가 입력된 모든 셀을 더합니다..
Sub TestSum()
Range("F1") = WorksheetFunction.SUM(Range("D:D")
End Sub
아래 프로시저는 9행의 셀 중 숫자가 입력된 모든 셀을 더합니다.
Sub TestSum()
Range("F2") = WorksheetFunction.SUM(Range("9:9")
End Sub
배열 합계
WorksheetFunction.Sum을 사용하여 배열 값들의 합계를 구할수도 있습니다.
Sub TestArray()
Dim intA(1 To 5) As Integer
Dim SumArray As Integer
'배열을 만듭니다
intA(1) = 15
intA(2) = 20
intA(3) = 25
intA(4) = 30
intA(5) = 40
'배열 합계를 구하고 결과를 표시합니다.
MsgBox WorksheetFunction.SUM(intA)
End Sub
SumIf 함수 사용하기
사용할 수 있는 또 다른 워크시트 함수는 SUMIF 함수입니다.
Sub TestSumIf()
Range("D11") = WorksheetFunction.SUMIF(Range("C2:C10"), 150, Range("D2:D10"))
End Sub
위의 프로시저는 C 열의 해당 셀이 150인 경우에 대해서만 Range(D2:D10)의 셀을 합산합니다.
Sum 수식
워크시트의 범위에 합계를 추가하기 위해 WorksheetFunction.SUM을 사용하는 경우 셀 값에 따라 변동되는 수식이 아닌 정적인 합계가 반환됩니다. 즉, 해당 범위의 수치가 변경되어도 WorksheetFunction에서 반환된 값은 변경되지 않습니다.
위의 예에서 TestSum 프로시저는 Range(D2:D10)을 더하고 그 결과를 D11에 넣었습니다. 수식 입력창에서 볼 수 있듯이 이 결과는 수식이 아닌 수치입니다.
따라서 Range(D2:D10)에서 값이 변경되는 경우 D11의 결과는 변경되지 않습니다.
WorksheetFunction.SUM을 사용하는 대신 VBA를 사용하여 Formula 또는 FormulaR1C1 메서드를 사용하여 셀에 합계 함수를 수식으로 적용할 수 있습니다.
Formula 메서드
수식 메서드를 사용하면 아래와 같이 특정 셀 범위(예: D2:D10)를 지정할 수 있습니다.
Sub TestSumFormula
Range("D11").Formula = "=SUM(D2:D10)"
End Sub
FormulaR1C1 메서드
FromulaR1C1 메서드는 정해진 셀 범위로 제한하지 않는다는 점에서 자유도가 더 높습니다. 아래 예제는 위의 예제와 동일한 답을 제공합니다.
Sub TestSumFormula()
Range("D11").FormulaR1C1 = "=SUM(R[-9]C:R[-1]C)"
End Sub
자유도가 좀더 높은 수식을 만들기 위해 코드를 다음과 같이 수정할 수 있습니다:
Sub TestSumFormula()
ActiveCell.FormulaR1C1 = "=SUM(R[-9]C:R[-1]C)"
End Sub
워크시트의 어느 위치에 있든 수식이 바로 위에 있는 8개의 셀을 더하고 답을 ActiveCell에 배치합니다. SUM 함수 내부의 범위는 행(R) 및 열(C) 구문을 사용하여 참조해야 합니다.
이 두 가지 방법을 사용하면 VBA 내에서 Excel 수식을 사용할 수 있습니다.
이제 D11에 값 대신 수식이 있습니다.