Ron은 COMBIN 함수를 사용하여 여러 자릿수로 만들 수있는 조합의 수를 결정할 수 있다는 것을 알고 있습니다. 그러나 그는 모든 조합을 나열하는 방법이 있는지 궁금합니다.

Excel에서 조합을 나열하는 기본 제공 방법은 없습니다. 그러나 목록을 수행하는 매크로를 만들 수 있습니다. 1부터 시작하는 일련의 일련 번호에서 고유 한 조합을 찾으려면 다음 매크로 집합이 트릭을 수행합니다. TestCNR 함수를 실행하기 만하면 1부터 10까지의 일련의 값 집합에서 4 자리 조합의 수를 나타내는 셀의 “행렬”이 생성됩니다.

Sub TestCNR()

Cnr 10, 4 End Sub
Sub Cnr(n, r)

i = 1     For j = 1 To r         Cells(i, j).Value = j     Next

Do Until Finished(n, r, i)

j = FindFirstSmall(n, r, i)

For k = 1 To j — 1             Cells(i + 1, k).Value = Cells(i, k).Value         Next         Cells(i + 1, j).Value = Cells(i, j).Value + 1         For k = j + 1 To r             Cells(i + 1, k).Value = Cells(i + 1, k - 1).Value + 1         Next         i = i + 1     Loop End Sub
Function Finished(n, r, i)

Temp = True

For j = r To 1 Step -1         If Cells(i, j).Value <> j + (n - r) Then             Temp = False         End If     Next     Finished = Temp End Function   Function FindFirstSmall(n, r, i)

j = r     Do Until Cells(i, j).Value <> j + (n - r)

j = j - 1     Loop     FindFirstSmall = j End Function

매크로는 워크 시트에있는 모든 것을 덮어 쓰므로 빈 워크 시트가 표시된 상태에서 테스트를 실행해야합니다. 집합의 크기 나 하위 집합의 요소 수를 변경하려면 TestCNR 루틴에서 전달 된 값을 변경하기 만하면됩니다.

문자 문자열 (예 : 알파벳 문자)에서 고유 한 조합을 가져 오려면 다른 매크로 집합을 사용해야합니다. 다음은 잘 작동합니다. “유니버스”로 사용하려는 문자가 A1 셀에 있고 각 고유 조합에서 원하는 숫자가 A2 셀에 있다고 가정합니다.

Sub FindSets()

Dim iA() As Integer     Dim sUniv As String     Dim iWanted As Integer     Dim j As Integer     Dim k As Integer

sUniv = Cells(1, 1).Value     iWanted = Cells(2, 1).Value

ReDim iA(iWanted)

For j = 1 To iWanted         iA(j) = j     Next j

iRow = PutRow(iA, sUniv, 1)



Do Until DoneYet(iA, Len(sUniv))

j = WorkHere(iA, Len(sUniv))

iA(j) = iA(j) + 1         For k = j + 1 To iWanted             iA(k) = iA(k - 1) + 1         Next k         iRow = PutRow(iA, sUniv, iRow)

Loop End Sub
Function DoneYet(iB, n) As Boolean     iMax = UBound(iB)

Temp = True     For j = iMax To 1 Step -1         If iB(j) <> j + (n - iMax) Then             Temp = False         End If     Next     DoneYet = Temp End Function
Function WorkHere(iB, n) As Integer     iMax = UBound(iB)

j = iMax     Do Until iB(j) <> j + (n - iMax)

j = j - 1     Loop     WorkHere = j End Function
Function PutRow(iB, sUniv, i)

iMax = UBound(iB)

sTemp = ""

For j = 1 To iMax         sTemp = sTemp & Mid(sUniv, iB(j), 1)

Next j     Cells(i, 2).Value = sTemp     PutRow = i + 1 End Function

FindSets 매크로를 실행하면 원하는 다른 조합이 열 2에 놓이게됩니다. 그러나 매크로를 실행할 때는주의하십시오. 조합의 수가 매우 빠르게 증가 할 수 있습니다. 예를 들어 A1 셀에 A부터 Z까지 26 개의 문자를 입력하고 A2 셀에 값 5를 입력하면 매크로가 충돌합니다. 왜? 65,780 개의 5 자 조합이 가능하고이를 배치 할 행은 65,536 개뿐이기 때문입니다.

_ 참고 : _

이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.

link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요].

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (6766)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다. 여기에서 Excel (Excel 2007 이상)의 리본 인터페이스에 대한이 팁 버전을 찾을 수 있습니다.

link : / excelribbon-Listing_Combinations [Listing Combinations].