Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 30 di 41

Discussione: Eseguire un CONTA.SE() su una matrice ma in memoria



  1. #1
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao a tutti avrei la necessità di fare un Conta.se() su una matrice come da titolo, ma non vorrei passare per il foglio.


    Vorrei eliminare un passaggio


    ho una matrice di questo tipo Prova(1 to 31, 1 to 10)


    inserisco i dati nella matrice e dovrei applicare un CONTA.SE


    al momento uso questo metodo ma non mi sembra idoneo, perche prima trasferisco i dati sul foglio e poi faccio il conta.se(), vorrei eliminare questo passaggio


    la macro, ma non funziona per bene:

    Codice: 
    Sub Prova()
    Dim Dati, rng As Range
    Dim r, c1, c2, x, y, z, n, d
    
    
    r = Cells(Rows.Count, 2).End(xlUp).Row
    Dati = Range("B3:K" & r)
    
    
    r = 3: c1 = 14: n = 0
    For x = 1 To UBound(Dati)
      For y = 1 To 10
        Set rng = Range(Cells(r - 1, c1), Cells(r - 1, c1 + 10))
        d = WorksheetFunction.CountIf(rng, Dati(x, y))
        If d >= 1 Then Else Cells(r, c1 + n) = Dati(x, y)
        n = n + 1
      Next y
      r = r + 1
      n = 0
    Next x
    
    
    End Sub
    allego anche il foglio con un esempio, la base dati è il primo quadro, il secondo quadro è il risultato della macro che non funziona bene, il terzo quadro è quello con le formule che è esatto.

    a parte che non riesco a capire perche se prendo la formula in "Z3" e la trascino a dx ed in basso mi si cambiano i riferimenti, guardate la formula in "Z4" si sono spostati i riferimenti assoluti e relativi, anche facendo copia/incolla formule.

    come si vede dalla macro scrive i dati sul foglio dopo aver fatto il conta.se, vorrei evitare questo, mi rallenta il foglio in quanto le celle sono migliaia.

    vorrei anche che se è possibile il:

    Codice: 
    Set rng = Range(Cells(r - 1, c1), Cells(r - 1, c1 + 10))
    lo facesse in memoria in quanto quei dati sono nella matrice per ogni x

    mi sarò spiegato come un rospo, ma perdonatemi, per ogni chiarimento sono qui.

    Ciao Allocco (8-D
    File Allegati File Allegati

  2. #2
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1106
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    puoi spiegare cosa dovrebbe fare la macro che vorresti realizzare indipendentemente dalle formule che non ho capito ?
    i dati ce l'hai sul foglio o no ?

  3. #3
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao ho sistemato la macro, adesso è uguale alle formule, ma resta sempre quel passaggio del "Set Rng".

    allego la macro modificata, da sostituire nel file

    Codice: 
    Sub Prova()
    Dim Dati, rng As Range
    Dim r, c1, c2, x, y, z, n, d
    
    
    r = Cells(Rows.Count, 2).End(xlUp).Row
    Range("N3:W31").ClearContents
    Range("Y3:Y5").ClearContents
    Dati = Range("B3:K" & r)
    
    
    r = 3: c1 = 14: n = 0: k = 0
    For x = 1 To UBound(Dati)
      For y = 1 To 5
        Set rng = Range(Cells(r - 1, c1), Cells(3, c1 + 5))
        d = WorksheetFunction.CountIf(rng, Dati(x, y))
        If d >= 1 Then Else Cells(r, c1 + n) = Dati(x, y)
        n = n + 1
      Next y
      r = r + 1
      n = 0
    Next x
    End Sub
    i dati li ho messi a 5 perche tante sono le colonne occupate nel primo quadro

    Ciao Allocco (8-D

  4. #4
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao Patel la macro serve per vedere la ripetizione dei dati, come infatti se noti nel terzo quadro i numeri che sono già presenti nelle righe precedenti non li visualizza, visualizza solo quelli che non sono presenti prima.

    Come ho detto adesso mi occorrerebbe soltanto, far fare il Conta.SE() in memoria sulla matrice

    la matrice prova è cosi formata "prova(1 to 31, 1 to 5)"

    ora un esempio se i dati fossero in AA1:AE1

    i dati in matrice sarebbero "Prova(1,1),Prova(1,2),Prova(1,3),Prova(1,4).Prova(1,5)"

    ora vorrei fare

    Codice: 
    Set rng WorksheetFunction.Countif("Prova(1,1),Prova(1,2),Prova(1,3),Prova(1,4).Prova(1,5)";Dati(x,y))
    però non so come fare per ottenere ciò.

    essendo le righe migliaia e anche le colonne almeno una 50° far scrivere i dati sul foglio ad ogni ciclo anche con tutti gli "artifizi" di blocco formule ed eventi, il tempo di esecuzione è proibitivo.


    Ciao Allocco (8-D

  5. #5
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1106
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    i dati di partenza sono sul foglio ? quando parli di matrice intendi un range o una matrice ricavata dal range ? come la ricavi ?

  6. #6
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao tutti sul foglio1(Analisi), da Una matrice ricavate dal Range del primo quadro.

    dati = Range("B3:F31")

    Ciao Allocco (8-D

  7. #7
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1106
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    il countif lavora solo su range, per lavorare su array dovresti utilizzare un ciclo for che probabilmente risulta più lento di countif, una possible soluzione potrebbe essere trasformare l'array dati in una stringa ed utilizzare la funzione INSTR al posto di countif

  8. #8
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3208
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Buon giorno a tutti.
    Allego il tuo file con la mia macro che riporto sotto. Clicca sul pulsante e vedi se va bene.

    Codice: 
    Option Explicit
    
    
    Sub Prova() 'by Marius
    Dim uRiga As Long, a As Integer, i As Long, j As Long
    Dim numero As Integer, num()
    uRiga = Cells(Rows.Count, 2).End(xlUp).Row
    Range("BA3:BJ" & uRiga).ClearContents
    a = 1
    For i = 3 To uRiga
        For j = 2 To 11
            ReDim Preserve num(1 To a)
            num(a) = Cells(i, j).Value
            a = a + 1
        Next j
    Next i
    For i = 1 To UBound(num) - 1
        For j = i + 1 To UBound(num)
            If num(i) = num(j) Then num(j) = 0
        Next j
    Next i
    a = 1
    For i = 3 To uRiga
        For j = 14 To 23
            If num(a) > 0 Then Cells(i, j) = num(a) Else Cells(i, j) = ""
            a = a + 1
        Next j
    Next i
    Cells(1, 1).Select
    End Sub
    Fai sapere. Ciao,
    Mario
    File Allegati File Allegati

  9. #9
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao Mario, ho visto la tua macro è va bene, in questo modo non ho il problema della lettura del range sul foglio.

    Il CONTA.SE lo fai eliminando i dati uguali che in effetti è quello che mi serve, per poi scrivere sul foglio, in questo modo ce solo la lettura e la scrittura dei dati sul foglio.

    Faccio dei controlli e ti faccio sapere

    Ciao Allocco (8-D

  10. #10
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao Mario, purtroppo non è che non funzioni, ma mi va in "overflow", sarà la memoria allocata che non ce la fa, ma mi sembra strano, con altri fogli più grandi funziona.

    Ciao Allocco (8-D

  11. #11
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1106
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    prova anche questa
    Codice: 
    Sub Prova2()
    r = Cells(Rows.Count, 2).End(xlUp).Row
    Range("N3:W31").ClearContents
    Range("Y3:Y5").ClearContents
    Dati = Range("B3:K" & r)
    r = 3: c1 = 14: n = 0: k = 0
    With Application
      For x = 1 To UBound(Dati)
        For y = 1 To 5
          rng = Range(Cells(r - 1, c1), Cells(3, c1 + 4)).Value
          found = 0
          For i = 1 To UBound(rng, 2)
            d = .Match(Dati(x, y), .Index(rng, 0, i), 0)
            If IsNumeric(d) Then
              found = 1
              Exit For
            End If
          Next
          If found = 0 Then Cells(r, c1 + n) = Dati(x, y)
          n = n + 1
        Next y
        r = r + 1
        n = 0
      Next x
    End With
    End Sub

  12. #12
    L'avatar di Raffaele_53
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Binasco
    Età
    64
    Messaggi
    506
    Versione Office
    2007
    Likes ricevuti
    85
    Likes dati
    7

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao a tutti
    Ho modificato il codice, però se in una riga ci fossero due numeri uguali non funzionerebbe.
    Codice: 
    Option Explicit
    Sub Prova()
    Dim  rng As Range
    Dim r, r1, r2, c1, c2, x, y
    r = Cells(Rows.Count, 2).End(xlUp).Row
    r1 = 2: r2 = 2: c1 = 2: c2 = 11
    For x = 3 To r
        Set rng = Range(Cells(r1, c1), Cells(r2, c2))
        For y = c1 To c2
            If WorksheetFunction.CountIf(rng, Cells(x, y)) = 0 Then Cells(x, y + 12) = Cells(x, y)
            Next y
        r2 = r2 + 1
    Next x
    MsgBox "fatto"
    End Sub

  13. #13
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3208
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155
    Ciao
    non capisco perchè ti vada in overflow. I dati non sono poi così tanti.

    Mi sono accorto adesso di un errore banale (facevo le prove su un altro settore).
    Questa riga: "Range("BA3:BJ" & uRiga).ClearContents"
    va corretta così:
    Codice: 
    Range("N3:W" & uRiga).ClearContents
    Ciao,
    Mario

  14. #14
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao Mario, l'avevo già corretto, il file era di prova, fai conto che sono per il momento da 5000 a 7000 righe e le colonne saranno una 20 se non di più.

    quindi probabile che sia questo, la matrice che si crea aggiungendo dati ad ogni ogni passaggio di cella con "Preserve", vada in "Overflow".

    avevo pensato ad un ciclo "For..Each" carico i dati con un Set del range, visto che li carica in sequenza, ma poi come ciclo il "For Each".

    Ciao Allocco (8-D

  15. #15
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3208
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Buongiorno
    Ho provato a cambiare la macro. Non dovrebbe andare più in overflow. Eccola:
    Codice: 
    Sub Riprova() 'by Marius
    Dim num(), iTempo, fTempo, uRiga As Long, a As Integer, i As Long, j As Long
    iTempo = Timer
    uRiga = Cells(Rows.Count, 2).End(xlUp).Row
    Range("L2,N3:W" & uRiga).ClearContents
    ReDim num(1 To uRiga * 10)
    a = 1
    For i = 3 To uRiga
        For j = 2 To 11
            num(a) = Cells(i, j).Value
            If num(a) = "" Then num(a) = 0
            a = a + 1
        Next j
    Next i
    For i = 1 To uRiga * 10 - 1
        For j = i + 1 To uRiga * 10
            If num(i) = num(j) Then num(j) = 0
        Next j
    Next i
    a = 1
    For i = 3 To uRiga
        For j = 14 To 23
            If num(a) > 0 Then Cells(i, j) = num(a) Else Cells(i, j) = ""
            a = a + 1
        Next j
    Next i
    fTempo = Timer
    Cells(2, 12) = Round(fTempo - iTempo, 2) & " sec"
    Cells(1, 1).Select
    End Sub
    Provala e fai sapere. Penso, però, che con tutti quei dati sarà piuttosto lenta. Bisogna escogitare qualcosa di diverso.
    Allego il file.
    Ciao,
    Mario
    File Allegati File Allegati

  16. #16
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3208
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao
    Leggermente più veloce (ma, secondo me, ancora non ci siamo)
    Codice: 
    Sub Riprova_bis() 'by Marius
    Dim num(), iTempo, fTempo, uRiga As Long, a As Integer, i As Long, j As Long
    Dim ris()
    iTempo = Timer
    uRiga = Cells(Rows.Count, 2).End(xlUp).Row
    Range("L2,N3:W" & uRiga).ClearContents
    ReDim num(1 To uRiga * 10)
    a = 1
    For i = 3 To uRiga
        For j = 2 To 11
            num(a) = Cells(i, j).Value
            If num(a) = "" Then num(a) = 0
            a = a + 1
        Next j
    Next i
    For i = 1 To uRiga * 10 - 1
        For j = i + 1 To uRiga * 10
            If num(i) = num(j) Then num(j) = 0
        Next j
    Next i
    a = 1
    ReDim ris(1 To uRiga, 1 To 10)
    For i = 1 To uRiga
        For j = 1 To 10
            If num(a) > 0 Then ris(i, j) = num(a) Else ris(i, j) = ""
            Cells(i + 2, j + 13) = ris(i, j)
            a = a + 1
        Next j
    Next i
    fTempo = Timer
    Cells(2, 12) = Round(fTempo - iTempo, 2) & " sec"
    Cells(1, 1).Select
    End Sub

  17. #17
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3208
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao
    Penso che così possa andare:
    Codice: 
    Sub Riprova_bis() 'by Marius
    Dim num(), iTempo, fTempo, uRiga As Long, a As Integer, i As Long, j As Long, ris()
    iTempo = Timer
    uRiga = Cells(Rows.Count, 2).End(xlUp).Row
    Range("L2,N3:W" & uRiga).ClearContents
    Application.ScreenUpdating = False
    ReDim num(1 To uRiga * 10)
    a = 1
    For i = 3 To uRiga
        For j = 2 To 11
            num(a) = Cells(i, j).Value
            If num(a) = "" Then num(a) = 0
            a = a + 1
        Next j
    Next i
    For i = 1 To uRiga * 10 - 1
        For j = i + 1 To uRiga * 10
            If num(i) = num(j) Then num(j) = 0
        Next j
    Next i
    a = 1
    ReDim ris(1 To uRiga, 1 To 10)
    For i = 1 To uRiga
        For j = 1 To 10
            If num(a) > 0 Then ris(i, j) = num(a) Else ris(i, j) = ""
            Cells(i + 2, j + 13) = ris(i, j)
            a = a + 1
        Next j
    Next i
    Application.ScreenUpdating = True
    fTempo = Timer
    Cells(2, 12) = Round(fTempo - iTempo, 2) & " sec"
    Cells(1, 1).Select
    End Sub
    Non ho fatto altro che disabilitare l'aggiornamento dello schermo ed è diventata (sembra) una scheggia.
    Prova e fai sapere. Ciao,
    Mario

  18. #18
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao Mario, ho fatto le prove, comunque è lenta, io ho finito di sviluppare una macro, che impiega meno tempo, la inserisco:

    Codice: 
    Sub scrivi()
    Dim Dati, rng As Range, sh1 As Worksheet, iTempo, fTempo
    Dim r, c, c1, c2, x, y, z, n, d
    
    
    iTempo = Timer
    Set sh1 = Worksheets("Analisi")
    
    
    sh1.Activate
    Cells(1, 25) = ""
    c = Cells(3, 5).End(xlToRight).Column
    r = Cells(Rows.Count, 5).End(xlUp).Row
    Range("AB3:AU2600").ClearContents
    Dati = Range(Cells(3, 5), Cells(r, c))
    Application.ScreenUpdating = False
    r = 3: c1 = 28: n = 0
    For x = 1 To UBound(Dati)
      For y = 1 To c - 4
        If Dati(x, y) = 0 Then GoTo 1
        Set rng = Range(Cells(r - 1, c1), Cells(3, c1 + (c - 4)))
        d = WorksheetFunction.CountIf(rng, Dati(x, y))
        If d >= 1 Then Else Cells(r, c1 + n) = Dati(x, y)
        n = n + 1
    1  Next y
      r = r + 1:  n = 0
    Next x
    sh1.Activate
    Cells(1, 1).Select
    fTempo = Timer
    Cells(1, 25) = Round(fTempo - iTempo, 2) & " sec"
    Application.ScreenUpdating = True
    End Sub
    ti allego anche il file con una situazione reale sono solo 5 colonne ma come vedi di fianco le colonne possono essere tutte piene, sono solo un esempio di quanti possono diventare i dati..

    per le prove ho adattato la tua macro ad i miei riferimenti, comunque ci impiega di più, non penso di aver modificato qualcosa, nella tua.

    per lanciare le 2 macro le due frecce in alto, una la mia, l'altra la tua.

    Ciao Allocco (8-D

    ecco il link è grande per caricarlo

    https://www.dropbox.com/s/fwk3fhkxbi...ius2.xlsm?dl=0

    Bye

  19. #19
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1106
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    allocco, hai provato la mia al post #11 ?

  20. #20
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao Patel NO mi è sfuggita faccio le prove e ti dico


    Ciao Allocco (8-D

  21. #21
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3208
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ho provato quella di Patel (ciao): è una ... bomba

    Complimenti Andrea.
    Ciao,
    Mario

  22. #22
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1106
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Grazie Marius, ora la parola all'utilizzatore.
    vale la pena secondo te aprire una discussione sull'utilizzo delle worksheetsFunctions sugli array ?

  23. #23
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3208
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    @patel

    si, senza alcun dubbio. La trovo utile e intrigante per le molteplici sfaccettature.
    Ciao,
    Mario

  24. #24

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6773
    Versione Office
    2013
    Likes ricevuti
    716
    Likes dati
    164

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Citazione Originariamente Scritto da Marius44 Visualizza Messaggio
    @patel

    si, senza alcun dubbio. La trovo utile e intrigante per le molteplici sfaccettature.
    Ciao,
    Mario
    Concordo e sarebbe anche utile una "lezione" propedeutica su Array, Collection e Dictionary.

    Alfredo

  25. #25
    L'avatar di Raffaele_53
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Binasco
    Età
    64
    Messaggi
    506
    Versione Office
    2007
    Likes ricevuti
    85
    Likes dati
    7

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao patel
    Mi potresti spiegare i risultati di questo file?
    Veloce = Si, mà riesci a spiegami il risultato?
    Di sicuro sbaglio io, mà dove?.... PS ho messo in riga 10>>>For y = 1 To 10
    Grazie mille
    File Allegati File Allegati

  26. #26
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao a tutti, Patel ho provato la tua macro ma forse ho sbagliato qualcosa nell'adattarla allo stato originale, perche parla di 238 secondi.

    gli puoi dare un occhiata, non credo che abbia sbagliato qualche riferimento, ma un occhio in più non fa mai male.

    la tua è il terzo pulsante

    Ciao Allocco (8-D

  27. #27
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1106
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Citazione Originariamente Scritto da Raffaele_53 Visualizza Messaggio
    Ciao patel
    Mi potresti spiegare i risultati di questo file?
    prova così
    Codice: 
    Sub Prova2() 'patel
    r = Cells(Rows.Count, 2).End(xlUp).Row
    Range("N3:W31").ClearContents
    'Range("Y3:Y5").ClearContents
    Dati = Range("B3:K" & r)
    r = 3: c1 = 14: n = 0: k = 0
    ncol = UBound(Dati, 2)
    With Application
      For x = 1 To UBound(Dati)
        For y = 1 To ncol
          rng = Range(Cells(r - 1, c1), Cells(3, c1 + ncol - 1)).Value
          found = 0
          For i = 1 To UBound(rng, 2)
            d = .Match(Dati(x, y), .Index(rng, 0, i), 0)
            If IsNumeric(d) Then
              found = 1
              Exit For
            End If
          Next
          If found = 0 Then Cells(r, c1 + n) = Dati(x, y)
          n = n + 1
        Next y
        r = r + 1
        n = 0
      Next x
    End With
    End Sub

  28. #28
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1106
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Citazione Originariamente Scritto da Allocco Visualizza Messaggio
    Ciao a tutti, Patel ho provato la tua macro ma forse ho sbagliato qualcosa nell'adattarla allo stato originale, perche parla di 238 secondi.
    non hai allegato il file

  29. #29
    L'avatar di Allocco
    Clicca e Apri
    Data Registrazione
    Jan 2016
    Località
    Napoli
    Messaggi
    292
    Versione Office
    2010
    Likes ricevuti
    48
    Likes dati
    6

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Ciao Scusami una dimenticanza

    https://www.dropbox.com/s/fwk3fhkxbi...ius2.xlsm?dl=0

    Ciao Allocco (8-D

  30. #30
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    1106
    Versione Office
    2010
    Likes ricevuti
    143
    Likes dati
    1

    Re: Eseguire un CONTA.SE() su una matrice ma in memoria

    Io non avevo provato su 2000 righe, mi sembra proprio che non valga la pena lavorare sulle matrici, meglio i range, comunque la mia versione, che copia quella di allocco utilizzando rng come array invece che range sarebbe questa
    Codice: 
    Sub scrivi2()
    Dim Dati, rng, sh1 As Worksheet, iTempo, fTempo
    Dim r, c, c1, c2, x, y, z, n, d
    iTempo = Timer
    Set sh1 = Worksheets("Analisi")
    sh1.Activate
    Cells(1, 25) = ""
    c = Cells(3, 5).End(xlToRight).Column
    r = Cells(Rows.Count, 5).End(xlUp).Row
    Range("AB3:AU2600").ClearContents
    Dati = Range(Cells(3, 5), Cells(r, c))
    Application.ScreenUpdating = False
    r = 3: c1 = 28: n = 0
    For x = 1 To UBound(Dati)
      For y = 1 To c - 4
        If Dati(x, y) = 0 Then GoTo 1
        rng = Range(Cells(r - 1, c1), Cells(3, c1 + (c - 4))).Value
          found = 0
          For i = 1 To UBound(rng, 2)
            d = Application.Match(Dati(x, y), Application.Index(rng, 0, i), 0)
            If IsNumeric(d) Then
              found = 1
              Exit For
            End If
          Next
          If found = 0 Then Cells(r, c1 + n) = Dati(x, y)
        n = n + 1
    1  Next y
      r = r + 1:  n = 0
    Next x
    sh1.Activate
    Cells(1, 1).Select
    fTempo = Timer
    Cells(1, 25) = Round(fTempo - iTempo, 2) & " sec"
    Application.ScreenUpdating = True
    End Sub
    decisamente più lenta di quella di allocco e di marius.
    Marius, perché hai detto che la mia era una bomba ?

Discussioni Simili

  1. eseguire funzione excel su variabile vba
    Di mydjembe nel forum Domande su Excel VBA e MACRO
    Risposte: 6
    Ultimo Messaggio: 18/03/17, 12:43
  2. Tenere in memoria il valore finale
    Di Giovannino nel forum Domande su Excel in generale
    Risposte: 8
    Ultimo Messaggio: 01/12/16, 08:07
  3. Memoria o progetto?
    Di Adelchi nel forum Domande su Excel in generale
    Risposte: 5
    Ultimo Messaggio: 26/06/16, 12:46
  4. carico e scarico con memoria
    Di giampag nel forum Domande su Excel in generale
    Risposte: 26
    Ultimo Messaggio: 09/03/16, 15:12
  5. eseguire macro 32bit su pc a 64bit
    Di Loretta nel forum Domande su Excel VBA e MACRO
    Risposte: 4
    Ultimo Messaggio: 02/12/15, 17:07

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
  •