EXCEL VBA
[ 엑셀 VBA ] 두 범위를 입력받아 사용 가능한 경우의 수 조합하기, 사용자 정의함수
카루루1007
2024. 11. 22. 14:31
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
반응형