Risultati da 1 a 15 di 15

Discussione: Oggetto Dictionary - valori univoci



  1. #1

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2031
    Versione Office
    Excel 2013
    Utile ricevuti
    756
    Utile dati
    709

    Oggetto Dictionary - valori univoci

    Ciao a tutti,
    quando ci capita di dover estrapolare valori univoci da un elenco in VBA solitamente si usa l'oggetto Collection.
    Oggi volevo usare un nuovo oggetto che a differenza di Collection non necessita della gestione degli errori (On Error Resume Next).
    L'oggetto in questione è Dictionary.
    Come Collection, anche Dictionary fa parte delle collezioni di vba come ad esempio Worksheets, Shapes ecc.
    Per aggiungere Item, Dictionary si può usare con il metodo Exist (che verifica se già presente) oppure con il metodo Item che lo sovrascrive in caso già presente. In tutti e due i casi restituisce una matrice di valori univoci:
    Ecco un esempio:

    A
    1
    paperino
    2
    pippo
    3
    zio paperone
    4
    minni
    5
    pluto
    6
    zio paperone
    7
    gastone
    8
    pippo
    9
    clarabella
    10
    gastone
    11
    paperoga
    12
    Clarabella
    13
    paperoga
    14
    topolino
    15
    pippo
    16
    pippo
    17
    topolino
    18
    minni
    19
    pluto
    20
    pluto
    21
    clarabella
    22
    qui quo qua
    23
    zio paperone
    24
    topolino
    25
    clarabella
    26
    paperoga
    27
    minni
    28
    minni
    29
    paperino
    30
    gastone


    con il metodo Exist:
    Codice: 
    Sub RicercaDuplicatiDictionary_1()
    'by Rubik72
    Dim Dict As Object
    Dim uRiga As Long
    Dim I As Long
    Dim MyString As String
    Dim arr
    
    
    Set Dict = CreateObject("Scripting.Dictionary")
    Dict.CompareMode = vbTextCompare 'consente il confronto senza distinzione tra maiusc e minusc
    'mentre vbBinaryCompare consente la distinzione tra maius e minusc
    
    
    With ThisWorkbook.Worksheets("Foglio1")
        .Range("c1").EntireColumn.Clear
    
    
        uRiga = Cells(Rows.Count, 1).End(xlUp).Row
    
    
        For I = 1 To uRiga
            MyString = Cells(I, 1)
            If Not Dict.exists(MyString) Then
                Dict.Add MyString, MyString
            End If
        Next I
        arr = Dict.Items
        .Range("c1").Resize(Dict.Count, 1).Value = Application.Transpose(arr)
    End With
    End Sub

    con il metodo Item
    Codice: 
    Sub RicercaDuplicatiDictionary_2()
    'by Rubik72
    Dim Dict As Object
    Dim uRiga As Long
    Dim I As Long
    Dim MyString As String
    Dim arr
    
    
    Set Dict = CreateObject("Scripting.Dictionary")
    Dict.CompareMode = vbTextCompare 'consente il confronto senza distinzione tra maiusc e minusc
    'mentre vbBinaryCompare consente la distinzione tra maius e minusc
    
    
    With ThisWorkbook.Worksheets("Foglio1")
        .Range("e1").EntireColumn.Clear
    
    
        uRiga = Cells(Rows.Count, 1).End(xlUp).Row
    
    
        For I = 1 To uRiga
            MyString = Cells(I, 1)
            Dict.Item(MyString) = MyString
        Next I
        arr = Dict.Items
    
    
        .Range("e1").Resize(Dict.Count, 1).Value = Application.Transpose(arr)
    End With
    End Sub
    File Allegati File Allegati
    Ultima modifica fatta da:Gerardo Zuccalà; 16/10/16 alle 09:54 Motivo: Aggiunto prefisso [tutorial VBA]

  2. I seguenti 4 utenti hanno dato un "Utile" a Rubik72 per questo post:


  3. #2
    L'avatar di Captain Harlock
    Clicca e Apri
    Data Registrazione
    Aug 2016
    Località
    Italy
    Messaggi
    11
    Versione Office
    All
    Utile ricevuti
    0
    Utile dati
    0

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Buon post.
    Con ujna precisazione:
    Come Collection, anche Dictionary fa parte delle collezioni di vba come ad esempio Worksheets, Shapes ecc.
    Worksheets e Shapes non fanno parte delle "collezioni di VBA" ma sono oggetti di Excel: Dictionary è un oggetto fornito da una libreria esterna ed è noto anche a Word, Access e agli altri della felice famiglia senza bisogno di referenziare Excel.

  4. #3

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2031
    Versione Office
    Excel 2013
    Utile ricevuti
    756
    Utile dati
    709

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Citazione Originariamente Scritto da Captain Harlock Visualizza Messaggio
    [...]
    Worksheets e Shapes non fanno parte delle "collezioni di VBA" ma sono oggetti di Excel: Dictionary è un oggetto fornito da una libreria esterna ed è noto anche a Word, Access e agli altri della felice famiglia senza bisogno di referenziare Excel.
    Grazie della precisazione

  5. #4
    L'avatar di ggratis
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Lecce - Pisa
    Età
    44
    Messaggi
    675
    Versione Office
    Excel 2010
    Utile ricevuti
    238
    Utile dati
    186

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Grazie per l'info...
    allego questo link, che cogliendo l'occasione ho trovato in rete...
    http://www.snb-vba.eu/VBA_Dictionary_en.html

  6. I seguenti utenti hanno dato un "Utile"


  7. #5
    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    63
    Messaggi
    3278
    Versione Office
    2007 - 2013
    Utile ricevuti
    435
    Utile dati
    69

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Grazie del link ggratis

    Appena torno a casa me lo stampo per studiarmelo bene.
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  8. #6
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    1831
    Versione Office
    Excel2010
    Utile ricevuti
    453
    Utile dati
    110

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Ciao Enzo
    Ottimo lavoro, moooolto interssante

    Ancora complimenti
    Ciao,
    Mario

    PS - Proverò con un elenco più ... corposo per verificare i tempi impiegati dall'una e dall'altra.

  9. #7

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    963
    Versione Office
    .
    Utile ricevuti
    310
    Utile dati
    0

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Ciao,

    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    ...a differenza di Collection non necessita della gestione degli errori (On Error Resume Next).


    solo per maggior chiarezza: non è che non necessiti di gestire l'errore, è che puoi prevenirlo utilizzando il metodo .Exsist.
    Infatti se tu commentassi l'If il metodo .Add solleverebbe un errore.

    Codice: 
    
            'If Not Dict.exists(MyString) Then
    
                Dict.Add MyString, MyString
    
            'End If
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  10. #8
    L'avatar di ggratis
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Lecce - Pisa
    Età
    44
    Messaggi
    675
    Versione Office
    Excel 2010
    Utile ricevuti
    238
    Utile dati
    186

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    ...immagino che anche per l'oggetto Dictionary, convenga settarlo a nothing a fine ciclo o sbaglio?!

    saluti
    gg

    [...]
    di marzulliana memoria: si faccia una domanda si dia una risposta!
    sembrerebbe che non sia fondamentale, salvo in casi particolari
    http://stackoverflow.com/questions/8...-up-by-setting

    saluti

  11. #9

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2031
    Versione Office
    Excel 2013
    Utile ricevuti
    756
    Utile dati
    709

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,





    solo per maggior chiarezza: non è che non necessiti di gestire l'errore, è che puoi prevenirlo utilizzando il metodo .Exsist.
    Infatti se tu commentassi l'If il metodo .Add solleverebbe un errore.

    Codice: 
    
            'If Not Dict.exists(MyString) Then
    
                Dict.Add MyString, MyString
    
            'End If
    Esatto, intendevo dire prevenirlo con in metodo .Exsist, metodo che non supporta Collection.
    Grazie per la precisazione.

  12. #10

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    963
    Versione Office
    .
    Utile ricevuti
    310
    Utile dati
    0

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Citazione Originariamente Scritto da ggratis Visualizza Messaggio
    ...immagino che anche per l'oggetto Dictionary, convenga settarlo a nothing a fine ciclo o sbaglio?!



    [...]

    di marzulliana memoria: si faccia una domanda si dia una risposta!

    sembrerebbe che non sia fondamentale, salvo in casi particolari


    Per me è sempre meglio distruggere le variabili che referenziano oggetti, ma ribadisco che è una mia abitudine e convinzione, nata da esperienze negative con il garbage-collector di Excel.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  13. #11

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    3127
    Versione Office
    2013
    Utile ricevuti
    932
    Utile dati
    753

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Ciao a tutti,
    prima di tutto.. grazie Enzo per aver postato gli esempi di utilizzo delle "Dictonary"

    In questa discussione:
    http://www.forumexcel.it/forum/6-dom...i-in-un-foglio

    ho voluto provare quanto da te spiegato (al posto delle Collection) e funziona a dovere, ma....
    perchè l'editor non da i suggerimenti delle proprietà/metodi della Dictonary?
    C'è qualcosa da "attivare"?

    Senza quei suggerimenti devi per forza ricordarti esattamente tutto quello che devi usare (infatti mi sono appoggiato a questo tutorial per alcune proprietà e per altre sono andato "a occhio" ).

    Ciao
    Tore

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  14. #12
    L'avatar di dracoscrigno
    Clicca e Apri
    Data Registrazione
    May 2016
    Località
    ferrara
    Età
    40
    Messaggi
    1257
    Versione Office
    office pro 2010
    Utile ricevuti
    315
    Utile dati
    160

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Citazione Originariamente Scritto da ggratis Visualizza Messaggio
    Grazie per l'info...
    allego questo link, che cogliendo l'occasione ho trovato in rete...
    http://www.snb-vba.eu/VBA_Dictionary_en.html

    Volevo mettere un mi piace ma non c'è la manina con il pollice alzato nel post

  15. #13

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2031
    Versione Office
    Excel 2013
    Utile ricevuti
    756
    Utile dati
    709

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Citazione Originariamente Scritto da cromagno Visualizza Messaggio
    Ciao a tutti,
    prima di tutto.. grazie Enzo per aver postato gli esempi di utilizzo delle "Dictonary"

    In questa discussione:
    http://www.forumexcel.it/forum/6-dom...i-in-un-foglio

    ho voluto provare quanto da te spiegato (al posto delle Collection) e funziona a dovere, ma....
    perchè l'editor non da i suggerimenti delle proprietà/metodi della Dictonary?
    C'è qualcosa da "attivare"?

    Senza quei suggerimenti devi per forza ricordarti esattamente tutto quello che devi usare (infatti mi sono appoggiato a questo tutorial per alcune proprietà e per altre sono andato "a occhio" ).

    Ciao
    Tore
    Ciao Tore,

    Ti ricordo che Dictionary non fa parte della libreria standard di VBA.
    E' un elemento nella libreria Microsoft Scripting Runtime.

    Prova ad attivare libreria 'Microsoft Scripting Runtime' (Menu / Strumenti / Riferimenti ..) e il VBE ti suggerirà i metodi/proprietà

  16. #14
    L'avatar di dracoscrigno
    Clicca e Apri
    Data Registrazione
    May 2016
    Località
    ferrara
    Età
    40
    Messaggi
    1257
    Versione Office
    office pro 2010
    Utile ricevuti
    315
    Utile dati
    160

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    con alla libreria flaggata in menu -> strumenti -> riferimenti -> Microsoft Scripting RunTime
    Codice: 
    Dim MioDizionario As Scripting.Dictionary
    Set MioDizionario = New Scripting.Dictionary

    Senza dover rendere la vita difficile all' utilizzatore finale che non dovrà preoccuparsi di librerie da spuntare nei riferimenti.
    Se sul computer è presente bene.
    Altrimenti pace ;)
    Codice: 
    Dim MioDizionario As Object
    Set MioDizionario = CreateObject("Scripting.Dictionary")

    Naturalmente nel primo caso si ha tutto l' aiuto dell' intellisense e nel seconto no.
    Quinidi, solitamente si programma utilizzando il riferimento ed alla fine, dopo il debug, si tolgono i riferimenti e si sostituiscon le istruzioni con il createobject()

  17. #15

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    3127
    Versione Office
    2013
    Utile ricevuti
    932
    Utile dati
    753

    Re: [Tutorial VBA] Oggetto Dictionary - valori univoci

    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    Ciao Tore,

    Ti ricordo che Dictionary non fa parte della libreria standard di VBA.
    E' un elemento nella libreria Microsoft Scripting Runtime.

    Prova ad attivare libreria 'Microsoft Scripting Runtime' (Menu / Strumenti / Riferimenti ..) e il VBE ti suggerirà i metodi/proprietà
    Ecco... esattamente quello che intendevo.
    Thanks Enzo

    Citazione Originariamente Scritto da dracoscrigno
    Naturalmente nel primo caso si ha tutto l' aiuto dell' intellisense e nel seconto no.
    Quinidi, solitamente si programma utilizzando il riferimento ed alla fine, dopo il debug, si tolgono i riferimenti e si sostituiscon le istruzioni con il createobject()
    Grazie anche a te draco.

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

Discussioni Simili

  1. [Risolto] Generare Colonna con valori univoci da una lista
    Di Domynix nel forum Domande su Excel in generale
    Risposte: 2
    Ultimo Messaggio: 05/01/17, 13:01
  2. [Risolto] Conta numero di valori univoci - qui,qui,quo,qua,quo,qua,qui=3
    Di aldomattana nel forum Domande su Excel in generale
    Risposte: 2
    Ultimo Messaggio: 09/12/16, 18:17
  3. [Risolto] Estrarre valori univoci da elenco
    Di G.Bove nel forum Domande su Excel in generale
    Risposte: 9
    Ultimo Messaggio: 09/10/16, 19:48
  4. estrarre valori univoci
    Di BRAZ66 nel forum Domande su Excel in generale
    Risposte: 0
    Ultimo Messaggio: 24/09/16, 19:26
  5. [Risolto] Conteggio valori univoci con una condizione
    Di mattegem nel forum Domande su Excel in generale
    Risposte: 10
    Ultimo Messaggio: 30/08/16, 07:49

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •