🖥️ IT, 컴퓨터/🧮 엑셀

[Excel] 엑셀에서 행들에 대해 모든 조합 만들기

김 홍시 2023. 8. 21.
반응형

해당 작업은 VBA 코드를 사용하여 쉽게 수행할 수 있습니다. 아래에는 주어진 데이터 형식에서 원하는 형태로 조합을 생성하는 VBA 코드 예시가 제공됩니다.

 


엑셀에서 Alt + F11을 눌러 VBA 편집기를 엽니다.


삽입 > 모듈을 선택하여 새 모듈을 추가합니다.
아래 코드를 입력합니다:

 

Sub GenerateCombinations()
    Dim ws As Worksheet
    Dim lastORow As Long, lastDRow As Long
    Dim oRange As Range, dRange As Range
    Dim resultRange As Range
    Dim rowIndex As Long, resultRowIndex As Long
    
    ' 작업할 시트 지정
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 원하는 시트 이름으로 변경
    
    ' 각 열의 마지막 행 찾기
    lastORow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    lastDRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    
    ' 범위 지정
    Set oRange = ws.Range("A2:A" & lastORow)
    Set dRange = ws.Range("B2:B" & lastDRow)
    Set resultRange = ws.Range("D2").Resize((lastORow - 1) * (lastDRow - 1), 2)
    
    ' 조합 생성
    resultRowIndex = 1
    For rowIndex = 1 To oRange.Rows.Count
        For Each dCell In dRange
            resultRange.Cells(resultRowIndex, 1).Value = oRange.Cells(rowIndex, 1).Value
            resultRange.Cells(resultRowIndex, 2).Value = dCell.Value
            resultRowIndex = resultRowIndex + 1
        Next dCell
    Next rowIndex
End Sub


코드 창을 닫고, Alt + F8을 눌러 마크되지 않은 매크로 목록을 엽니다.


"GenerateCombinations"을 선택하고 "실행"을 클릭하여 매크로를 실행합니다.
위의 코드를 사용하면 주어진 데이터에서 원하는 형태의 조합을 생성할 수 있습니다. 코드의 "Sheet1" 부분을 원하는 시트의 이름으로 변경하여 사용하세요.





 

나의 사례

내 코드

Sub GenerateCombinations()
    Dim ws As Worksheet
    Dim lastORow As Long, lastDRow As Long
    Dim oRange As Range, dRange As Range
    Dim resultRange As Range
    Dim rowIndex As Long, resultRowIndex As Long
    
    ' 작업할 시트 지정
    Set ws = ThisWorkbook.Sheets("Sheet2") ' 원하는 시트 이름으로 변경
    
    ' 각 열의 마지막 행 찾기
    lastORow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    lastDRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row
    
    ' 범위 지정
    Set oRange = ws.Range("A2:A" & lastORow)
    Set dRange = ws.Range("G2:G" & lastDRow)
    Set resultRange = ws.Range("M2").Resize((lastORow - 1) * (lastDRow - 1), 2)
    
    ' 조합 생성
    resultRowIndex = 1
    For rowIndex = 1 To oRange.Rows.Count
        For Each dCell In dRange
            resultRange.Cells(resultRowIndex, 1).Value = oRange.Cells(rowIndex, 1).Value
            resultRange.Cells(resultRowIndex, 2).Value = dCell.Value
            resultRowIndex = resultRowIndex + 1
        Next dCell
    Next rowIndex
End Sub

 

내가 수정한 부분은 이러하다.

 

 

 

 

내 결과

 

 

 

 

 

 

반응형

댓글