rossofoco
21-11-2014, 11:05
Buongiorno a tutti/e,
intanto mi presento...mi chiamo Amedeo e vi ho "utilizzato" molto ultimamente imparando tante cose! Quindi grazie!
Venendo al dunque, vorrei da voi un consiglio. La situazione è la seguente:
Ho un foglio Excel che riporta sulla prima colonna combinazioni di lunghezza diversa (da poter scegliere di volta in volta) delle lettere I,X. Posta ad esempio la lunghezza della "password" pari a 3 avremmo la seguente tabella
A B
1 IIX XII
2 XII XXII
3 III IXX
4 XXX IXI
Io vorrei con un clic, far apparire nella colonna B (per esempio) tutte le combinazioni rimanenti da poter utilizzare.
Il mio codice VB è il seguente:
Sub Ovale1_Click()
Dim arrayChar() As String, arrayPwd() As String, lunghezza As Integer, Codcheck() As String
Dim a As Integer, numeroComb As Integer, varChar As String, pwd As String
Dim c As Integer, n As Integer, i As Integer
Dim break As Integer, break2 As Integer
Dim found As Boolean
numeroComb = 1
lunghezza = 3
varChar = "X,I"
'calcolo n° combinazioni
For i = 1 To lunghezza
numeroComb = numeroComb * 2
Next i
arrayChar = Split(varChar, ",")
Worksheets("Foglio1").Activate
Foglio1.Cells(1, 1).Activate
'calcolo del numero di celle non vuote
n = Application.WorksheetFunction.CountA(Range(Selection, Selection.End(xlDown)).EntireColumn)
ReDim Codcheck(n) As String
ReDim arrayPwd(numeroComb) As String
'ciclo per assegnare i valori dei codici all'array
For i = 0 To n
Codcheck(i) = Foglio1.Cells(i + 2, 1).Value
Next i
break = 0
i = 0
a = 0
For c = 0 To numeroComb
pwd = genera(arrayChar, lunghezza - 1)
For i = 0 To n
If Codcheck(i) = pwd Then
break1 = break1 + 1
Exit For
End If
found = InStr(1, "" & Join(arrayPwd, "") & "", "" & pwd & "") > 0
If found Then
break2 = break2 + 1
End If
Next i
If break1 = 0 Then
If break2 = 0 Then
arrayPwd(a) = pwd
a = a + 1
End If
End If
break1 = 0
break2 = 0
Next c
i = 1
a = 10
For i = 0 To numeroComb
Foglio1.Cells(i + 1, a) = arrayPwd(i)
Next i
End Sub
Private Function genera(arr, num_cifre)
Dim b As Integer, k As Integer, numero As Integer, variabile As String
numero = UBound(arr)
Randomize
For b = 0 To num_cifre
k = Int((2 * Rnd))
variabile = variabile & arr(k)
Next
genera = variabile
End Function
L'unico problema che mi rimane è che non è detto che la funzione generativa dei codici a tre cifre generi effettivamente tutte le possibili combinazioni. Sapete aiutarmi?? Ve ne sarei infinitamente grato!!!
PS.
Sicuramente il codice non è ottimizzato.... :) abbiate pietà ma le mie conoscenze sono abbastanza basic!!! :)
intanto mi presento...mi chiamo Amedeo e vi ho "utilizzato" molto ultimamente imparando tante cose! Quindi grazie!
Venendo al dunque, vorrei da voi un consiglio. La situazione è la seguente:
Ho un foglio Excel che riporta sulla prima colonna combinazioni di lunghezza diversa (da poter scegliere di volta in volta) delle lettere I,X. Posta ad esempio la lunghezza della "password" pari a 3 avremmo la seguente tabella
A B
1 IIX XII
2 XII XXII
3 III IXX
4 XXX IXI
Io vorrei con un clic, far apparire nella colonna B (per esempio) tutte le combinazioni rimanenti da poter utilizzare.
Il mio codice VB è il seguente:
Sub Ovale1_Click()
Dim arrayChar() As String, arrayPwd() As String, lunghezza As Integer, Codcheck() As String
Dim a As Integer, numeroComb As Integer, varChar As String, pwd As String
Dim c As Integer, n As Integer, i As Integer
Dim break As Integer, break2 As Integer
Dim found As Boolean
numeroComb = 1
lunghezza = 3
varChar = "X,I"
'calcolo n° combinazioni
For i = 1 To lunghezza
numeroComb = numeroComb * 2
Next i
arrayChar = Split(varChar, ",")
Worksheets("Foglio1").Activate
Foglio1.Cells(1, 1).Activate
'calcolo del numero di celle non vuote
n = Application.WorksheetFunction.CountA(Range(Selection, Selection.End(xlDown)).EntireColumn)
ReDim Codcheck(n) As String
ReDim arrayPwd(numeroComb) As String
'ciclo per assegnare i valori dei codici all'array
For i = 0 To n
Codcheck(i) = Foglio1.Cells(i + 2, 1).Value
Next i
break = 0
i = 0
a = 0
For c = 0 To numeroComb
pwd = genera(arrayChar, lunghezza - 1)
For i = 0 To n
If Codcheck(i) = pwd Then
break1 = break1 + 1
Exit For
End If
found = InStr(1, "" & Join(arrayPwd, "") & "", "" & pwd & "") > 0
If found Then
break2 = break2 + 1
End If
Next i
If break1 = 0 Then
If break2 = 0 Then
arrayPwd(a) = pwd
a = a + 1
End If
End If
break1 = 0
break2 = 0
Next c
i = 1
a = 10
For i = 0 To numeroComb
Foglio1.Cells(i + 1, a) = arrayPwd(i)
Next i
End Sub
Private Function genera(arr, num_cifre)
Dim b As Integer, k As Integer, numero As Integer, variabile As String
numero = UBound(arr)
Randomize
For b = 0 To num_cifre
k = Int((2 * Rnd))
variabile = variabile & arr(k)
Next
genera = variabile
End Function
L'unico problema che mi rimane è che non è detto che la funzione generativa dei codici a tre cifre generi effettivamente tutte le possibili combinazioni. Sapete aiutarmi?? Ve ne sarei infinitamente grato!!!
PS.
Sicuramente il codice non è ottimizzato.... :) abbiate pietà ma le mie conoscenze sono abbastanza basic!!! :)