엑셀 VBA에서 WorksheetFunction 개체는 엑셀의 기본 함수(예: SUM, AVERAGE, COUNT 등)를 VBA 코드에서 사용할 수 있도록 지원하는 개체입니다.
즉, 엑셀에서 제공하는 함수들을 VBA에서도 활용할 수 있도록 도와줍니다.
1. 기본 문법
Application.WorksheetFunction.함수명(인수1, 인수2, ...)
|
- Application.WorksheetFunction → 엑셀의 워크시트 함수를 VBA에서 호출할 때 사용
- 함수명 → SUM, AVERAGE, COUNTIF 등 엑셀에서 사용되는 함수명
- 인수 → 함수에 필요한 값이나 셀 범위
📌 일부 함수는 Application.을 생략하고 WorksheetFunction.함수명으로도 사용 가능
2. SUM (합계 구하기)
Sub 합계_계산()
Dim 결과 As Double
결과 = Application.WorksheetFunction.Sum(Range("A1:A10"))
MsgBox "A1:A10 합계: " & 결과
End Sub
|
📌 A1:A10 범위의 합계를 계산하여 메시지로 출력
3. AVERAGE (평균 구하기)
Sub 평균_계산()
Dim 결과 As Double
결과 = Application.WorksheetFunction.Average(Range("B1:B10"))
MsgBox "B1:B10 평균: " & 결과
End Sub
|
📌 B1:B10 범위의 평균값을 계산하여 메시지로 출력
4. MAX & MIN (최대값, 최소값)
Sub 최대값_최소값()
Dim 최대값 As Double, 최소값 As Double
최대값 = Application.WorksheetFunction.Max(Range("C1:C10"))
최소값 = Application.WorksheetFunction.Min(Range("C1:C10"))
MsgBox "최대값: " & 최대값 & vbNewLine & "최소값: " & 최소값
End Sub
|
📌 C1:C10 범위에서 최대값과 최소값을 찾음
5. COUNT & COUNTA (숫자 개수 & 비어있지 않은 개수)
Sub 개수_계산()
Dim 숫자개수 As Integer, 비어있지않은개수 As Integer
숫자개수 = Application.WorksheetFunction.Count(Range("D1:D10"))
비어있지않은개수 = Application.WorksheetFunction.CountA(Range("D1:D10"))
MsgBox "숫자 개수: " & 숫자개수 & vbNewLine & "비어 있지 않은 개수: " & 비어있지않은개수
End Sub
|
📌 D1:D10 범위에서 숫자가 들어 있는 셀 개수와 비어 있지 않은 셀 개수를 구함
6. COUNTIF (조건에 맞는 개수 세기)
Sub 조건_개수_세기()
Dim 개수 As Integer
개수 = Application.WorksheetFunction.CountIf(Range("E1:E10"), ">50")
MsgBox "50보다 큰 값 개수: " & 개수
End Sub
|
📌 E1:E10 범위에서 50보다 큰 값의 개수를 계산
7. MATCH (특정 값 위치 찾기)
Sub 값_위치찾기()
Dim 위치 As Variant
위치 = Application.WorksheetFunction.Match(75, Range("F1:F10"), 0)
If Not IsError(위치) Then
MsgBox "75의 위치: F" & 위치
Else
MsgBox "값을 찾을 수 없습니다."
End If
End Sub
|
📌 F1:F10 범위에서 75의 위치를 찾음 (정확히 일치하는 값만 검색)
📌 찾지 못하면 "값을 찾을 수 없습니다." 메시지 출력
8. VLOOKUP (수직 검색)
Sub VLOOKUP_예제()
Dim 결과 As Variant
결과 = Application.WorksheetFunction.VLookup(101, Range("A2:B10"), 2, False)
If Not IsError(결과) Then
MsgBox "검색 결과: " & 결과
Else
MsgBox "값을 찾을 수 없습니다."
End If
End Sub
|
📌 A2:B10 범위에서 첫 번째 열(A열)에서 101을 찾고, 두 번째 열(B열)의 값을 반환
9. HLOOKUP (수평 검색)
Sub HLOOKUP_예제()
Dim 결과 As Variant
결과 = Application.WorksheetFunction.HLookup("이름", Range("A1:G2"), 2, False)
If Not IsError(결과) Then
MsgBox "검색 결과: " & 결과
Else
MsgBox "값을 찾을 수 없습니다."
End If
End Sub
|
📌 A1:G2 범위에서 첫 번째 행에서 "이름"을 찾고, 두 번째 행의 값을 반환
10. INDEX (셀의 값 가져오기)
Sub INDEX_예제()
Dim 결과 As Variant
결과 = Application.WorksheetFunction.Index(Range("A1:C5"), 2, 3)
MsgBox "A1:C5 범위에서 2행 3열 값: " & 결과
End Sub
|
📌 A1:C5 범위에서 2행 3열의 값을 가져옴
11. IFERROR (오류 처리)
Sub IFERROR_예제()
Dim 결과 As Variant
결과 = Application.WorksheetFunction.IfError(Application.WorksheetFunction.VLookup(999, Range("A2:B10"), 2, False), "찾을 수 없음")
MsgBox "검색 결과: " & 결과
End Sub
|
📌 VLOOKUP이 오류일 경우 "찾을 수 없음"을 반환
12. ROUND (반올림), ROUNDUP (올림), ROUNDDOWN (내림)
Sub 반올림_예제()
Dim 값 As Double
값 = 123.456
MsgBox "반올림: " & Application.WorksheetFunction.Round(값, 2) & vbNewLine & _
"올림: " & Application.WorksheetFunction.RoundUp(값, 2) & vbNewLine & _
"내림: " & Application.WorksheetFunction.RoundDown(값, 2)
End Sub
|
📌 소수점 2자리까지 반올림, 올림, 내림 계산 후 출력
📝 정리
기능
|
VBA 코드
|
합계 (SUM)
|
Sum(Range("A1:A10"))
|
평균 (AVERAGE)
|
Average(Range("B1:B10"))
|
최대/최소값 (MAX/MIN)
|
Max(Range("C1:C10")), Min(Range("C1:C10"))
|
숫자 개수 (COUNT)
|
Count(Range("D1:D10"))
|
비어 있지 않은 개수 (COUNTA)
|
CountA(Range("D1:D10"))
|
조건 개수 (COUNTIF)
|
CountIf(Range("E1:E10"), ">50")
|
특정 값 위치 (MATCH)
|
Match(75, Range("F1:F10"), 0)
|
VLOOKUP 검색
|
VLookup(101, Range("A2:B10"), 2, False)
|
INDEX 값 찾기
|
Index(Range("A1:C5"), 2, 3)
|
ROUND 반올림
|
Round(123.456, 2)
|
🔥 VBA의 WorksheetFunction을 활용하면 엑셀 함수를 그대로 사용할 수 있어 작업이 더욱 효율적입니다! 🚀