Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Esecuzione codice-Pausa....

Ultimo Aggiornamento: 16/01/2022 18:59
Post: 235
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
26/04/2020 19:51

Buona Sera Forum. Vi Spiego il codice analizza all'interno del foglio di lavoro.Inserendo i numeri nei Range da (A2 D250000) (F2 D250000)
(K2 N250000) (P2 S250000) (U2 X250000) se messi nel foglio "fascia" potete fare qualsiasi prova con altri numeri non importa quanti ne mettete ;cancellate pure anche i miei,nel foglio Contatore-finale in colonna E la macro trova esattamente quante volte i numeri o range di numeri come li chiamo io da (uno a quattro) quello non è importante sono stati trovati.Ho provato ad inserire 180000 range di numeri nel range sopra indicato per un totale di 900000 (ho riempito tutte 5 le fasce) ma ripeto potete anche non fare come me potete fare quello che volete, il contatore riporta tutto.Dopo aver lanciato la macro e dopo 8 ore non ho avuto una risposta e ho dovuto spegnere il pc. Come da foto a calcolare come esempio 9000 io le chiamo range di numeri la macro ha finito in 3,25 secondi,non mi aspettavo di certo che la macro finisse in 325 secondi come da proporzione per calcolare le 900000 range di numeri ma,sono rimasto deluso perchè di certo non mi aspettavo che in 8 ore la macro non mi rispondesse e per questo ho dovuto spegnere il pc a malincuore.(Non ho usato il pc nel frattempo per fare altro nell'esecuzione di questa,andava solo Excel).Chiedo a tutti voi se è possibile modificare il codice inserendo una pausa dopo 2 ore per vedere se è tutto ok,oppure fermando momentaneamente l'esecuzione con un tasto della tastiera e inoltre volevo chiedervi se una volta in pausa si può salvare il lavoro già fatto e riprenderla magari il giorno dopo.Vi Chiedo inoltre come devo fare per assegnare memoria a excel perchè io cercato varie soluzioni su internet ma non riesco a trovarne una valida.Ho un pc da 8giga.Accetto qualsiasi soluzione e non vi chiedo di provare ad inserire 900000 range di numeri perchè ovvio lo faccio io.A disposizione Gatto di Marmo.
Post: 1.313
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
26/04/2020 22:05

ciao Matteo,
non credo sia quello che cerchi,
ma se il pc/macro non rispondono come ti aspetti, se non ricordo male,

CTRL + PAUSA

annulla l'esecuzione della macro e va in debug.

Per evitare l'"impallamento" del pc, bisognerebbe analizzare il tuo codice, ma chi lo può fare meglio di te che ne conosci la struttura?

L'unico consiglio che mi viene di darti è quello di verificarlo
a blocchi di codice, blocco per blocco funzionante.


ciao
Frank
[Modificato da tanimon 26/04/2020 22:06]







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 235
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
27/04/2020 10:43

Buon giorno a tutti, ciao Tanimon , ho lanciato la macro e dopo un'ora
di esecuzione ho cercato di arrestarla con la combinazione di tasti da te suggerita ma non sono riuscito ad entrare nel codice per verificarlo.Si potrebbe modificare il codice inserendo un pausa diciamo dopo un'ora di elaborazione per vedere come questo sta agendo.
Mi è venuta in mente anche un'altra idea , siccome non penso di superare le 900000 che ne dici di lavorare solo sul Range (AD) bisogna
perciò modificare il codice, inserendo perciò un istruzione qualora la macro arriverebbe a controllare il Range AD 1.048.576 avrebbe finito il lavoro.Ciao Matteo
Post: 1.315
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
27/04/2020 12:49

Re:
ciao,

gattodimarmo1980, 27/04/2020 10:43:

ho lanciato la macro e dopo un'ora
di esecuzione ho cercato di arrestarla con la combinazione di tasti da te suggerita ma non sono riuscito ad entrare nel codice per verificarlo.



a me funziona sia la combinazione di tasti che ti ho indicato,
sia il tuo file.

entra nel codice prima di lanciare la macro ed usa dei punti di interruzione dal menu Debug lato VBA mettendone più di uno e prima di dove ritieni che si "impalli", per testarla a blocchi.

Di più non so.

Frank







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 236
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
27/04/2020 14:13

Ciao Taninom ti allego la foto si impalla a Next x.La combinazione tasti è Strg+pause cioè (ctrl+ il tasto sopra F11) della tasiera?Ciao
Matteo Grazie
Post: 2.313
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
27/04/2020 16:05

ciao

modifica la riga

da cosi
If Cells(x, 10).Value = "" Then Cells(x, 10).EntireRow.Delete

a cosi
If Cells(x, 10).Value = "" Then Rows(x).Delete

sul mio pc portatile ubsoleto corei3 e 8giga ram ho impiegato ( 1 secondo e mezzo )
Ciao da locate
excel 2007 / 13
Post: 2.734
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
27/04/2020 18:05

ciao a tutti
il problema della macro Analizza risiede nel ciclo:

For x = 1 To 21 Step 5For x = 1 To 21 Step 5

e sottostanti sub-cicli.

Questo perchè tale macro sarà stata sviluppata per elaborare poche centinaia di righe ed invece......

Al posto di quella macro, prova ad utilizzare questa stando nel foglio contatore-finale:

Sub Analizza2()
Dim oDic As Object
Set oDic = CreateObject("scripting.dictionary")
Set wk = Worksheets("fascia")
cells.clearcontents
With oDic
    For c = 1 To 21 Step 5
        ur = wk.Cells(Rows.Count, c).End(xlUp).Row
        For r = 2 To ur
            For c1 = c To c + 3
                If wk.Cells(r, c1) <> "" Then mcomb = mcomb & wk.Cells(r, c1) & " "
            Next c1
            If mcomb <> "" Then
                mcomb = Left(mcomb, Len(mcomb) - 1)
                If Not .exists(mcomb) Then
                    .Add mcomb, 1
                Else
                    oDic(mcomb) = oDic(mcomb) + 1
                End If
                mcomb = ""
            End If
        Next r
    Next c
End With
arrK = oDic.keys
arrK1 = oDic.items
riga = 1
c = 1
For j = 0 To UBound(arrK)
    test = Split(arrK(j), " ")
    For I = 0 To UBound(test)
        Cells(riga, c) = test(I)
        c = c + 1
    Next
    c = 1
    riga = riga + 1
Next
[E1].Resize(UBound(arrK1) + 1) = Application.Transpose(arrK1)
End Sub


Matteo:mancano quase tutte le dichiarazioni delle variabili, queste almeno cerca di mettercele tu😉

saluti

Edit: c'è un errore alla fine, vedo se posso sistemarlo. Comunque il calcolo senza la stampa finale ci impega circa 5-6 minuti con 5 Milioni di numeri....

[Modificato da dodo47 27/04/2020 19:56]
Domenico
Win 10 - Excel 2016
Post: 238
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
27/04/2020 18:14

Ciao Locate ho modificato la riga e al controllo con dei punti di interruzione mi si blocca ancora vedi foto.
Il codice con poche range di numeri mi funziona anche a me ,ma ripeto devo inserire 900000 non è meglio magari lavorare solo sul range AD.
Io non riesco a modificare il codice.
Ciao grazie Matteo
Post: 239
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
27/04/2020 20:11

Buona sera Domenico ho risposto prima a Locate perché non ho aggiornato la pagina per circa mezz'ora e non ho visto il tuo post.
Ti ringrazio e ti faccio sapere al più presto
Post: 240
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
27/04/2020 20:30

Buona sera Domenico con calma studierò come modificare tutte le dichiarazioni delle variabili, appena si potrà uscire di casa mi
iscriverò per fare un corso di Excel, chiedo se gentilmente per ora lo puoi fare tu. Grazie anticipatamente Matteo.
Post: 2.735
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
28/04/2020 13:51

matteo...credo proprio che tu ne abbia bisogno....Funziona anche se non fai le dichiarazioni delle variabili, io non ce le metto.

Comunque, ho elaborato ca. 4 milioni di numeri posti nelle 20 colonne del foglio Fascia, ottenendo sul foglio contatore-finale circa 900 mila risultati.
Ci mette più o meno 4 minuti e finchè non finisce (msgBox) ti suggerisco di non lavorare su excel.

Questa la macro
Sub Analizza2()
Dim oDic As Object
t = Time
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Set oDic = CreateObject("scripting.dictionary")
Set wk = Worksheets("fascia")
Worksheets("contatore-finale").Select
Cells.ClearContents
With oDic
    For c = 1 To 21 Step 5
        ur = wk.Cells(Rows.Count, c).End(xlUp).Row
        For r = 2 To ur
            For c1 = c To c + 3
                If wk.Cells(r, c1) <> "" Then mcomb = mcomb & wk.Cells(r, c1) & " "
            Next c1
            If mcomb <> "" Then
                mcomb = Left(mcomb, Len(mcomb) - 1)
                If Not .exists(mcomb) Then
                    .Add mcomb, 1
                Else
                    oDic(mcomb) = oDic(mcomb) + 1
                End If
                mcomb = ""
            End If
        Next r
    Next c
End With
If oDic.Count > 1040000 Then
    MsgBox "Troppe righe, foglio non capiente"
    Exit Sub
End If
Arrk = oDic.keys
arrk1 = oDic.items
For j = 0 To UBound(Arrk)
    Cells(j + 1, 1) = Arrk(j)
    Cells(j + 1, 6) = arrk1(j)
Next
'[E1].Resize(UBound(arrk1) + 1) = Application.Transpose(arrk1)

Range("A1:A" & UBound(Arrk) + 1).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
        True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationManual
MsgBox Format(Time - t, "hh:mm:ss")

End Sub


saluti




[Modificato da dodo47 28/04/2020 13:51]
Domenico
Win 10 - Excel 2016
Post: 242
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
28/04/2020 15:37

Ciao Domenico ti ringrazio un'ennesima volta non mi andava perchè non
mettevo la macro in un modulo ma direttamente nel foglio, per quanto riguarda le dichiarazioni delle variabili ho letto molto ieri sera ma io non apprendo finchè non ho un esempio, farò i corsi sicuramente perché Vba per me è diventata una passione. Saluti e grazie ancora complimenti. [SM=x423028]
Post: 2.738
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
28/04/2020 17:45

Matteo...è dal 2015 che dici così....

Correggi la penultima riga:

Application.Calculation = xlCalculationManual

deve essere:

Application.Calculation =xlCalculationAutomatic

saluti




Domenico
Win 10 - Excel 2016
Post: 244
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
28/04/2020 18:07

Esecuzione codice pausa Analizza Cinquine
Buona sera Forum e un saluto particolare a Dodo47. Avendo a disposizione tantissimo tempo sto cancellando file inutili e utili che mi fanno passare in modo abbastanza tranquillo i pomeriggi e le serate, inoltre sto imparando ad usare in modo utente di base lo sottolineo (VBA) con grande impegno ma con pochi risultati e mi sono trovato con un file identico a questo della discussione. L'unica cosa è che la macro analizza in essa contenuta non ha le stesse istruzioni della macro precedente ha uguale solo il nome. La differenza è che c'è
un numero in più da ricercare prima erano 4 ora sono 5.Ho provato
stamattina ad inserire le 900000 righe di numeri (5) in un altro pc
e dopo 6 ore di esecuzione della macro lo spento se no mi sa che bruciavo il disco fisso. Se qualcuno a voglia di vederlo,
buona serata Matteo.
Post: 245
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
28/04/2020 18:11

Matteo...è dal 2015 che dici così....
E verò Domenico ma stavolta li faccio veramente cosa succede
se lascio Application.Calculation =xlCalculationManual ?
[Modificato da gattodimarmo1980 28/04/2020 18:12]
Post: 2.739
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
29/04/2020 12:33

Io non so che cosa c'è nel tuo foglio oltre quello che hai messo nel tuo esempio.

Pertanto, poichè in excel qualsiasi cosa scrivi le formule vengono tutte ricalcolate ogni volta che modifichi/scrivi in una cella, ho messo all'inizio:

Application.Calculation =xlCalculationManual

Questo blocca momentaneamente il calcolo di tutte le celle.

Ovviamente alla fine questo "blocco" va rimosso con:

Application.Calculation =xlCalculationAutomatic

-----------------------------------------------------------------

Scordati di elaborare 900.000 righe composte ciascuna da cinque blocchi di cinque righe ciascuna, sono 22,5 milioni di numeri

saluti



Domenico
Win 10 - Excel 2016
Post: 247
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
29/04/2020 17:06

Buona giornata Dodo47, volevo precisare che il foglio allegato al
post 14 con macro allegata fa lo stesso lavoro della macro del post11 quella che mi hai sistemato ed è funzionante anche questa con un numero limitato di righe.L'unica differenza sta che in questa macro
io posso inserire un numero in più da 4 a 5.Per esempio se io prima
inserivo 90 89 88 87 in una riga, ora nel foglio allegato posso inserire 90 89 88 87 86 vedi quindi chè c'e un numero in più da ricercare l'unica cosa e che ho notato che le due macro lavorano
con istruzioni differenti. La fascia del contatore perciò dei due fogli sono differenti ma quando mi scrivi
"Scordati di elaborare 900.000 righe composte ciascuna da cinque blocchi di cinque righe ciascuna, sono 22,5 milioni di numeri "
volevo solo farti vedere delle foto perché sicuramente mi sono spiegato male io. Prima due foto fatte con macro tua Analizza2 e contatore fino a 4 elementi. Seconde due foto fatta con macro di cinque elementi. I risultati sono evidenziati in giallo vedi, sia con 4 numeri o 5 il risultato è 30.Ovviamente il risultato per il
foglio allegato al post 14 è nella colonna "f" al posto della colonna "e". Come vedi io posso solo vedere le quaterne e ho creato
il post 14 perché volevo vedere se riuscivo ad analizzare cinquine con
un numero molto ampio di righe. (Una soluzione sarebbe quella di lasciarmi mettere un numero al posto delle colonne nere)ma dopo andrebbe rifatto il codice.
Allego le foto solo per chiarire. Ho corretto Application.Calculation =xlCalculationAutomatic grazie della spiegazione, ora devo chiederti delle cose perché ho già provato ad inserire dati sensibili.Io posso analizzare le righe fino alla riga 1040000?Grazie e buona giornate

Post: 2.744
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
30/04/2020 16:18

ciao
perchè hai solo 5 gruppi di cinque colonne ciascuno ?? Sono solo 5 ruote ?

saluti




[Modificato da dodo47 30/04/2020 16:26]
Domenico
Win 10 - Excel 2016
Post: 248
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
30/04/2020 16:58

Buon giorno Domenico.Sono solo 5 ruote .Le ruote non esistono perché dovrei nasconderlo.Il contatore restituisce esattamente il numero di righe in base a quello che ho inserito nelle fasce. Alle domanda perché hai solo 5 gruppi di cinque colonne ciascuno ?? Come vedi nella foto del post1 all'inizio il codice è stato creato per cercare (4) ripeto (4) numeri e ora volevo vederne 5. Volevo chiederti se posso modificare la tua macro oltre alla riga 1040000,Tutto qua. Grazie Matteo
Post: 2.745
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
30/04/2020 17:33

Ciao
questo per analizzare 5 numeri. Ti ricordo che i numeri nel foglio fascia partono da riga 2

Per quanto riguarda superare il 1040000 di righe è troppo complesso e non ho tempo.

Nota: ho ottimizzato la macrorispetto a quell'altra.

saluti

Sub Analizza()
Dim oDic As Object
Dim arrOut() As Variant, arrSplit As Variant
t = Time
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Set oDic = CreateObject("scripting.dictionary")
Set wk = Worksheets("fascia")
Worksheets("contatore-finale").Select
Cells.ClearContents
With oDic
    For c = 1 To 25 Step 6
        ur = wk.Cells(Rows.Count, c).End(xlUp).Row
        For r = 2 To ur
            For c1 = c To c + 4
                If wk.Cells(r, c1) <> "" Then mcomb = mcomb & wk.Cells(r, c1) & " "
            Next c1
            If mcomb <> "" Then
                mcomb = Left(mcomb, Len(mcomb) - 1)
                If Not .exists(mcomb) Then
                    .Add mcomb, 1
                Else
                    oDic(mcomb) = oDic(mcomb) + 1
                End If
                mcomb = ""
            End If
        Next r
    Next c
End With
If oDic.Count > 1040000 Then
    MsgBox "Troppe righe, foglio non capiente"
    Exit Sub
End If
arrK = oDic.keys
arrK1 = oDic.items

ReDim arrOut(1 To oDic.Count, 1 To 5)
For I = LBound(arrK) To UBound(arrK)
    arrSplit = Split(arrK(I))
    For j = LBound(arrSplit) To UBound(arrSplit)
        arrOut(I + 1, j + 1) = arrSplit(j)
    Next j
    j = 0
Next I
    Range("A1").Resize(oDic.Count, 5).Value = arrOut

ReDim arrOut(1 To oDic.Count, 1 To 1)
For I = LBound(arrK1) To UBound(arrK1)
    arrSplit = Split(arrK1(I))
    For j = LBound(arrSplit) To UBound(arrSplit)
        arrOut(I + 1, j + 1) = arrSplit(j)
    Next j
    j = 0
Next I
Range("F1").Resize(oDic.Count, 1).Value = arrOut

Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
MsgBox Format(Time - t, "hh:mm:ss")

End Sub


Domenico
Win 10 - Excel 2016
Post: 249
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
30/04/2020 20:35

Buona sera Dodo47, ho provato solo ora il codice ,una velocità sconvolgente. Ti Ringrazio [SM=x423051]. Quando avrai tempo di modificare il codice te o qualcun'altro è sempre sottointeso (vedi regolamento del forum)soprattutto per gli utenti nuovi del forum, leggete bene il regolamento,per quanta riguarda il superare le 1040000 righe finalmente questa discussione sarà finita.A presto
Post: 2.748
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/05/2020 10:09

Matteo
tieni presente che quest'ultima macro la puoi utilizzare sia per 5 numeri che per 4, 3....
Pertanto se 5 numeri tutte le colonne (tranne le nere) saranno piene, se 4 numeri, l'ultima colonna di ciascun blocco sarà vuota, se 3 numeri le ultime due colonne di ciascun saranno vuote etc etc.

Spero di esser stato chiaro.

saluti






Domenico
Win 10 - Excel 2016
Post: 250
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
01/05/2020 11:03

Buona giornata Dodo,Sei stato chiarissimo non ci avevo pensato. In
pratica posso inserire righe per un totale di (1040000x5).Giusto ?
Buon 1 maggio a tutti
Post: 2.750
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/05/2020 11:12

No matteo, non è così semplice.

Tu non puoi sapere all'inizio quante righe usciranno fuori dall'elaborazione, sono queste che non devono superare il limite ed ecco perchè ho messo quel msg box.

Ti faccio un esempio sciocco ma che rende l'idea:
se tu scrivessi la medesima cinquina in ogni fascia e per 1048000 di righe, il risultato sarebbe 1 riga con la cinquina ed affianco il contatore del numero di volte che si ripete. Pertanto 1 riga c'entra nel foglio e mi pare ovvio.

Se invece le righe da stampare DOPO L'ELABORAZIONE sono più di 1048000 non c'entrano.

Spero di aver chiarito.

saluti




[Modificato da dodo47 01/05/2020 11:13]
Domenico
Win 10 - Excel 2016
Post: 251
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Junior
2003
OFFLINE
01/05/2020 12:10

Con l'esempio ora ho capito , grazie del chiarimento ciao Dodo e buona giornata Matteo
Post: 407
Registrato il: 03/10/2015
Città: ALBAREDO PER SAN MARCO
Età: 44
Utente Senior
2003
OFFLINE
16/01/2022 18:59


Buona sera Dodo47 Per quanto riguarda superare il 1040000 di righe è troppo complesso e non ho tempo ho fatto io una stupidata ho modificato If oDic.Count > 1040000 Then in If oDic.Count > 2040000 Then ho inserito 1300000 record nelle fasce da analizzare e ho questo errore la foto allegata sopra; Ti chiedo un altra volta un aiuto a te o ad utenti per trovare un sistema per sapere all'inizio quante righe usciranno fuori dall'elaborazione così poi avrò il calcolo dei record .Sono fermo con dei lavori perchè senza questa macro funzionante solo per 1040000 di righe non posso aprire una nuova discussione sulle permutazioni dopo spiegherò il perchè con calma.A presto un caro saluto Matteo
[Modificato da gattodimarmo1980 16/01/2022 19:08]
Vota: 15MediaObject5,00126 1
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 06:30. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com