Ron sa che può usare la funzione COMBINAZIONE per determinare il numero di combinazioni che possono essere fatte da un numero di cifre. Si sta chiedendo, tuttavia, se esiste un modo per elencare tutte le combinazioni stesse.

Non esiste un modo integrato per elencare le combinazioni in Excel. Tuttavia, puoi creare una macro per eseguire l’elenco per te. Se vuoi trovare le combinazioni univoche in un insieme di numeri sequenziali che iniziano da 1, il seguente insieme di macro farà il trucco. Tutto quello che devi fare è eseguire la funzione TestCNR e ti ritroverai con una “matrice” di celle che rappresentano il numero di combinazioni di 4 cifre nel set sequenziale di valori che vanno da 1 a 10.

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

La macro sovrascrive tutto ciò che è nel foglio di lavoro, quindi assicurati di eseguire il test con un foglio di lavoro vuoto visualizzato. Se vuoi cambiare la dimensione del set o il numero di elementi nel sottoinsieme, cambia semplicemente i valori passati nella routine TestCNR.

Se desideri estrarre combinazioni univoche da una stringa di caratteri (ad esempio, le lettere dell’alfabeto), devi utilizzare un insieme diverso di macro. Quanto segue funzionerà bene; si presume che i caratteri che si desidera utilizzare come “universo” si trovino nella cella A1 e che il numero desiderato in ciascuna combinazione univoca sia nella cella 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

Eseguire la macro FindSets e le diverse combinazioni desiderate finiscono nella colonna 2. Prestare attenzione quando si esegue la macro, tuttavia. Il numero di combinazioni può diventare molto grande molto rapidamente.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (11891) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: