본문 바로가기
엑셀공부

엑셀에서 n개 개체를 n개씩 묶어 조합하는 방법 2가지

by 곰탱이생각 2025. 2. 12.
반응형

엑셀을 사용하다 보면 여러 개의 항목을 조합해야 할 때가 있습니다. 예를 들어, A, B, C, D, E, F, G와 같은 항목 중에서 2개씩 또는 3개씩 묶어서 조합을 나열하고 싶을 때가 있죠. 이번 글에서는 엑셀 함수VBA 매크로를 활용해 조합을 만드는 두 가지 방법을 소개하겠습니다.


엑셀 동적 배열 함수로 조합 만들기 (간단한 방법)

엑셀의 최신 버전(엑셀 365, 엑셀 2021)에서는 동적 배열 함수를 사용해 간단하게 조합을 만들 수 있습니다. 별도의 매크로 없이도 함수를 활용해 빠르게 결과를 얻을 수 있는 방법입니다.

Step 1: TRANSPOSE로 데이터 전환하기

먼저, 가로로 나열된 데이터를 세로로 변환합니다. 예를 들어, A1:G1 범위에 A, B, C, D, E가 입력되어 있다고 가정해봅니다.

=TRANSPOSE(A1:G1)

이 함수는 가로로 입력된 데이터를 세로로 전환해줍니다. 결과적으로 A열에 A, B, C, D, E가 세로로 나열됩니다.


Step 2: TOCOL과 & 연산자로 조합 만들기

 

이제 본격적으로 조합을 만들어보겠습니다. 예를 들어, H1 셀에는 1개씩 조합한 결과, I1 셀에는 2개씩 조합한 결과를 나열할 수 있습니다.

 

1개씩 조합:

=TOCOL(A1:G1)

이 함수는 A1:G1의 항목을 그대로 나열합니다.

 

2개씩 중복 허용 조합:

=TOCOL(A1:G1 & TRANSPOSE(A1:G1))

이 함수는 A, B, C, D, E, F, G 항목을 두 개씩 조합한 결과를 나열합니다. 예를 들어:

  • AA, AB, AC, AD, AE, AF, AG
  • BA, BB, BC, BD, BE, BF, BG

2개씩 중복 없는 조합:

=UNIQUE(FILTER(A1:G1 & TRANSPOSE(A1:G1), A1:G1 <> TRANSPOSE(A1:G1)))

이 함수는 중복 없이 두 개씩 조합한 결과를 나열합니다. 예를 들어:

  • AB, AC, AD, AE, AF, AG
  • BC, BD, BE, BF, BG

3개씩 조합:

=TOCOL(A1:G1 & TRANSPOSE(A1:G1) & TRANSPOSE(A1:G1))

이 함수는 세 개씩 조합한 결과를 나열합니다.

 

3개씩 중복 없는 조합:

=UNIQUE(FILTER(A1:G1 & TRANSPOSE(A1:G1) & TRANSPOSE(A1:G1), (A1:G1 <> TRANSPOSE(A1:G1)) * (A1:G1 <> TRANSPOSE(A1:G1))))

이 함수는 중복 없이 세 개씩 조합한 결과를 나열합니다.

VBA 매크로로 조합 나열하기 (복잡한 조합에도 유용)

엑셀 함수만으로는 복잡한 조합(예: 3개 이상 묶기)을 만들기 어렵습니다. 이럴 때는 VBA 매크로를 활용하면 더 유연하게 조합을 나열할 수 있습니다.

Step 1: VBA 편집기 열기

  1. 엑셀 파일을 열고 **Alt + F11**을 눌러 VBA 편집기를 엽니다.
  2. 상단 메뉴에서 **삽입 > 모듈**을 클릭합니다.


Step 2: 아래 VBA 코드 붙여넣기

(중복 허용)

