Range 개체

FormulaArray 속성

노만e 2025. 3. 10. 19:35

엑셀 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 속성을 사용하면 배열 수식을 자동으로 적용할 수 있습니다! 🚀