본문 바로가기
excel VBA

엑셀 배열 이해

by 퍼포먼스마케팅코더 2023. 8. 30.
반응형

요약

엑셀 배열(Array)을 이해하고 범위(Range)와의 차이점을 이해합니다. 배열을 잘 이해하면 이후 배열수식 및 VBA 코드를 작성하는데 많은 도움이 됩니다.

설명

  • 범위(Range) : [셀/범위의 집합체]
    엑셀에서 수식을 작성하기 위해 함수를 이용할 때, 대부분의 수식에서는 '범위'를 이용합니다.
    엑셀에서는 여러개의 셀을 범위로 지정하기 위해 콜론(":")을 사용합니다. 아래의 함수를 예시로 보겠습니다.
    = SUM(A1:A10) '// A1셀부터 A10셀까지 범위의 합계를 구합니다.
    = COUNTA(B1:B10) '// B1셀부터 B10셀까지의 범위에서 비어있지 않은 셀의 개수를 구합니다.
  • 배열(Array) : [데이터의 행렬집합체]
    엑셀에서 배열수식/배열함수라는 단어는 엑셀을 어느정도 공부하신 분이라면 한번쯤을 들어보셨을겁니다.
    배열은 범위와 상당히 비슷한 개념인데요, 배열과 범위의 차이점을 간단히 요약하면 아래와 같습니다.
    1. 자료 처리 속도 (배열 > 범위)
    - 배열은 데이터의 집합체이므로 배열 그 자체로 데이터를 해석할 수 있습니다. 따라서 배열의 자료처리속도는 범위보다 월등히 빠릅니다.
    2. 데이터 호환성 (배열 > 범위)
    - 마찬가지로 배열은 데이터의 집합체이므로, 배열 그 자체로서 엑셀뿐만아니라 다른 응용프로그램과 손쉽게 호환가능합니다.
    3. 자료 수정의 편의성 (범위 > 배열)
    - 배열은 그 크기와 항목이 정해지면 다시 수정하기가 상당히 까다로운 반면, 범위는 손쉽게 수정이 가능합니다.
    아래 함수를 배열의 예시로 보겠습니다.
    = SUM({1,2,3})
    '// 1,2,3 의 합계를 계산합니다.

    = SUM(LEN({"가위", "바위", "보"}))
    = SUM({2,2,1})
    '// "가위","바위","보" 글자수의 합계를 계산합니다.

세부내용

1. 범위 vs 배열

범위와 배열의 차이점을 이해하기 위해 아래의 상황을 가정하겠습니다.

[상황] 운동장에 있는 학생이름의 글자수를 합하세요!


'// 여기서 범위와 배열로 각 참조범위를 표현하면 아래와 같습니다.
⇨ 범위: "A1:C3" (운동장)

⇨ 배열: {김혁수, 이은아, , 김창진; 이상우, 최민영, 박민아; 박진수, 황민지, 정지수}

범위와 배열의 차이점(장단점)을 비교하면 아래 표와 같습니다.

장단점 장점 단점
범위
(Range)
  1. 사용자가 보다 쉽게 입력하고 편집할 수 있습니다.
  2. 스프레드시트(엑셀시트)위에서 나타내는 행/열 자료의 크기를 직관적으로 알 수 있습니다.
  3. (상황에따라) 범위로만 수식을 작성할 경우 각 단계별로 수식을 넣게되어 이후에 쉬운 해석이 가능합니다.
  1. 각 범위에 해당하는 셀을 직접 확인하기 전까지는 범위에 어떠한 데이터가 들어있는지 알 수 없습니다.
  2. 시트상에 적용된 개체이므로 범위에서 값을 가져오기전까지 외부프로그램과 호환이 불가능합니다.(데이터 호환이 어려움)
  3. 범위가 하나의 개체(묶음)으로 제한되기 때문에 각각의 셀(항목)에 함수적용이 불가능합니다.
배열
(Array)
  1. 자료를 처리하는 입장에서는 입력된 데이터의 종류와 크기를 직관적으로 알 수 있습니다. (빠른 자료처리속도)
  2. 각 항목이 별도의 개체로 이루어지므로 각각의 항목에 함수를 적용할 수 있습니다. (예: 배열수식)
  3. (상황에따라) 배열수식으로 작성할 경우 중간과정 없이 더욱 빠르고 간단하게 처리할 수 있습니다. 하지만 배열수식에 대한 사용자의 고급지식이 필요합니다. 배열수식에 대한 자세한 내용은 관련 링크를 참고하세요.
  1. 배열의 크기변경과 항목추가(특히 VBA의 경우) 절차가 번거로우므로 배열을 다루는방법에 대한 사용자의 지식이 필요합니다. (수정이 불편함)
  2. 워크시트에서 다룰때에도 배열에 대한 사용자의 충분한 지식과 이해가 필요합니다.

