728x90
반응형
아래 그림과 같이 형태를 바꾸는 VBA 사용자 정의함수입니다.
이렇게 각 반의 각 과목 평균을 정리한 데이터가 있습니다.

이런 데이터를 아래 그림과 같이 형태를 바꾸려합니다.
이번 블로그에서는 점수까지 채우지는 않겠습니다.

이 기능을 함수로 구현하려면 매우 복잡한 함수식을 사용해야 하는 것으로 알고 있습니다.
이렇게 조합을 입력받아
데이터의 형태를 바꿔주는 사용자 정의함수를 만들어 보겠으며,
두 개의 범위를 입력받아 위 그림과 같이 출력하는 기능을 수행합니다.
구현 모습
함수가 구현되는 모습은 다음과 같습니다.

전체 코드
전체 코드는 다음과 같습니다.
Function Combine_Range(range1 As Range, range2 As Range) As Variant
Dim result()
Dim i As Long, j As Long, k As Long
Dim totalRows As Long
totalRows = range1.Cells.Count * range2.Cells.Count
ReDim result(1 To totalRows, 1 To 2)
k = 1
For i = 1 To range1.Cells.Count
For j = 1 To range2.Cells.Count
result(k, 1) = range1.Cells(i).Value
result(k, 2) = range2.Cells(j).Value
k = k + 1
Next j
Next i
Combine_Range = result
End Function
반응형
코드 설명
두 개의 범위를 입력받아 Variant 타입으로 결과를 반환하는 함수 선언
Function Combine_Range(range1 As Range, range2 As Range) As Variant
배열의 크기 설정
totalRows = range1.Cells.Count * range2.Cells.Count
ReDim result(1 To totalRows, 1 To 2)
총 행 수는 두 범위의 셀의 개수를 곱한 값이고,
결과 배열은 2열로 구성됩니다.
배열에 각 셀을 순회하며 값을 저장합니다.
k = 1
For i = 1 To range1.Cells.Count
For j = 1 To range2.Cells.Count
result(k, 1) = range1.Cells(i).Value
result(k, 2) = range2.Cells(j).Value
k = k + 1
Next j
Next i
생성된 2차원 배열을 반환합니다.
FillGrid = result
728x90
참고사항
이 함수를 실행하시려면 먼저 출력될 영역에 충분한 공간이 필요합니다.
그리고 정확한 범위를 생성하지 않으면 불필요한 결과가 출력될 수 있습니다.
여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.
728x90
반응형
'EXCEL VBA' 카테고리의 다른 글
[ 엑셀 VBA ] 간단한 파일 관리 및 분류 프로그램 만들기-첫번째 (1) | 2024.11.26 |
---|---|
[ 엑셀 VBA ] vlookup과 비슷한 중복값 찾기 기능, 좌측값 찾기 기능이 있는 사용자 정의 함수 만들기 (0) | 2024.11.23 |
[ 엑셀 VBA ] 같은 색깔의 셀 합계 구하기, 사용자 정의함수 새로고침 (1) | 2024.11.21 |
[ 엑셀 VBA ] 두 범위의 값 비교하기, VBA로 입력받은 두 범위 비교하기 (0) | 2024.11.12 |
[ 엑셀 VBA ] 사용자 정의함수 등록하고 다른 엑셀 파일에서 호출하기 (6) | 2024.11.04 |