조합 나열 (Microsoft Excel)
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]
.