2. 왜 엑셀의 대부분의 함수에서는 '범위'를 이용하나요?

많은 분들이 이런 생각을 하실겁니다.

위의 내용을 봐서는 '배열'이 훨씬 자료처리속도도 빠르고 함수를 다룰때 더 편한것 같은데, 왜 범위를 사용할까?

답은 간단합니다. 바로 사용자의 편의성입니다. 비록 자료처리속도가 느리다 할지라도, 일반적으로 사용하는 자료의 크기를 고려했을때에는 범위와 배열의 자료처리속도 차이는 매우 미미하기 때문입니다.

배열과 범위의 자료처리속도 차이가 얼마나 나는지 궁금하시다면, 아래 링크를 참고하세요!
[링크] 엑셀 VBA - 배열 vs 범위의 자료 처리속도 얼마나 차이날까?

3. 배열수식, 배열함수를 많이 들어봤는데.. 엑셀 기본함수만 사용해도 괜찮을까요?

대답은 'YES' 입니다.
(현재 엑셀에서는 '배열수식'의 사용은 선택입니다. 피벗테이블, 피벗쿼리 등 자료를 처리할 수 있는 다양한 방법이 많이 있습니다.)

최신버전의 엑셀을 사용할경우, '굳이' 배열수식을 알지 못하더라도 업무상 일어나는 대부분의 문제를 처리할 수 있습니다. 뿐만아니라 지금 이 시간에도 MS에서는 사용자의 편의를 위해 꾸준히 엑셀의 함수 및 다양한 기능을 업데이트하고 있는데요.

예를 들어 2000년대 초반까지만 하더라도, SUMIF 함수, COUNTIF 함수가 없어서 IF 함수와 COUNT 함수의 배열수식 사용법을 반드시 알아야만 했었지만, 지금은 굳이 함수가 아니더라도 피벗테이블 기능을 통해, 클릭 몇번이면 원본자료의 손실없이 원하는 내용만 뽑아서 편리하게 확인 할 수 있습니다.

짧은 시일내에는 엑셀과 vba 외에 다른 프로그래밍 언어가 접목되어 다양한 방법으로 엑셀을 사용할수 있는 날이 올 것이라고 생각합니다.

4. 현재 엑셀을 사용하는 사용자의 입장에서, 배열수식을 알면 어떤점이 좋을까요?

위에서 예를 들었던, 운동장에 있는 학생이름의 글자수를 구하는 문제를 보겠습니다.

4-A. 범위로만 수식을 작성할 경우

기본 함수로만 수식을 작성할 경우 결과값을 도출하기 위한 중간과정이 필요할 수 있습니다.

만약 일반 범위로만 수식을 작성할 경우 2단계를 거쳐야합니다.
1. LEN 함수를 통해 다른 공간에 각 학생이름의 글자수를 계산합니다.
2. SUM 함수로 각 글자수의 합계를 구합니다.

따라서 각 단계별로 계산을 하게되므로 문서를 처음 접한 사람이더라도 데이터와 결과값의 인과관계를 더욱 쉽게 이해할 수 있습니다.
하지만 결과값을 구하기 위해서는, 각 학생이름의 글자수를 별도의 셀에 표현해야 되므로 메모리의 낭비가 발생합니다.

4-B. 배열수식을 작성할 경우 (Ctrl + Shift + Enter로 수식을 입력합니다.)

배열 수식을 사용할 경우 중간과정 없이 한번에 결과값을 도출할 수 있습니다.

만약 배열수식으로 작성하면 하나의 수식으로 계산이 마무리되며, 수식을 해석하면 아래와 같습니다.

= { SUM(LEN(A1:A9) }
'// 배열수식으로 A1:A9 의 각각의 셀의 글자수의 합계를 구합니다.
= SUM( { LEN(A1), LEN(A2), LEN(A3),....., LEN(A9) } )
'// 범위에 포함된 셀의 글자수가 SUM함수안에 각각의 인수로 입력됩니다.
= SUM( { 3,3,3,...,3 } )
= 27
반응형

'excel VBA' 카테고리의 다른 글

엑셀 변수와 상수  (0) 2023.08.30
엑셀 배열함수와 배열수식 기초 및 사용법  (0) 2023.08.30
엑셀 VBA 셀 개체  (0) 2023.08.30
엑셀 VBA 시트 개체  (0) 2023.08.30
엑셀 VBA 통합문서 개체  (0) 2023.08.30

댓글