Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao i_AM_91,
Ho provato a cercare qualche guida su internet, ma ho un problema che non riesco a risolvere. Devo creare un foglio in cui genero un codice con una iniziale fissa e 9 cifre casuali per un concorso (devo generare 1.600.000 codici).I codici devo tenerli distribuiti su 12 colonne, questo perchè ho dei vincoli per l’inserimento con un programma apposito.La creazione del codice la sto facendo con questa formula:**=CODICE.CARATT(65)&CASUALE.TRA(65;90)&CASUALE.TRA(65;90)&CASUALE.TRA(0;9)&CASUALE.TRA(0;9)&CASUALE.TRA(0;9)&CASUALE.TRA(0;9)&CASUALE.TRA(0;9)&CASUALE.TRA(0;9)&CASUALE.TRA(0;9)**Il mio problema è che devo essere sicuro che i codici siano UNIVOCI e che quindi non ci siano doppioni, però:- se utilizzo la funzione “Rimuovi Duplicati” controlla solo colonna per colonna;- se controllo con “Formattazione condizionale” -> “Regole Evidenziazione Celle” -> “Valori Duplicati…” occupa una quantità di memoria troppo alta e non riesco più ad utilizzare il file, oltre al fatto che non posso controllarli tutti.Esiste una funzione che renda i codici univoci durante la creazione? O un qualche altro modo che mi permetta di fare questo tipo di lavoro?
- Alt+F11 per aprire l'editor di VBA
- Alt+IM per inserire un nuovo modulo di codice
- Nel nuovo modulo vuoto, incolla il seguente codice:
'========>>
Option Explicit
'-------->>
Public Sub Tester()
Dim WB As Workbook
Dim destSH As Worksheet
Dim arrCodici() As Variant, arrOut() As Variant
Dim i As Long, j As Long, k As Long
Dim iCtr As Long, jCtr As Long
Dim UB As Long, UB2 As Long
Const sFoglio As String = "Foglio1" '<<=== Modifica
Const sPrefisso As String = "Z" '<<=== Modifica
Const iNumero_di_codici As Long = 1600000 '<<=== Modifica
Set WB = ThisWorkbook
Set destSH = WB.Sheets(sFoglio)
ReDim arrCodici(1 To iNumero_di_codici)
ReDim arrOut(1 To 1600000 \ 12 + 1, 1 To 12)
UB = UBound(arrOut)
UB2 = UBound(arrOut, 2)
For iCtr = LBound(arrCodici) To UBound(arrCodici)
arrCodici(iCtr) = sPrefisso & (iCtr + 100000000)
Next iCtr
Call Shuffle(arrCodici)
For i = 1 To UBound(arrOut, 2)
For j = 1 To UBound(arrOut) - 1
jCtr = jCtr + 1
arrOut(j, i) = arrCodici(jCtr)
Next j
Next i
For k = 1 To 4
arrOut(jCtr \ 12 + 1, k) = arrCodici(jCtr + k)
Next k
Application.ScreenUpdating = False
destSH.Range("A1").Resize(UB, UB2).Value = arrOut
Application.ScreenUpdating = True
Call MsgBox(Prompt:="Fatto", _
Buttons:=vbInformation, _
Title:="REPORT")
End Sub
'-------->>
Public Sub Shuffle(ByRef arrCodici() As Variant)
Dim sTemp As String
Dim iRandom As Long
Dim i As Long
Dim UB As Long, LB As Long
LB = LBound(arrCodici)
UB = UBound(arrCodici)
Randomize
For i = UB To (LB + 1) Step -1
iRandom = CLng(Int((i - LB + 1) * Rnd + LB))
sTemp = arrCodici(i)
arrCodici(i) = arrCodici(iRandom)
arrCodici(iRandom) = sTemp
Next i
End Sub
'<<========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel
- Salva il file con l’estensione xlsm
- Alt+F8 per aprire la finestra di gestione delle macro
- Seleziona Tester
- Esegui
Potresti scaricare il mio file di prova i_AM_91_20210518.xlsm
===
Regards,
Norman