Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    31

    [VBA] Troppo lento, dove sbaglio?

    Ciao a tutti, qualcuno sa dirmi perchè questo codice per essere eseguito ci mette 20 minuti esaurendo tutte le risorse del mio pc da 3Ghz con 512 MB?
    Gli array vettAppo1 e vettAppoOrdinato1, sono di tipo String.
    Aiutatemi per favore, grazie a tutti.


    'CREAZIONE vettAppoOrdinato1
    indice = 0
    flag = 0
    contatore = 0
    x = 0
    Do While contatore <= 65000
    Do While x <= 65000
    If vettAppo1(contatore) = "" Then
    flag = 1
    Exit Do
    ElseIf vettAppo1(contatore) = vettAppoOrdinato1(x) Then
    flag = 1
    End If
    x = x + 1
    Loop
    If flag <> 1 Then
    vettAppoOrdinato1(indice) = vettAppo1(contatore)
    indice = indice + 1
    End If
    flag = 0
    If vettAppo1(contatore) = "" Then
    Exit Do
    End If
    contatore = contatore + 1
    x = 0
    Loop

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Le domande su VBA vanno nell'apposita area dedicata a Visual Basic e "parenti".

    Sposto la discussione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    beh... innanzitutto, così come sono strutturati i cicli Do...Loop, il programma potrebbe dover arrivare a compiere 4.225.000.000 iterazioni... forse decisamente troppe...

    poi non ho ben chiaro cosa questo codice dovrebbe fare...
    se spieghi l'esigenza che hai forse si trova un'alternativa più "snella", che ne pensi?

    Boolean

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    31
    Grazie per esserti interessato a me e ti espongo subito il problema.
    Ho un array di 65000 elementi di tipo stringa, molti i questi elementi sono duplicati fra di loro. L'esigenza è di creare un altro vettore di 65000 elementi dove quest'ultimi vengano copiati dal primo una sola volta, al fine di avere degli elementi univoci.

    ciao e grazie mille.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Ti posto un function che serve per eliminare i duplicati in un vettore che ho copiato da un libro io l'ho provata funziona correttamente:

    codice:
    Dim VettAppo1()
    'esempio di vettore con duplicati
    VettAppo1 = Array("a", "b", "c", "d", "a", "a")
    
    'richiami la function e al termine in VettAppo1 non hai più duplicati
    dups = FilterDuplicates(VettAppo1())
    
    
    Function FilterDuplicates(arr As Variant) As Long
        Dim col As Collection, index As Long, dups As Long
        Set col = New Collection
        
        On Error Resume Next
        
        For index = LBound(arr) To UBound(arr)
            'costruisci la chiave usando l'elemento dell'array
            'avviene un errore se la chiave esiste già
            col.Add 0, CStr(arr(index))
            If Err Then
                'abbiamo trovato un duplicato
                arr(index) = Empty
                dups = dups + 1
                Err.Clear
            ElseIf dups Then
                'abbiamo trovato uno o più duplicati
                ' dobbiamo spostare gli elementi verso gli indici più bassi
                arr(index - dups) = arr(index)
                arr(index) = Empty
            End If
        Next
        'restituisci il numero dei duplicati se ti interessa
        FilterDuplicates = dups
    End Function
    Ciao, spero possa esserti utile

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    31
    Grazie mgmg,
    la tua funzione funziona alla grande, cavolo...
    Sei un mago.


    ciao e grazie ancora

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    No! E' un mago chi ha scritto il libro, io ho solo copiato.

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.