Condividi tramite

Generazione codici casuali UNIVOCI

Anonimo
2021-05-18T10:20:43+00:00

Buongiorno a tutti, 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?

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

3 risposte

Ordina per: Più utili
  1. Anonimo
    2021-05-18T16:48:59+00:00

    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

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2021-05-18T15:38:45+00:00

    vuoi controllare se la tua formula verrà duplicata, corretto?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-05-18T10:52:07+00:00

    Ciao, comunidade Benvenuto nella Microsoft. Piacere di aiutarti. Sono Sandro, un consulente indipendente.

    La risposta è stata utile?

    0 commenti Nessun commento