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

 참고사항

 

이 함수를 실행하시려면 먼저 출력될 영역에 충분한 공간이 필요합니다.

그리고 정확한 범위를 생성하지 않으면 불필요한 결과가 출력될 수 있습니다.

여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.

엑셀 공부하기
VBA 공부하기

728x90
반응형