È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

[RISOLTO] Velocizzare elaborazione VBA

  • Messaggi
  • OFFLINE
    Marius44
    Post: 1.205
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    00 15/02/2024 11:58
    Salve a tutti
    Sembra che ci siamo inariditi. Da qualche giorno non ci sono domande. O siamo diventati tutti bravi oppure ci spaventiamo a scrivere.
    Cerco, se possibile, di smuovere un po' le acque.

    Nel file che allego vi sono circa 2700 estrazioni di SuperEnalotto. Non sono un ludopatico ma mi piace "scavare" nelle cose.
    Ho creato una macro che, in base al numero di righe che voglio analizzare (e che scrivo nella cella I1), mi riporta gli ambi per ogni riga e per ogni ambo scrive la frequenza di estrazione.

    Ora, se le righe da analizzare sono inferiori a 500 i tempi di elaborazione sono inferiori a 3 sec.
    Crescono, ed anche tanto, se aumentiamo il numero di righe.

    La macro che ho utilizzato è riportata sotto ma vorrei sapere se esiste un altro modo (io ho usato Dictionary) per eseguire l'elaborazione nel minor tempo possibile.
    Dimenticavo di dire che nelle celle N2:N3 appare il tempo impiegato per la prima parte e per la seconda.
    Option Explicit
    
    Sub Crea_Ambi()
    Dim iTime1 As Single, iTime2 As Single, fTime1 As Single, fTime2 As Single, nRig As Long
    Dim estr, ambo()
    Dim i As Long, j As Long, k As Long, a As Long, rg As Long
    Dim Dic, tempArr, key
    iTime1 = Timer
    Range("J:L, N2:N3").ClearContents
    nRig = Cells(1, 9).Value
    If nRig = 0 Then nRig = Cells(Rows.Count, 2).End(xlUp).Row
    Cells(1, 10) = "freq.": Cells(1, 11) = "A1": Cells(1, 12) = "A2"
    'assume la sestina di ogni riga
    estr = Range("B2:G" & nRig) 'Cells(Rows.Count, 7).End(xlUp).Row).Value
    ReDim ambo(1 To UBound(estr) * 15)
    Set Dic = CreateObject("Scripting.Dictionary")
    With CreateObject("Scripting.Dictionary")
      .CompareMode = vbTextCompare
      For i = LBound(estr) To UBound(estr)
        For j = 1 To 5
          For k = j + 1 To 6
            a = a + 1
            ambo(a) = estr(i, j) & "," & estr(i, k)
            If Not .Exists(Dic.Item(ambo(a))) Then
              Dic.Item(ambo(a)) = ambo(a)
            End If
          Next k
        Next j
      Next i
    End With
    fTime1 = Timer
    Cells(2, "N") = fTime1 - iTime1
    '
    iTime2 = Timer
    rg = 2
    For Each key In Dic.Keys
      tempArr = Split(key, ",")
      For i = 1 To UBound(ambo)
        If key = ambo(i) Then Cells(rg, 10) = Cells(rg, 10) + 1
      Next i
      For i = 0 To 1
        Cells(rg, i + 11) = CInt(tempArr(i))
      Next i
      rg = rg + 1
    Next key
    fTime2 = Timer
    Cells(3, "N") = fTime2 - iTime2
    Set Dic = Nothing
    Cells(1, 1).Select
    End Sub
    

    Aspetto le vostre considerazioni. Grazie per l'attenzione. Ciao,
    Mario
  • nTdQ231201
    00 15/02/2024 12:32
    In rete ho trovato questo:
    https://www.forumexcel.it/forum/threads/come-velocizzare-macro-estremamente-lenta-in-un-foglio-con-molte-formule.69139/
  • OFFLINE
    alfrimpa
    Post: 5.062
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    20 15/02/2024 13:01
    Re:
    rex88 (nTdQ231201), 15/02/2024 12:32:

    In rete ho trovato questo:
    https://www.forumexcel.it/forum/threads/come-velocizzare-macro-estremamente-lenta-in-un-foglio-con-molte-formule.69139/



    Che non c'entra nulla con il quesito posto da Marius44



    Alfredo
  • nTdQ231201
    01 15/02/2024 13:22
    Infatti, mi sono attenuto esclusivamente al titolo della discussione.

    EDIT

    Nel post si parlava di macro "Ho creato una macro" e il link riportato parla di velocizzare una macro
    https://www.forumexcel.it/forum/threads/come-velocizzare-macro-estremamente-lenta-in-un-foglio-con-molte-formule.69139/

    Il file non l'ho neanche aperto.
    [Modificato da rex88 15/02/2024 13:30]
  • OFFLINE
    L2018
    Post: 1.144
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 14:07
    Re:
    Ciao Mario
    finalmente un quesito da te, con esordio commendevole, a tutto c'è una spiegazione.
    -----------
    ora sono impedito ma nel tardo pomeriggio mi riprometto di esaminare la macro, avvertendoti però che io mastico pochissimo il VBA.
    Io mi occupo da moooolti anni di questo genere di problemi e so che Excel non è fatto per le grandi elaborazioni ripetitive.
    Infatti il mio PowerBasic a confronto è fulmineo
    alcune caratteristiche peggiorano la performance di una elaborazione numerica
    anzitutto operare con le stringhe
    mescolarci e inserire valori stringa per formattare un risultato
    chiedere all'algoritmo di scrivere mentre elabora, invece se fosse mai possibile sarebbe il caso di tenere tutto il database in memoria.
    Ma a parte queste 2 o 3 cosine, e forse ne dimentico qualcun'altra. bisogna capire perchè il tempo di elaborazione di 2700 estrazioni non sia proporzionale a quello di 400.
    La prima risposta che mi viene in mente è che, forse, ogni volta che si aggiorna il database si costringa a ritrovare da capo gli ambi, ma non credo che tu abbia commesso questa ingenuità.
    In definitiva a parte la notazione che si usa per un certo linguaggio, a mio avviso la più FONDAMENTALE è l'algoritmo
    Da quando ho imparato a programmare io ho rimuginato sempre la stessa minestra di pochi programmetti, solo per migliorare l'algoritmo, per ottenere le massime velocità.
    Per esempio al tempo del totocalcio ho realizzato una cosetta che sviluppava 14 triple, quasi 5 milioni di colonne, anche scrivendole su disco, in poco più di mezzo secondo, tanto che un tecnico programmatore si meravigliò di me.
    Perciò avrò piacere di esaminare l'opera con calma, e soprattutto mi piacerebbe scambiare con te idee in merito, ma non in questa sede.

    LEO
    https://t.me/LordBrum
  • OFFLINE
    Marius44
    Post: 1.205
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    00 15/02/2024 15:09
    Ciao a tutti
    Innanzi tutto un ringraziamento ai partecipanti per l'interesse mostrato.
    Vorrei che il dialogo avvenisse senza polemiche e nel rispetto reciproco ma basato esclusivamente sui dati, sul codice, sul modo di trattare il problema.

    Vi faccio notare che il codice è "grezzo", cioè non ha tutte quelle "appendici" che si usano di solito per velocizzare.
    Per esempio manca Application.ScreenUpdating=False/True all'inizio e alla fine. Inserendo queste due righe si guadagna un po' (provare per credere).
    Manca anche il Calcolo Manuale (ma credo che in questo caso c'entri poco).
    Circa la scrittura sul Foglio nell'esempio ciò avviene alla fine e tutto d'un colpo (almeno credo).

    @L2018
    Si Leo, sono quei giri che fanno perdere tempo (guarda il codice da rg=2 in poi) ma non mi è venuto meglio di così per realizzare quanto mi proponevo.

    Altri suggerimenti?.

    Ciao,
    Mario
  • OFFLINE
    L2018
    Post: 1.145
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 15:27
    Re:
    Mario
    puoi stare tranquillo che in questa discussione non ci sarà posto per veruna polemica, di che tipo poi ?
    Tutti i programmi cominciano in modo grezzo
    Updating vero o falso va bene, ma non risolverebbe
    Calcolo manuale sinceramente non so cosa sia
    scrittura su foglio, non dovresti credere ma saperlo di certo
    il timer dovrebbe partire solo un istante prima della elaborazione, ma poco risolve
    Se possibile eliminare le stringhe, variabili eccessive e tutto ciò che si inserisce nel conteggio
    Se il database non deve estendersi molto oltre le 2700 estrazioni si dovrebbe vedere se riesce a stare in memoria
    Di suggerimenti se ne possono trovare, ma come ho detto ora devo andare in un posto bruttissimo che si chiama Banca
    nel frattempo qualche suggeritore uscirà fuori
    mi dedicherò alla macro al mio rientro, con la speranza di poterlo fare come dico io

    LEO
    https://t.me/LordBrum
  • OFFLINE
    by sal
    Post: 7.529
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 15/02/2024 15:57
    Ciao Mario, lo stavo facendo con il metodo tradizionale, ma il tempo diventa proibitivo, poi mi sono ricordato.
    è un problema che ho risolto tempo fa, leggendo un articolo nel web, che mi ha dato l'imbeccata ed ho aggiustato la macro che usava.
    Bisogna usare le Tabelle per velocizzare al massimo, questo sono riuscito a tirare fuori

    Ho inserito tutti i 4000 e rotti ambi ed ho inserito, l'archivio del superenalotto che ho io, lo vedi nel foglio archivio che ho inserito sono 3723 estrazioni, come vedrai ci impiega solo 4 secondi e rotti, per riportare ogni ambo quante volte è uscito

    Ciao Salvatore (8-D

    P.S. ricorda che i due archivi nel foglio Sal sono impostate come tabelle, nella seconda ho tolto i filtri, l'ho lasciati solo sulla prima per filtrare i dati e vedere quali sono gli ambi che hanno avuto una maggiore frequenza o altro, Bye bye
    [Modificato da by sal 15/02/2024 16:13]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    Marius44
    Post: 1.206
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    00 15/02/2024 16:32
    Ciao

    @bySal
    Ciao Salvatore, vedo che stai bene e son contento per te.
    Complimenti per la macro (che andrò a studiarmi passo-passo).
    In effetti è una scheggia in confronto alla mia. Dipenderà solo dal fatto che hai "intabellato" il tutto?
    Voglio approfondire.
    Intanto grazie per la condivisione.

    Ciao,
    Mario

    PS - Ma come fai ad allegare un file .xlsm senza zipparlo? A me non lo fa allegare.
    [Modificato da Marius44 15/02/2024 16:33]
  • OFFLINE
    by sal
    Post: 7.530
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 15/02/2024 17:29
    Ciao Mario, cerco di non abbattermi tenendomi impegnato, ma faccio fatica a respirare, in effetti si, il tutto e la tabella che fa da base, e si usano i comandi tabella, ma poi fa un semplice ragionamento, visto che sono ambi, se non trova il primo numero, non controlla il resto, e questo lo fa simultaneamente per tutte le estrazioni, e solo se trova il secondo numero passa allo step successivo contando le volte che lo trova.

    come vedi non usa nessuna funzione Match o countif, è il Bodyrange che fa da base per la ricerca, certo non conosco tutte le funzioni tabelle, qualche appunto lo puoi trovare qui Acosani non so se conosci il sito, ma devi cercare perche è un poco criptico trovare gli argomenti, ed è anche ricco di altri linguaggi di programmazione.

    non so perche a te non carica il file xlsm, ma forse hai le estensioni visibili, prova a nascondere le estensioni, io non le ho visibili, tanto lo vedo che tipo di file sono dall'icona.

    Ciao Salvatore (8-D
    [Modificato da by sal 15/02/2024 17:32]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    L2018
    Post: 1.146
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 17:33
    Re:
    Ciao
    sono rientrato
    mi chiedo fra tanti miei limiti se per caso alle volte l'intabellamento equivalga a ciò che io chiamo database in memoria
    quindi è evidente che Excel e altri linguaggi differiscono per molte cose, anche se i ragionamenti di base sono simili
    infatti io stesso sono riuscito a creare qualche macro con frasi di tipo Basic.
    Riguardo al programma di Sal gli chiederei: che cosa intendi per 1°, 2°, 3° uscito ? non sono mica ambi e terni
    se ben capisco è uno dei motivi della maggior velocità: altro è cercare un ambo, altro i primi 3 usciti.
    quindi per capire i motivi delle differenze bisognerebbe smembrare le 2 macro, ma forse non siamo i tipi adatti ?

    LEO
    https://t.me/LordBrum
  • OFFLINE
    by sal
    Post: 7.531
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 15/02/2024 17:35
    Ciao Leo, la terza colonna sono le volte che è uscito l'ambovede solo 2 numeri.

    bye bye (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    L2018
    Post: 1.147
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 17:49
    Re:
    SAL
    non seguo questa tua risposta perchè non ho capito la logica della ricerca, in A,B,C io vedo solo primo, secondo uscito e forse numero uscite
    ma se tu fai prima mi sapresti dire al volo quante volte è uscito l'ambo 1-2 nelle 3700 estrazioni ?



    LEO
    https://t.me/LordBrum
  • OFFLINE
    Marius44
    Post: 1.207
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    00 15/02/2024 17:53
    Salve a tutti

    E proprio li sta l'inghippo. Salvatore ha barato! Poco, ma ha barato.
    Mi spiego.
    Stavo studiando la macro quando mi sono accorto che i dati in col.A e B sono fissi, cioè non vengono scritti dalla macro. La macro si limita a confrontare i numeri estratti col primo in col.A; se questo è uguale allora cerca il 2° estratto. Ovvio che i tempi sono di gran lunga inferiori.
    Ho notato anche che se si mettono i dati delle col.A:C in ordine dal più piccolo al più grande in base alla col.C i tempi si accorciano ancora: solo 5 sec. invece di 5,1 e 5,08. Ovvio che è poco ma su grandi numeri di righe ...

    Continuo a studiare.
    Ciao,
    Mario
  • OFFLINE
    by sal
    Post: 7.532
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 15/02/2024 17:54
    Ciao Leo ecco un esempio usando i filtri puoi trovare quello che ti serve



    Ciao Salvatore (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    by sal
    Post: 7.533
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 15/02/2024 17:58
    Certo Mario che bisogno ho di far scrivere gli ambi, tanto lo so per tutti i 90 numeri sono 4007 credo, non ricordo mai il numero preciso.
    e i tempi si accorciano ancora di più se le estrazioni vengono ordinate dal più piccolo al più grande, questo per il lotto in quanto non sono ordinati

    Salvatore (8-D
    [Modificato da by sal 15/02/2024 18:10]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    L2018
    Post: 1.148
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 17:59
    Re:
    capito adesso quante solo le trappole della programmazione, ed anche del modo in cui ci si spiega se si scrive ?
    non crederò mai che l'ambo 1-2 sia uscito 15 volte su 3700, perchè ogni estrazione è fatta di 10 ambi


    LEO
    https://t.me/LordBrum
  • OFFLINE
    by sal
    Post: 7.534
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 15/02/2024 18:02
    Ciao Leo anche se sono 10 ambi che nel superenalotto sono di più in quanto sono 6 numeri, ma il numero 1-2 si troverà 1 sola volta in ogni estrazione

    Salvatore (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    L2018
    Post: 1.149
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 18:03
    Re: Re:
    L2018, 15/02/2024 17:59:

    capito adesso quante solo le trappole della programmazione, ed anche del modo in cui ci si spiega se si scrive ?
    non crederò mai che l'ambo 1-2 sia uscito 15 volte su 3700, perchè ogni estrazione è fatta di 10 ambi



    e invece è così: 1-2 uscito 15 su 3700, come non detto
    mi rimane da capire meglio il ragionamento della ricerca di Sal


    LEO
    https://t.me/LordBrum
  • OFFLINE
    L2018
    Post: 1.150
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 18:17
    invece vorrei dire una cosa
    se la macro di SAL deve servire solo a sapere quanti ambi in tot estrazioni, allora io non l'ho lanciata ma nel foglio ho messo una semplice formula di ricerca
    Risposta in 0,0 secondi !

    LEO
    https://t.me/LordBrum
  • OFFLINE
    dodo47
    Post: 3.739
    Registrato il: 06/04/2013
    Utente Master
    2010
    10 15/02/2024 18:21
    ciao
    non entro nel merito di quanto si vuole ottenere, ma solo per dire che la "velocizzazione" in questo caso NON dipende dall'uso delle tabelle, ma dal metodo adottato da Salvatore (un abbraccio) che evita inutili ricerche....

    Prova ne è il seguente codice che è lo stesso di quello di Salvatore, ma senza tabelle

    (GLI INTERVALLI SONO FISSI PER PIGRIZIA, MA.....)

    saluti
    Option Explicit
    
    Sub RMatr()
    
       Dim ArrAmbi As Variant
       Dim arrEstrazioni As Variant
       Dim i As Long, j As Long, t As Long, y As Long
       Dim contaAmbi As Long
       Dim v1 As Long
       Dim v2 As Long
       Dim v3 As Long
       Dim v4 As Long
       
       Dim dTimer As Double
       
       Range("C2:C5000").ClearContents
       dTimer = Timer
       ArrAmbi = Range("A2:C4015")
       arrEstrazioni = Range("E2:J3724")
    
       For i = 1 To UBound(ArrAmbi, 1)
          v1 = ArrAmbi(i, 1)
          v2 = ArrAmbi(i, 2)
          For t = 1 To UBound(arrEstrazioni, 2) - 1
             For j = 1 To UBound(arrEstrazioni, 1)
                v3 = arrEstrazioni(j, t)
                If v3 = v1 Then
                   For y = t + 1 To UBound(arrEstrazioni, 2)
                      v4 = arrEstrazioni(j, y)
                      If v4 = v2 Then
                         contaAmbi = contaAmbi + 1
                      End If
                   Next y
                End If
             Next j
          Next t
          ArrAmbi(i, 3) = contaAmbi
          contaAmbi = 0
       Next i
       Range("A2").Resize(UBound(ArrAmbi), 3) = ArrAmbi
       MsgBox "Uso Tabelle secondi = " & Timer - dTimer
    End Sub






    [Modificato da dodo47 15/02/2024 18:22]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    L2018
    Post: 1.151
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 18:22
    Re:
    L2018, 15/02/2024 18:17:

    invece vorrei dire una cosa
    se la macro di SAL deve servire solo a sapere quanti ambi in tot estrazioni, allora io non l'ho lanciata ma nel foglio ho messo una semplice formula di ricerca
    Risposta in 0,0 secondi !



    e se le estrazioni diventano 7447 ?

    Risposta in 0,0 secondi !

    LEO
    https://t.me/LordBrum
  • OFFLINE
    by sal
    Post: 7.535
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 15/02/2024 18:31
    Ciao Domenico, quando ho trovato la macro faceva uso di tabelle per cui mi sono fidato ed ho ritenuto che le tabelle aumentassero la velocità, e non sono andato oltre, ma tu hai dimostrato che non sono le tabelle ma il metodo di ricerca applicato.
    a questo punto dovrò andare a riguardarmi il metodo e vedere se possono esserci ulteriori miglioramenti, grazie per la Dritta.

    Ciao Salvatore (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    L2018
    Post: 1.152
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 19:00
    Re:
    by sal, 15/02/2024 17:58:

    ... gli ambi, tanto lo so per tutti i 90 numeri sono 4007 credo, non ricordo mai il numero preciso.


    gli ambi di 90 numeri sono 90 * 89 / 2 = 4005

    non ci pioverà mai

    ma.....SAL, perchè nel tuo file ne sono 4014 ?

    LEO
    https://t.me/LordBrum
  • OFFLINE
    Marius44
    Post: 1.208
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    00 15/02/2024 19:09
    Salve a tutti

    Rispondo in ordine

    @Dodo47
    Ciao Domenico e ben arrivato.
    Si, si può fare come dici tu ma rimane un tantino meno veloce di quella con le Tabelle.
    Stavo lavorando anch'io sulla macro di Salvatore e, sempre con le tabelle ma eliminando qualche fronzolo, ho ottenuto un un piccolo miglioramento (provare il codice sottostante
    Sub AmbiMatrix() 'by Marius44
    Dim ArrAmbi As Variant, ArrEstr As Variant
    Dim sTime As Single
    Dim i As Long, j As Long, t As Long, y As Long, contaAmbi As Long
    Dim a1 As Integer, a2 As Integer
      Range("C2:C" & Cells(Rows.Count, 3).End(xlUp).Row).ClearContents 'cancella frequenze
      sTime = Timer 'avvia timer
      ArrAmbi = Worksheets("Sal").ListObjects("Tabella1").DataBodyRange.Value
      ArrEstr = Worksheets("Sal").ListObjects("Tabella2").DataBodyRange.Value
      For i = 1 To UBound(ArrAmbi, 1)
        a1 = ArrAmbi(i, 1)  'primo numero riga della tabella ambi
        a2 = ArrAmbi(i, 2)  'secondo numero riga della tabella ambi
        For t = 1 To UBound(ArrEstr, 2) - 1
          For j = 1 To UBound(ArrEstr, 1)
            If ArrEstr(j, t) = a1 Then 'se uguale al numero estratto
              For y = t + 1 To UBound(ArrEstr, 2)
                If ArrEstr(j, y) = a2 Then
                  contaAmbi = contaAmbi + 1
                End If
              Next y
            End If
          Next j
        Next t
        ArrAmbi(i, 3) = contaAmbi
        contaAmbi = 0
      Next i
      Worksheets("Sal").ListObjects("Tabella1").DataBodyRange.Value = ArrAmbi
      Cells(4, 12) = Timer - sTime
      MsgBox "Uso Tabelle secondi = " & Timer - sTime
    '
    End Sub
    


    @L2018
    Leo, ma che formula hai messo? e dove?

    ----
    Tabelle o oggetti ovvero modificando l'approccio delle verifiche credo si possa fare ancora meglio. Adesso, scusate, ma vado a fare il nonno.
    A domani,
    Mario
  • OFFLINE
    L2018
    Post: 1.153
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 19:14
    Re:
    Marius44, 15/02/2024 19:09:

    Salve a tutti
    @L2018
    Leo, ma che formula hai messo? e dove?
    ,
    Mario



    scusa Mario, non ti seguo, ho solo detto che gli ambi di 90 numeri sono 4005, mentre nel file di SAL colonna A e B ce ne sono 4014

    dove sbaglio ?

    LEO
    https://t.me/LordBrum
  • OFFLINE
    dodo47
    Post: 3.740
    Registrato il: 06/04/2013
    Utente Master
    2010
    00 15/02/2024 21:47
    Mario
    Io ho semplicemente evidenziato che la velocità della macro di Salvatore non è da addebitarsi alla forma tabellare ma al metodo.....null'altro.

    Cari saluti





    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    L2018
    Post: 1.154
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 15/02/2024 22:51
    Ciao
    non mi sbagliavo
    gli ambi di 90 numeri sono 4005, mentre nell'archivio di Salvatore ce ne sono 4014, 9 in più, perchè doppioni, infatti sono speculari ai corrispettivi, e sono questi
    sarà il caso di correggere

    LEO
    https://t.me/LordBrum
  • OFFLINE
    Marius44
    Post: 1.209
    Registrato il: 24/06/2015
    Città: CATANIA
    Età: 80
    Utente Veteran
    Excel2019
    00 16/02/2024 09:34
    Buongiorno a tutti

    @L2018
    Leo hai ragione in merito al numero di ambi.
    Per quanto riguarda la mia domanda (Quale formula e dove?) mi riferivo al tuo post #20

    @dodo47
    Domenico ho capito che ti riferivi al "metodo" ed infatti mi sono "tuffato" ma, nonostante l'impegno profuso già da stamani, nulla di nuovo. Ho "aggiustato" un po' la mia prima macro ma impiega quasi il doppio di quella di Salvatore.

    Adesso visite alle sorelle (95 e 91 anni) e poi a scuola a "ritirare" i fanciulli.
    Ciao,
    Mario
  • OFFLINE
    L2018
    Post: 1.156
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Veteran
    EXCEL 2016 - SPREAD32
    00 16/02/2024 12:55
    Re:
    Marius44, 16/02/2024 09:34:

    Buongiorno a tutti
    @L2018
    Per quanto riguarda la mia domanda (Quale formula e dove?) mi riferivo al tuo post #20



    intendevo dire che invece di aspettare il tempo della tua macro o quello di SAL, dal momento che si vuole solo sapere la frequenza di ambi, ho semplicemente usato la formula diretta

    =SOMMA(--(MATR.PRODOTTO(CONTA.SE($A2:$B2;$B:$F);RIF.RIGA($A$1:$A$5)^0)=2))

    dove A2.B2 sono le due celle di un ambo e B e F sono l'intervallo di ricerca


    LEO
    https://t.me/LordBrum
  • 15MediaObject4,17672 5
1