Комбинации листинга

Рон знает, что он может использовать функцию COMBIN, чтобы определить количество комбинаций, которые могут быть составлены из числа цифр. Однако ему интересно, есть ли способ вывести список всех комбинаций.

В Excel нет встроенного способа составления списка комбинаций. Однако вы можете создать макрос, который сделает список за вас. Если вы хотите найти уникальные комбинации в наборе последовательных чисел, начинающихся с 1, то следующий набор макросов поможет. Все, что вам нужно сделать, это запустить функцию TestCNR, и вы получите «матрицу» ячеек, которая представляет количество 4-значных комбинаций в последовательном наборе значений от 1 до 10.

 Sub TestCNR () Cnr 10, 4End 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) Для k = от 1 до j - 1 ячеек (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 LoopEnd Sub 
 Функция завершена (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 = TempEnd Function Function FindFirstSmall (n, r, i) j = r Do until Cells (i, j). Value  j + (n - r) j = j  - 1 цикл FindFirstSmall = jEnd 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) LoopEnd Sub 
 Функция DoneYet (iB, n)  As Boolean iMax = UBound (iB) Temp = True For j = iMax To 1 Step -1 Если iB (j)  j + (n - iMax) Then Temp = False End If Next DoneYet = TempEnd Function 
 Функция работает здесь (iB, n) как целое число iMax = UBound (iB) j = iMax Do до iB (j)  j + (n - iMax) j = j - 1 цикл WorkHere = jEnd Function 
 Функция PutRow (iB, sUniv, i) iMax = UBound (iB) sTemp = "  "Для j = 1 До iMax sTemp = sTemp & Mid (sUniv, iB (j), 1) Следующие j ячеек (i, 2). Value = sTemp PutRow = i + 1End Function 

Запустите макрос FindSets, и различные желаемые комбинации окажутся в столбце 2. Однако будьте осторожны при запуске макроса. Количество комбинаций может очень быстро стать очень большим. Например, если вы поместите 26 букв (от A до Z) в ячейку A1 и значение 5 в ячейку A2, макрос выйдет из строя. Почему? Потому что существует 65 780 возможных комбинаций из пяти символов и всего 65 536 строк для их размещения.

Оцените статью
Frestage.ru
Добавить комментарий