You are here:--[RISOLTO] Quaterne
[RISOLTO] Quaterne2018-05-19T09:37:46+02:00

Home Forum Domande su Excel VBA e MACRO [RISOLTO] Quaterne

  • Autore
    Articoli
  • Avatargiorgioantonio
    Partecipante
      Post totali: 387

      https://mega.nz/#!3DAHGSBI!mT9ioVMZuxX86y2qfg95PXqUA7jsru3zkMUd89e0mZw

      Salve

      cortesemente.

      Nel file c’è un archivio di numeri, per ogni riga vorrei venissero

      combinati i numeri in quaterne.

      La riga dell’archivio va da colonna c a colonna v.

      lo sviluppo in quaterna vorrei venisse distribuito in W, X, Y eccetera

      della stessa riga.

      Di singolare c’è che le righe dell’archivio non contengono tutte i 20

      numeri, quindi adattare la macro in merito.

      Grazie

      • Questo argomento è stato modificato 1 anno, 10 mesi fa da sid sid.
    • BySalvBySalv
      Amministratore del forum
        Post totali: 624

        Ciao Eccoti la Macro

        Sub quaterne()
        Dim r, c, c1, c2, x, y, z, d, k
        
        r = 10
        c = 24
        c1 = 3
        Range("Dele").ClearContents
        For x = 10 To Cells(Rows.Count, 3).End(xlUp).Row
            For z = c1 To Cells(x, Columns.Count).End(xlToRight).Column - 3
                If Cells(x, z + 3) = "" Then
                    Exit For
                End If
                d = Cells(x, z) & "-" & Cells(x, z + 1) & "-" & Cells(x, z + 2) & "-"
                c2 = z + 3
                For y = c2 To Cells(x, Columns.Count).End(xlToRight).Column
                    If Cells(x, y) = "" Then
                        Exit For
                    End If
                    k = d & Cells(x, y)
                    Cells(r, c) = k
                    c = c + 1
                Next y
            Next z
            r = r + 1
            c = 24
        Next x
        End Sub

        ho creato un range “Dele” in Nomi per cancellare i dati, nel caso devi aggiungere altre righe devi aggiornarlo.

        Ciao By Sal :bye:

        il link al file
        https://mega.nz/#!5ZVExDQA!jdO6ejsAKKYV-nWNPtZZ6LWektPVp2BQM2QcaRZKwSs

      • Avatargiorgioantonio
        Partecipante
          Post totali: 387

          Salve By-Sal,

          ti riporto il numero di combinazioni che si dovrebbero ottenere

          in base ai numeri dell’archivio, per esempio la riga che ha 5 numeri

          deve produrre 5 quaterne invece la macro ne produce solo 3

          cioè ipotesi dei numeri: 1-2-3-4-5-

          combinazioni:1)1-2-3-4; 2) 1-2-3-5; 3)1-2-4-5; 4)1-3-4-5; 5)2-3-4-5

          ti elenco in base alla quantità di numeri per riga le combinazioni:

          20=4845;

          19=3876;

          18=3060;

          17=2380;

          16=1820;

          15=1365;

          14=1001;

          13=715;

          12=495;

          11=330;

          10=210;

          9=126;

          8=70;

          7=35;

          6=15;

          5=5

          Mancano parecchie combinazioni.

          Salve

        • sidsid
          Moderatore
            Post totali: 726

            Prova questa variante

            Sub QUATERNE()
            Dim x As Variant, vQuaterne(1 To 18, 1 To 4845) As Variant
            Dim j As Long, jj As Long, jjj As Long, jjjj As Long, nIncr As Long, nUltimaRiga As Long, xRiga As Long
            Dim ws1 As Worksheet
            Dim rTab As Range
            Dim nRiga As Integer, n As Integer, nPrimaRiga As Integer
            
            Set ws1 = Sheets("Foglio1")
            Set rTab = ws1.Range("C10:V27")
            nPrimaRiga = rTab.Row 'prima riga della tabella
            nUltimaRiga = rTab.Rows(rTab.Rows.Count).Row 'ultima riga della tabella
            xRiga = nPrimaRiga
            
            For nRiga = 1 To rTab.Rows.Count
                n = Application.WorksheetFunction.CountA(rTab.Rows(nRiga))
                x = Application.Transpose(ws1.Range(ws1.Cells(nPrimaRiga, 3), ws1.Cells(nPrimaRiga, n + 2)).Value)
                For j = LBound(x) To UBound(x) - 3
                    For jj = j + 1 To UBound(x) - 2
                         For jjj = jj + 1 To UBound(x) - 1
                            For jjjj = jjj + 1 To UBound(x)
                                nIncr = nIncr + 1
                                vQuaterne(nRiga, nIncr) = x(j, 1) & "_" & x(jj, 1) & "_" & x(jjj, 1) & "_" & x(jjjj, 1)
                            
                            Next jjjj
                        Next jjj
                    Next jj
                Next j
                nPrimaRiga = nPrimaRiga + 1
                nIncr = 0
            Next nRiga
            ws1.Range("W" & xRiga & ":GEE" & nUltimaRiga).Value = vQuaterne
            
            Set rTab = Nothing
            Set ws1 = Nothing
            End Sub
          • Avatargiorgioantonio
            Partecipante
              Post totali: 387

              Salve Sid,

              per quanto riguarda la macro quaterne

              se la riga porta 20 numeri le commbinazioni

              le da sempre a 4 numeri diversamente non

              si trovano combinazioni anche con numeri inferiore a 4.

               

            • sidsid
              Moderatore
                Post totali: 726

                È fatto apposta per le quaterne: se nell’estrazione hai meno di 4 numeri, la macro non fa nulla.

              • Avatargiorgioantonio
                Partecipante
                  Post totali: 387

                  OK la macro funziona con 20 numeri.

                  se non ci sono altre soluzioni a piacere

                  si può dare anche risolto.

                  Salve

                   

                • sidsid
                  Moderatore
                    Post totali: 726

                    Per precisione: la macro funziona da 4 a 20 numeri per estrazione. Non è così?

                  • Avatargiorgioantonio
                    Partecipante
                      Post totali: 387

                      La macro  fa le dovute combinazioni solo che

                      se i numeri sono inferiore a 20 da delle combinazioni

                      tipo è un esempio con numeri da 1 a 18 e alla

                      4845^ combinazione da:

                      17-18-_-_ i due underscore valgono 19 e 20

                      i 2 numeri mancanti.

                       

                    • sidsid
                      Moderatore
                        Post totali: 726

                        Se un’estrazione ha 18 numeri sviluppa 3060 quaterne; le restanti celle restano vuote.

                      • Avatargiorgioantonio
                        Partecipante
                          Post totali: 387

                          restano vuote relativamente ma cmq non ci sono estrazioni da 18 numeri

                          per la categoria 10elotto i numeri sono sempre venti.

                          Il perchè di quei numeri in meno è perchè avrei dovuto separare i numeri pari

                          e dispari. E siccome non è categorico che escano 10 pari e 10 dispari ecco

                          il motivo di quel tipo di di archivio.

                          Mi tengo la macr che combina quaterne, qualche cosa la combinerò.

                          Il problema grande è che non riesco a trovare una formula che velocizzi

                          il controllo dei dati con una 5o-70 righe dell’archivio.

                          Per esempio quando controllo i terni 117480 con 6-7 oppure 8 righe per 5 o 6

                          quindi una 50ina di estrazioni ci impiega dai 7ai 10 minuti quindi se dovessi

                          avere 148000 combinazioni penso si imballerebbe il pc.

                          ciao

                        • sidsid
                          Moderatore
                            Post totali: 726

                            Io mi sono regolato in base a quanto hai detto nel post 5839.
                            E cioè che non tutte le righe erano da 20 numeri. Io la macro l’ho impostata in questo modo e conta ogni righe quanti numeri ci stanno.
                            Ora tu stai cambiando le carte in tavola.
                            Posta il file per il lavoro vero che devi fare altrimenti bisogna adattare ogni volta la macro a quello che dici.

                          • Avatargiorgioantonio
                            Partecipante
                              Post totali: 387

                              completo il file e poi speriamo di allegarlo sperando in un pò di

                              F O R T U N A.

                              ciao

                            • Avatargiorgioantonio
                              Partecipante
                                Post totali: 387
                              • sidsid
                                Moderatore
                                  Post totali: 726

                                  Appena ho modo do un’occhiata

                                • sidsid
                                  Moderatore
                                    Post totali: 726

                                    Su quale foglio devo agire, Archivio_Q_1 o Archivio_Q_2?
                                    L’archivio è statico (arriva sempre a riga 211) oppure può aumentare?
                                    In B1 hai messo
                                    =CONTA.VALORI(C:C)+9
                                    che restituisce 211, ma le righe dell’archivio sono 202 visto che inizia da riga 10; perchè il +9?

                                    • Questa risposta è stata modificata 1 anno, 10 mesi fa da sid sid.
                                    • Questa risposta è stata modificata 1 anno, 10 mesi fa da sid sid.
                                  • sidsid
                                    Moderatore
                                      Post totali: 726

                                      Tra poko esco quindi provo a postare la soluzione per quello che ho capito.
                                      La macro è riferita al foglio Archivio_Q_1
                                      Ho inserito anche il controllo del tempo impiegato.
                                      Col mio pc che è un pò datato (intel celeron 2.5 GHx – 2 mb di ram) impiega circa 15 secondi per l’archivio di 202 righe.
                                      Questo il codice:

                                      Sub QUATERNE_Q_1()
                                      
                                      Dim X As Variant, vQuaterne() As Variant
                                      Dim j As Long, jj As Long, jjj As Long, jjjj As Long, nIncr As Long, nUltimaRiga As Long, xRiga As Long
                                      Dim ws1 As Worksheet
                                      Dim rTab As Range
                                      Dim nRiga As Integer, n As Integer, nPrimaRiga As Integer
                                      Dim ArQ1     'conta le righe dell'archivio
                                      Dim t As Date
                                      
                                      ArQ1 = [b1]  'conta le righe dell'archivio
                                      Set ws1 = Sheets("Archivio_Q_1")
                                      Set rTab = ws1.Range("C10:V" & ArQ1)
                                      nPrimaRiga = rTab.Row 'prima riga della tabella
                                      nUltimaRiga = rTab.Rows(rTab.Rows.Count).Row 'ultima riga della tabella
                                      xRiga = nPrimaRiga
                                      t = Time
                                      
                                      'dimensiono la matrice finale
                                      ReDim vQuaterne(1 To ArQ1, 1 To 4845)
                                      
                                      For nRiga = 1 To rTab.Rows.Count
                                          X = Application.Transpose(ws1.Range(ws1.Cells(nPrimaRiga, 3), ws1.Cells(nUltimaRiga, 22)).Value)
                                          For j = LBound(X) To UBound(X) - 3
                                              For jj = j + 1 To UBound(X) - 2
                                                   For jjj = jj + 1 To UBound(X) - 1
                                                      For jjjj = jjj + 1 To UBound(X)
                                                          nIncr = nIncr + 1
                                                          vQuaterne(nRiga, nIncr) = X(j, 1) & "_" & X(jj, 1) & "_" & X(jjj, 1) & "_" & X(jjjj, 1)
                                                      Next jjjj
                                                  Next jjj
                                              Next jj
                                          Next j
                                          nPrimaRiga = nPrimaRiga + 1
                                          nIncr = 0
                                      Next nRiga
                                      ws1.Range("W" & xRiga & ":GEE" & nUltimaRiga).Value = vQuaterne
                                      MsgBox Format(Time - t, "HH:MM:SS"), vbInformation, "CODICE ESEGUITO IN....."
                                      
                                      Set rTab = Nothing
                                      Set ws1 = Nothing
                                      End Sub

                                      Logicamente è dinamico, quindi lavora sulle estrazioni dell’intero archivio anche aumentandole
                                      Fa sapere, ciao

                                      • Questa risposta è stata modificata 1 anno, 10 mesi fa da sid sid.
                                    • Avatargiorgioantonio
                                      Partecipante
                                        Post totali: 387

                                        Salve Sid,

                                        non vorrei farti fare del lavoro sul quale poi ritornarci.

                                        quando la macro sviluppa le combinazioni deve

                                        sviluppare solo le rghe che occorrono per la ricerca

                                        in riferimento all’archivio qualunque esso sia.

                                        Per ora parliamo solo dell’archivio_q_1.

                                        Per ogni ricerca che si effettua eliminare prima i dati precedenti da W10:ARR210.

                                        Sul foglio ESITI la cella AC3 = 50, dall’ultima riga dell’archivio

                                        si deve contare in su 50 righe e sviluppare solo le combinazioni

                                        di queste righe.

                                        NB l’archivio sarà accorciato in quanto al massimo ne serviranno circa 120 righe.

                                        Si l’archivio aumenterà di estrazione in estrazione.

                                        Ciao

                                      • sidsid
                                        Moderatore
                                          Post totali: 726

                                          Ti ho detto che il codice è dinamico quindi lavora sulle effettive righe dell’archivio, a seconda di quante sono. Per cancellare il precedente sviluppo, prima del comando
                                          ws1.Range("W" & xRiga & ":GEE" & nUltimaRiga).Value = vQuaterne
                                          inserisci

                                          ws1.Range("W" & xRiga & ":GEE" & Rows.Count).ClearContents

                                          • Questa risposta è stata modificata 1 anno, 10 mesi fa da sid sid.
                                        • Avatargiorgioantonio
                                          Partecipante
                                            Post totali: 387

                                            ho fatto quanto mi hai detto per cancellare le combinazioni

                                            la riga che mi hai riportato.

                                            Ho aggiunto anche una variabile che stabilisce da quale riga

                                            iniziare a combinare.

                                            Questa variabile fa riferimento alla cella foglio Esiti AD3

                                            Ho verificato e il tutto funziona.

                                            Adesso rimane il punto cruciale da superare in termini di tempo.

                                            Foglio Esiti In AC18 : AC150000 da riportare se

                                            Archivio_Q_1 nelle righe da W(AC15) : GEE((AC16)

                                            se sono presenti le quaterne di AB18:AB150000.

                                            La stessa operazione da fare per le altre colonne fino al raggiungimento del

                                            numero che sta in cella AB3.

                                             

                                          • Avatargiorgioantonio
                                            Partecipante
                                              Post totali: 387

                                              Aggiungo che i dati delle celle AD3,  rigo 15 e 16 (celle bordate in rosso)

                                              non sono fissi varian a seconda della scelta delle celle in verde.

                                            • Avatargiorgioantonio
                                              Partecipante
                                                Post totali: 387

                                                Chiarisco il perchè all’archivio aggiungo + 9

                                                e non + 10.

                                                Foglio Esiti

                                                Cella AD4=162

                                                cella AE4=171

                                                nella cella AA3 ho fatto la scelta di suddividere

                                                l’archivio in cui operare cioè 10 per 5 =50

                                                Ad ogni posizione devo aggiungere 10

                                                162+10=172 in effetti non conteggio su 10 righe ma su 11

                                                162-163-164-165-166-167-168-169-170-171=righe 10

                                                Con 162+10=172;

                                                173+10=183 eccetera.

                                                Alla fine del 10+10+10+10+10 mi trovo con 5 righe

                                                oltre l’archivio.

                                              • Avatargiorgioantonio
                                                Partecipante
                                                  Post totali: 387

                                                  ‘ws1.Range(“W” & xRiga & “:GEE” & Rows.Count).Delete Shift:=xlToLeft

                                                  al posto di Clearcontents ho usato Delete Shift:=xlToLeft

                                                  nel momento in cui avvio la macro mi fa osservare che è impossibile

                                                  continuare per problemi di memoria.

                                                  ho riportato male: Delete Shift:=xlToLeft?

                                                • sidsid
                                                  Moderatore
                                                    Post totali: 726

                                                    Non usare Delete; non devi eliminare fisicamente le celle ma soltanto pulirle. Inoltre Sprechi un sacco di risorse.

                                                    Lascia ClearContents

                                                  • Avatargiorgioantonio
                                                    Partecipante
                                                      Post totali: 387

                                                      Salve Sid,

                                                      ws1.Range("W" & xRiga & ":GEE" & Rows.Count).ClearContents

                                                      questo codice cancella una riga mentre vorrei mi cancellasse,

                                                      prima di elaborare le nuove combinazioni, tutto da W10:Gee?

                                                       

                                                       

                                                    • sidsid
                                                      Moderatore
                                                        Post totali: 726

                                                        Se xRiga ha valore 10, quel codice pulisce da W10 a GGE ultima riga del foglio.

                                                        Non capisco perchè dici che pulisce solo una riga.

                                                      • Avatargiorgioantonio
                                                        Partecipante
                                                          Post totali: 387

                                                          =SE(AP$15=””;””;CONTA.SE(INDIRETTO(“Archivio_Q_1!$W$”&AC$15):INDIRETTO(“Archivio_Q_1!$GEE”&AB$16);Esiti!$AO18))

                                                          ho utilizzato questa formula nella colonna Ac18:AC148995 e per 5

                                                          colonne: ci ha impiegato 35 minuti.

                                                          Esiste attraverso il codice VBA un modo per velocizzare ad

                                                          ottenere i dati?

                                                        • sidsid
                                                          Moderatore
                                                            Post totali: 726

                                                            Ma il mio messaggio lo hai letto?

                                                          • Avatargiorgioantonio
                                                            Partecipante
                                                              Post totali: 387

                                                              Si l’ho letto però a me pare non cancelli,

                                                              ho rimediato con range(“W10:GEE” & x(variabile che conta le RIGHE)).

                                                               

                                                              • Questa risposta è stata modificata 1 anno, 10 mesi fa da Avatar giorgioantonio.
                                                            • Avatargiorgioantonio
                                                              Partecipante
                                                                Post totali: 387

                                                                [/quote].range(“W10:GEE” & x(variabile che conta le colonne)).[/quote]

                                                                volevo dire che conta le righe e non le colonne

                                                                • Questa risposta è stata modificata 1 anno, 10 mesi fa da Avatar giorgioantonio.
                                                              • sidsid
                                                                Moderatore
                                                                  Post totali: 726

                                                                  Adesso rimane il punto cruciale da superare in termini di tempo.

                                                                  Foglio Esiti In AC18 : AC150000 da riportare se

                                                                  Archivio_Q_1 nelle righe da W(AC15) : GEE((AC16)

                                                                  se sono presenti le quaterne di AB18:AB150000.

                                                                  La stessa operazione da fare per le altre colonne fino al raggiungimento del

                                                                  numero che sta in cella AB3.

                                                                  Non ci ho capito nulla

                                                                • Avatargiorgioantonio
                                                                  Partecipante
                                                                    Post totali: 387

                                                                    Salve,

                                                                    foglio Esiti, righe 15 e 16 ci sono dei numeri;

                                                                    cella AB3 si è scelto di dividere parte dell’archivio

                                                                    in 5 (cicli)parti a cominciare dalla riga 162.

                                                                    AC15=162; AC16=171 – in questa parte dell’archivio (162-171)

                                                                    si deve controllare quali sono le quaterne presenti

                                                                    e riportare la o le presenze a fianco della quaterna.

                                                                    questo lavoro andrebbe fatto anche per le altre

                                                                    4 Colonne. Se AB3 =4 invece di 5 si deve farlo per 4 volte.

                                                                    le righe dell’archivio da controllare sono scritte in rigo 15 e 16.

                                                                    Io ho adottato la formula del conta.se + indiretto.

                                                                    Per avere i risultati occorono dai 35 ai 40 minuti

                                                                    se c’è un modo più veloce non tenendo conto della formula da me usata.

                                                                    Ciao

                                                                    • Questa risposta è stata modificata 1 anno, 10 mesi fa da Avatar giorgioantonio.
                                                                  • sidsid
                                                                    Moderatore
                                                                      Post totali: 726

                                                                      La prima riga da cui iniziare la ricerca è sempre quella della cella AD3?
                                                                      L’arcivhio di foglio Archivio_Q_1 arriva sempre a riga 211, oppure è dinamico?

                                                                      • Questa risposta è stata modificata 1 anno, 10 mesi fa da sid sid.
                                                                    • Avatargiorgioantonio
                                                                      Partecipante
                                                                        Post totali: 387

                                                                        si la prima riga è sempre quella che inizia lo sviluppo dell’archivio

                                                                        AD3 oppure puoi considrare anche la AD15.

                                                                        L’archivio sarà sempre soggetto ad aumenti di righe

                                                                        NB. Per dinamico intendi che avrà sempre le stesse righe

                                                                        del foglio? Se è così non lo voglio – si stabiliscono, per la ricerca, un certo

                                                                        numero di righe e cicli il dinamico se si aumentano delle estrazioni mi

                                                                        sfasano il conteggio di inzio e fine giocata.

                                                                      • sidsid
                                                                        Moderatore
                                                                          Post totali: 726

                                                                          Dinamico significa variabile, nn statico

                                                                        • Avatargiorgioantonio
                                                                          Partecipante
                                                                            Post totali: 387

                                                                            tieni presente che l’archivio aumenta di righe.

                                                                          • sidsid
                                                                            Moderatore
                                                                              Post totali: 726

                                                                              Volevo sapere se è utile per te, quando scegli da convalida in AA3 o AB3, cancellare gli eventuali valori inseriti nel range di destinazione (AC18:AL149012), oppure vuoi cancellare prima di inserire i nuovi valori a fine esecuzione

                                                                            • Avatargiorgioantonio
                                                                              Partecipante
                                                                                Post totali: 387

                                                                                prima di avviare

                                                                                per avere i nuovi dati in (AC18:AL149012)

                                                                              • sidsid
                                                                                Moderatore
                                                                                  Post totali: 726

                                                                                  Ti ho chiesto questo perchè ammettendo che hai appena eseguito la macro, quindi hai tutti i valori nel range di destinazione, decidi di eseguirla con nuovi criteri di ricerca; quando clicchi su una delle 2 convalide, il range si pulisce; però metti che per un tuo motivo non vuoi più eseguirla, e ti occorreva vedere i vecchi valori; in questo modo non puoi più visualizzarli, a meno di eseguire di nuovo la macro con i vecchi criteri.
                                                                                  Non so se mi sono spiegato cosa intendo dire.

                                                                                • Avatargiorgioantonio
                                                                                  Partecipante
                                                                                    Post totali: 387

                                                                                    quindi mi consigli dopo l’elaborazione

                                                                                    vuoi cancellare prima di inserire i nuovi valori a fine esecuzione

                                                                                  • sidsid
                                                                                    Moderatore
                                                                                      Post totali: 726

                                                                                      Decisamente se per te non è un problema

                                                                                    • Avatargiorgioantonio
                                                                                      Partecipante
                                                                                        Post totali: 387

                                                                                        volevo chiedere se cancellare i dati poco prima di mettere i nuovi

                                                                                        porta via del tempo? Molto? come elaborazione.

                                                                                        E se hai provato ad eseguire una prova

                                                                                        quanto tempo ci impiega? Poco prima del contatto odierno avevo

                                                                                        fatto una ulteriore prova di elaborazione  e come ti ho accennato

                                                                                        ci impiega oltre 35 minuti.

                                                                                        Poichè si richiedono diverse prove per cercare la soluzione

                                                                                        per avere meno dati su cui puntare

                                                                                      • sidsid
                                                                                        Moderatore
                                                                                          Post totali: 726

                                                                                          10 righe
                                                                                          10 cicli

                                                                                          circa 18 minuti col mio pc

                                                                                        • Avatargiorgioantonio
                                                                                          Partecipante
                                                                                            Post totali: 387

                                                                                            MI RALLEGRO :yahoo:

                                                                                          • sidsid
                                                                                            Moderatore
                                                                                              Post totali: 726

                                                                                              Spero che il tuo pc sia più performante del mio
                                                                                              Ti passo i codici: una macro e una UDF; entrambi da mettere nello stesso modulo standard.
                                                                                              Questa la macro:

                                                                                              Sub VERIFICA_QUATERNE()
                                                                                              Dim ws1 As Worksheet, ws2 As Worksheet
                                                                                              Dim vArchivio As Variant, vQuaterne As Variant, vFinale() As Variant, vQuaterna As Variant, v As Variant
                                                                                              Dim nRighe As Integer, nCicli As Integer, nColRif As Integer, n As Integer, nPartenza As Integer, nArrivo  As Integer
                                                                                              Dim j As Long, jj As Long, nRigaRif As Long
                                                                                              
                                                                                              Dim t As Date
                                                                                              
                                                                                              Set ws1 = Sheets("Esiti")
                                                                                              Set ws2 = Sheets("Archivio_Q_1")
                                                                                              vQuaterne = ws1.Range("AB18:AB149012")
                                                                                              nRighe = ws1.Range("AA3")
                                                                                              nCicli = ws1.Range("AB3")
                                                                                              nColRif = 28 'colonna "AB"
                                                                                              nRigaRif = 18 'prima riga del range di destinazione
                                                                                              t = Time
                                                                                              
                                                                                              ReDim vFinale(1 To UBound(vQuaterne), 1 To nCicli)
                                                                                              
                                                                                              nPartenza = ws1.Range("AD3")
                                                                                              nArrivo = nPartenza + nRighe - 1
                                                                                              
                                                                                              'ciclo che spazzola le quaterne in AB
                                                                                              For j = LBound(vQuaterne) To UBound(vQuaterne)
                                                                                                    
                                                                                                  'questo loop viene eseguito per le volte della cella AB3 (cicli)
                                                                                                  For n = 1 To nCicli
                                                                                              
                                                                                                      'trasformo la stringa della quaterna in un array
                                                                                                      vQuaterna = Split(vQuaterne(j, 1), "_")
                                                                                                      
                                                                                                      'range del ciclo n in cui fare la ricerca della quaterna
                                                                                                      vArchivio = ws2.Range("C" & nPartenza & ":V" & nArrivo)
                                                                                                      
                                                                                                      'ciclo le righe del range
                                                                                                      For jj = LBound(vArchivio, 1) To UBound(vArchivio, 1)
                                                                                                          
                                                                                                          'riga jj del range ciclato
                                                                                                          v = Application.WorksheetFunction.Index(vArchivio, jj, 0)
                                                                                                          
                                                                                                          'passo la quaterna ciclata e l'archivio di ricerca alla udf
                                                                                                          If VERIFICA(v, vQuaterna) Then
                                                                                                              vFinale(j, n) = vFinale(j, n) + 1
                                                                                                          End If
                                                                                                      
                                                                                                      Next jj
                                                                                                      'incremento le variabili
                                                                                                      nPartenza = nArrivo + 1
                                                                                                      nArrivo = nArrivo + nRighe
                                                                                                  
                                                                                                  Next n
                                                                                                  'riporto le variabili al valore iniziale
                                                                                                  nPartenza = ws1.Range("AD3")
                                                                                                  nArrivo = nPartenza + nRighe - 1
                                                                                              Next j
                                                                                              'pulisco il range di destinazione
                                                                                              ws1.Range(ws1.Cells(nRigaRif, nColRif + 1), ws1.Cells(149012, nColRif + 10)).ClearContents
                                                                                              
                                                                                              'scarico la matrice nel range di destinazione
                                                                                              ws1.Range(ws1.Cells(nRigaRif, nColRif + 1), ws1.Cells(nRigaRif + UBound(vQuaterne) - 1, nColRif + nCicli)).Value = vFinale
                                                                                              
                                                                                              MsgBox Format(Time - t, "HH:MM:SS"), vbInformation, "CODICE ESEGUITO IN....."
                                                                                              
                                                                                              Set ws1 = Nothing
                                                                                              Set ws2 = Nothing
                                                                                              
                                                                                              End Sub

                                                                                              Questa la udf

                                                                                              Function VERIFICA(aMioArr, n) As Boolean
                                                                                              Dim x As Variant
                                                                                              On Error Resume Next
                                                                                              For Each x In n
                                                                                                  If IsError(Application.WorksheetFunction.Match(CDbl(x), aMioArr, 0)) Then
                                                                                                      On Error GoTo 0
                                                                                                      Exit Function
                                                                                                  End If
                                                                                              Next x
                                                                                              On Error GoTo 0
                                                                                              VERIFICA = True
                                                                                              End Function

                                                                                              Fai molti test; segnala tutto quello che non va; ciao.

                                                                                              • Questa risposta è stata modificata 1 anno, 10 mesi fa da sid sid.
                                                                                            • Avatargiorgioantonio
                                                                                              Partecipante
                                                                                                Post totali: 387

                                                                                                Salve Sid,

                                                                                                ho appena finito il primo lancio della macro:

                                                                                                8 minuti di elaborazione.

                                                                                                Naturalmente devo verificare.

                                                                                                E’ un problema fare apparire nelle celle vuote lo

                                                                                                zero?

                                                                                                Quando finisco l’elaborazione utilizzo i filtri

                                                                                                per esempio dell’uno nella colonna  AA mentre mi serve

                                                                                                anche la ultima o penultima colonna elaborata per

                                                                                                la richiesta ZERO.

                                                                                                Te ne accorgi cambiando il numero AA15 e la AA16 ti dice se ci sono

                                                                                                uno.

                                                                                                A prescindere la verifica dei dati per l’altra colonna delle quaterne

                                                                                                la udf ne serve un’altra? oppure quella udf andrà bene per entrambe?

                                                                                                Ma questo in seguito.

                                                                                                Ciao

                                                                                                 

                                                                                                • Questa risposta è stata modificata 1 anno, 10 mesi fa da Avatar giorgioantonio.
                                                                                              • sidsid
                                                                                                Moderatore
                                                                                                  Post totali: 726

                                                                                                  E’ un problema fare apparire nelle celle vuote lo

                                                                                                  zero?

                                                                                                  Dovrebbe bastare aggiungere
                                                                                                  If vFinale(j, n) = vbNullString Then vFinale(j, n) = 0
                                                                                                  prima di
                                                                                                  Next n

                                                                                                  A prescindere la verifica dei dati per l’altra colonna delle quaterne

                                                                                                  la udf ne serve un’altra? oppure quella udf andrà bene per entrambe?

                                                                                                  Ma questo in seguito.

                                                                                                  Ciao

                                                                                                  Va bene la stessa, ma cambiando i parametri da passargli

                                                                                                • Avatargiorgioantonio
                                                                                                  Partecipante
                                                                                                    Post totali: 387

                                                                                                    Salve Sid,

                                                                                                    per quel che faccio io in 5 minuti mi risolve l’elaborazione.

                                                                                                    Quindi non serve elaborare le combinazioni nel foglio Archivio

                                                                                                    da quel che ho notato fa tutto da solo.

                                                                                                    In modo facile ho fatto la verifica dei dati.

                                                                                                    Dopo l’elaborazioni tua e mia ho utilizzato lo

                                                                                                    snipping tool e messi a confronto combaciano prfettamente

                                                                                                    Per dire che i dati risultano essere esatti.

                                                                                                    Per ora saluti

                                                                                                  • sidsid
                                                                                                    Moderatore
                                                                                                      Post totali: 726

                                                                                                      Grazie del riscontro; chiudo la discussione. Ciao

                                                                                                    La discussione ‘[RISOLTO] Quaterne’ è chiusa a nuove risposte.

                                                                                                    Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

                                                                                                    Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

                                                                                                    Chiudi