Sub GenerateCombinationsWithDuplicates()
    Dim rng As Range
    Dim arr() As Variant
    Dim result() As String
    Dim n As Integer, r As Integer
    Dim i As Integer
    Dim resIndex As Integer

    ' 데이터 범위 설정 (A1:G1)
    Set rng = Range("A1:G1")
    arr = Application.Transpose(rng.Value)
    n = UBound(arr)

    ' 몇 개씩 묶을지 설정 (예: 2개씩)
    r = Application.InputBox("몇 개씩 조합할까요?", Type:=1)
    If r <= 0 Then Exit Sub

    ' 결과 저장 배열 초기화
    ReDim result(1 To n ^ r)

    ' 조합 생성
    resIndex = 1
    Call CombineWithDuplicates(arr, r, "", result, resIndex)

    ' 결과 출력 (현재 선택된 셀 아래로 출력)
    Dim outputCell As Range
    Set outputCell = Application.ActiveCell.Offset(1, 0)
    For i = 1 To resIndex - 1
        outputCell.Offset(i - 1, 0).Value = Trim(result(i))
    Next i
End Sub

Sub CombineWithDuplicates(arr As Variant, r As Integer, temp As String, result() As String, ByRef resIndex As Integer)
    Dim i As Integer
    If r = 0 Then
        result(resIndex) = temp
        resIndex = resIndex + 1
    Else
        For i = 1 To UBound(arr)
            Call CombineWithDuplicates(arr, r - 1, temp & arr(i, 1), result, resIndex)
        Next i
    End If
End Sub

 

Step 2: 아래 VBA 코드 붙여넣기

(중복 없이)

Sub GenerateCombinationsWithoutDuplicates()
    Dim rng As Range
    Dim arr() As Variant
    Dim result() As String
    Dim n As Integer, r As Integer
    Dim i As Integer
    Dim resIndex As Integer

    ' 데이터 범위 설정 (A1:G1 범위에 항목 입력)
    Set rng = Range("A1:G1")
    arr = Application.Transpose(rng.Value)
    n = UBound(arr)

    ' 몇 개씩 묶을지 설정 (예: 2개씩 조합하려면 r = 2)
    r = 2

    ' 결과 저장 배열 초기화
    ReDim result(1 To Application.WorksheetFunction.Combin(n, r))

    ' 조합 생성
    resIndex = 1
    Call CombineWithoutDuplicates(arr, r, "", 1, result, resIndex)

    ' 결과 출력 (현재 선택된 셀부터 출력)
    Dim outputCell As Range
    Set outputCell = Application.ActiveCell
    For i = 1 To resIndex - 1
        outputCell.Offset(i - 1, 0).Value = Trim(result(i))
    Next i
End Sub

Sub CombineWithoutDuplicates(arr As Variant, r As Integer, temp As String, index As Integer, result() As String, ByRef resIndex As Integer)
    Dim i As Integer
    If r = 0 Then
        result(resIndex) = temp
        resIndex = resIndex + 1
    Else
        For i = index To UBound(arr)
            Call CombineWithoutDuplicates(arr, r - 1, temp & arr(i, 1), i + 1, result, resIndex)
        Next i
    End If
End Sub

 


Step 3: 매크로 실행하기

  1. 출력하고 싶은 셀을 선택합니다. (예: H1 셀)
  2. **Alt + Q**를 눌러 VBA 편집기를 닫고 엑셀로 돌아갑니다.
  3. **Alt + F8**을 눌러 GenerateCombinationsWithDuplicates 또는 GenerateCombinationsWithoutDuplicates 매크로를 선택한 후 실행을 클릭합니다.

이제 선택한 셀(C2)부터 조합 결과가 출력됩니다.


 

결과 비교

엑셀 함수 간단하고 빠르게 조합 생성 가능 복잡한 조합(3개 이상)에는 제한적
VBA 매크로 복잡한 조합, 다단계 조합 모두 가능 초기 설정이 필요하고 VBA 사용 숙지 필요

마치며

  • 간단한 2개 조합엑셀 함수로 빠르게 해결할 수 있습니다.
  • 3개 이상 묶는 복잡한 조합이나 특정 규칙이 필요한 경우에는 VBA 매크로가 더 유용합니다.

상황에 따라 두 가지 방법을 적절히 활용해보세요! 😊


이 글이 도움이 되셨다면 댓글로 질문이나 의견 남겨주세요!

728x90
반응형
LIST

댓글