엑셀 VBA에서 FormulaArray 속성은 배열 수식(Array Formula, CSE 수식)을 VBA에서 설정할 때 사용됩니다.
즉, 셀 범위에 Ctrl + Shift + Enter(CSE)로 입력하는 배열 수식을 VBA 코드에서 적용하는 방법입니다.
1. 기본 문법
Range("셀범위").FormulaArray = "배열 수식"
|
- 셀범위 → 배열 수식을 입력할 범위
- 배열 수식 → {}(중괄호) 없이 VBA에서 배열 수식 입력
📌 배열 수식은 반드시 여러 셀에 적용해야 함 (단일 셀 불가)
📌 FormulaArray는 Ctrl + Shift + Enter를 VBA에서 자동 적용하는 방식
2. 기본 배열 수식 적용
Sub 배열수식_적용()
Range("A1:A10").FormulaArray = "=ROW(A1:A10)"
End Sub
|
📌 A1:A10에 =ROW(A1:A10) 배열 수식 적용
📌 각 행 번호가 자동 입력됨
📌 사용자가 Ctrl + Shift + Enter를 누른 것과 동일한 효과
3. 다중 셀 범위에서 배열 수식 사용
Sub 배열수식_범위_적용()
Range("B1:B10").FormulaArray = "=A1:A10*2"
End Sub
|
📌 B1:B10에서 A1:A10 값을 2배로 계산하는 배열 수식 적용
📌 각 행에서 A1 * 2, A2 * 2, A3 * 2 ... 자동 계산
4. 행렬 곱셈 (MMULT 함수)
Sub 행렬_곱셈()
Range("C1:C3").FormulaArray = "=MMULT(A1:B3, D1:D2)"
End Sub
|
📌 A1:B3 행렬과 D1:D2 벡터의 곱을 C1:C3에 저장
📌 엑셀에서 Ctrl + Shift + Enter를 눌러야 하는 수식 VBA로 자동 적용
5. IF 배열 수식 적용
Sub IF_배열수식()
Range("C1:C10").FormulaArray = "=IF(A1:A10>10, B1:B10, 0)"
End Sub
|
📌 A1:A10 값이 10보다 크면 B1:B10 값을 C1:C10에 적용, 아니면 0 저장
6. 조건을 만족하는 값 합산 (SUMIF 배열 수식)
Sub SUMIF_배열수식()
Range("D1").FormulaArray = "=SUM(IF(A1:A10>10, B1:B10))"
End Sub
|
📌 A1:A10 범위에서 10보다 큰 값의 B1:B10 합계를 D1에 계산
📌 배열 수식이므로 Ctrl + Shift + Enter 없이 VBA에서 자동 적용됨
7. 중복 제거 후 고유 값 개수 (COUNTIF 배열 수식)
Sub 고유값_개수()
Range("E1").FormulaArray = "=SUM(1/COUNTIF(A1:A100, A1:A100))"
End Sub
|
📌 A1:A100의 고유 값 개수를 E1에 계산
📌 엑셀에서 Ctrl + Shift + Enter가 필요한 배열 수식 VBA에서 적용 가능
8. 행과 열 바꾸기 (TRANSPOSE 배열 수식)
Sub 행열_변환()
Range("B1:J1").FormulaArray = "=TRANSPOSE(A1:A10)"
End Sub
|
📌 A1:A10을 가로 방향(B1:J1)으로 변환하여 입력
9. 셀 개수 구하기 (ROWS & COLUMNS)
Sub 행열_개수()
Range("F1").FormulaArray = "=ROWS(A1:A10)"
Range("G1").FormulaArray = "=COLUMNS(A1:J1)"
End Sub
|
📌 F1에 A1:A10 범위의 행 개수 입력 (10)
📌 G1에 A1:J1 범위의 열 개수 입력 (10)
10. 배열 수식 제거 (값만 남기기)
Sub 배열수식_제거()
With Range("A1:A10")
.FormulaArray = "=ROW(A1:A10)" ' 배열 수식 적용
.Value = .Value ' 값만 남기기
End With
End Sub
|
📌 A1:A10에 배열 수식 적용 후, 값만 남기고 수식 제거
📝 정리
기능
|
VBA 코드
|
배열 수식 적용
|
Range("A1:A10").FormulaArray = "=ROW(A1:A10)"
|
배열 수식으로 값 연산
|
Range("B1:B10").FormulaArray = "=A1:A10*2"
|
행렬 곱셈 (MMULT)
|
Range("C1:C3").FormulaArray = "=MMULT(A1:B3, D1:D2)"
|
IF 배열 수식
|
Range("C1:C10").FormulaArray = "=IF(A1:A10>10, B1:B10, 0)"
|
조건에 맞는 합계 (SUM(IF))
|
Range("D1").FormulaArray = "=SUM(IF(A1:A10>10, B1:B10))"
|
고유 값 개수 (COUNTIF)
|
Range("E1").FormulaArray = "=SUM(1/COUNTIF(A1:A100, A1:A100))"
|
행과 열 바꾸기 (TRANSPOSE)
|
Range("B1:J1").FormulaArray = "=TRANSPOSE(A1:A10)"
|
행 개수 (ROWS)
|
Range("F1").FormulaArray = "=ROWS(A1:A10)"
|
열 개수 (COLUMNS)
|
Range("G1").FormulaArray = "=COLUMNS(A1:J1)"
|
배열 수식 제거 (값만 남김)
|
.Value = .Value
|
🔥 VBA의 FormulaArray 속성을 사용하면 배열 수식을 자동으로 적용할 수 있습니다! 🚀