Ho solo modificato il messaggio inserito nella macro di Anthony
dando la possibilità di avere 3 scelte
leggi il messaggio e clicca dove è più opportuno
- Codice: Seleziona tutto
Sub comb2a2()
Dim ListA1 As String, Dest As String, MyVArr, DynArr, Rispo, aaa
Dim LstList As Integer, Player As Integer, I As Integer, J As Integer
'Parametri
ListA1 = "A2" 'La cella dove comincia l' elenco dei componenti
Dest = "C2" 'l' area delle combinazioni
'
RePlayer:
LstList = Range(ListA1).Offset(100, 0).End(xlUp).Row
Player = LstList - Range(ListA1).Row + 1
If Player Mod 2 = 1 Then
Range(ListA1).Offset(Player) = "Rip"
GoTo RePlayer
End If
If Player < 4 Or Player > 30 Then
MsgBox ("Almeno 4 e max 30 Player (ora sono " & Player & "); operazione interrotta")
Exit Sub
End If
MyVArr = Range(ListA1).Resize(Player, 1).Value
Range(Dest).Resize(Player + 10, Player).Select
Rispo = MsgBox("Effettuare l'intero processo?" & vbCrLf & _
"SI per continuare, NO per pulire solo l'area selezionata, Annulla per Annullare", vbYesNoCancel)
If Rispo = vbYes Then
Selection.Clear
Selection.Range("A1").Select
'inizializza dynArr
DynArr = Range(Dest).Resize(Player - 1, Player).Value
I = UBound(DynArr, 2)
For I = 0 To Player / 2 - 1
DynArr(1, 1 + I * 2) = 1 + I: DynArr(1, 1 + I * 2 + 1) = Player - I
Next I
For I = 2 To Player - 1
For J = 2 To Player
DynArr(I, J) = (DynArr(I - 1, J) - 3 + 2 * (Player - 1)) Mod (Player - 1) + 2
Next J
Next I
For I = 2 To Player - 1
DynArr(I, 1) = 1
Next I
'scrivi in Dest
For I = 1 To Player - 1
For J = 1 To Player
With Range(Dest).Offset(I - 1, J - 1)
.Value = MyVArr(DynArr(I, J), 1)
If Int((J - 1) / 2) Mod 2 = 0 Then .Interior.Color = RGB(0, 200, 200)
'Range(Dest).Resize(Player - 1, Player) = DynArr
End With
Next J
Next I
Else
If Rispo = 7 Then Selection.Clear
Range("A1").Select
End If
End Sub
Ma ricorda che ad ogni rielaborazione avrai la stessa distribuzione dei dati dello schema iniziale
quindi l'azzeramento della tabella di output è inutile in quanto, se non cambiano i "valori" nella lista si ripresenteranno nella stessa maniera e, se cambiano
ad ogni nuovo processo avrai automaticamente il risultato voluto
senza dover azzerare la tabella di output
ciao
Edit: 22/02/2012 ore 00:17
penso che sia inutile il mio post scritto accavallandomi a quello di Anthony
per il momento lo lascio, poi vedremo...