Per quello che ho capito:
-creati in un foglio l' elenco dei componenti, elencandoli per Categoria in N colonne adiacenti, a partire da A1. In Riga 1 scrivi la categoria, nelle righe sottostanti, per ogni Categoria, scrivi le possibili alternative.
Esempio:
Uploaded with
ImageShack.usLe colonne devono essere adiacenti, e affiancate da una colonna vuota
In ogni colonna, i dati devono essere scritti senza celle vuote.
Poi usa questa macro:
- Codice: Seleziona tutto
Dim myList(), Items As Long, ListInd As Long, myCount()
Sub Mux()
Dim Sorg As String, I As Long, ListRows As Long, SubItem As Long
Sorg = "Foglio1" '<<< Il foglio con l' elenco dei componenti; vedi testo
outlist = "Foglio2" '<<< Il foglio dove sara' generato l' elenco delle combinazioni
ListRows = 1
With Sheets(Sorg)
Items = .Range("A1").CurrentRegion.Columns.Count
ReDim myCount(1 To Items)
For I = 0 To Items - 1
SubItem = (Application.WorksheetFunction.CountA(.Range("A:A").Offset(0, I)) - 1)
myCount(I + 1) = SubItem
ListRows = ListRows * SubItem
Next I
End With
'
ReDim myList(1 To ListRows + 1, 1 To Items)
ListInd = 1
Call myX(1, Sheets(Sorg).Range("a1").CurrentRegion)
Sheets(outlist).Cells.ClearContents
Sheets(outlist).Range("A1").Resize(1, Items).Value = Sheets(Sorg).Range("A1").Resize(1, Items).Value
Sheets(outlist).Range("A2").Resize(ListRows, Items).Value = myList()
End Sub
Sub myX(ByVal H As Long, ByRef STab As Range)
Dim I As Long, J As Long, K As Long
'
For I = 1 To myCount(H)
myList(ListInd, H) = STab(I + 1, H)
If H < Items Then
Call myX(H + 1, STab)
Else
ListInd = ListInd + 1
For K = 1 To H - 1
myList(ListInd, K) = myList(ListInd - 1, K)
Next K
End If
Next I
End Sub
Da excel, Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di destra; personalizza le istruzioni marcate <<<
Tieni presente che il contenuto del foglio che indicherai come "outlist" sara' CANCELLATO SENZA PREAVVISO per creare un elenco pulito con le combinazioni possibili.
Torna su Excel, compila l' elenco dei componenti come descritto sopra; lancia infine la macro e vedi il risultato.
Fai sapere, ciao.