Condividi:        

Macro Cerca Numeri Pari E Trova Cella

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Macro Cerca Numeri Pari E Trova Cella

Postdi ikwae » 28/05/23 00:45

Ciao a tutti … ho trovato in rete una macro che lavora con matrici e l’ho modificata, da
macro cerca numeri senza celle vuote, a macro cerca numeri pari.
Funziona bene, i dati sono giusti e fa il suo lavoro molto bene ma c’è qualche cosa che
non va e non riesco a capire perché una macro con matrice impiega un po' “troppo” a
finire probabilmente troppe colonne da elaborare e, i dati di output, non iniziano dove
apparentemente destinati dal codice (l’output dovrebbe iniziare dalla G1 senza colonne vuote).

Comunque allego la macro come indicazione ma non cerco né di far perdete tempo
eventualmente da mettere a posto né di sapere cosa non va. Vorrei confrontare e capirlo
da solo eventuali aggiustamenti, errori o struttura.

Pertanto, se possibile, chiedo a tutti un aiuto di una macro, ad uso esclusivamente didattico
con graditi commenti, che dovrebbe compiere le seguenti indicazioni.

1a) la macro deve essere autonoma ossia senza intervento umano

2b) l’intervallo inizia sempre dalla cella G1 con righe da poche
migliaia oppure fino in fondo (1.048.575)

3c) trovare l’ultima colonna piena (da G1 verso dx)

4d) mettere in memoria tutti i numeri pari (oppure eliminare i dispari).

5e) Nel range di azione non ci devono essere numeri dispari.

L‘ouput può essere:
5e.1) i numeri pari raggrupparli e scriverli a partire dalla cella G1.
5e.2) oppure lasciali random dove stanno con i “buchi” lasciati dei numeri dispari
5e.3) oppure copiare solo i pari e incollati a partire dalla prima cella della prima
colonna libera a dx.
5e.4) oppure …
Scegliere un solo metodo il più facile e veloce per non perdere tempo.

Per trovare la cella (come da oggetto inerente alla macro) attendo una eventuale risposta
della macro di aiuto e poi probabilmente se, necessario, spiegherò l’aiuto per trovare la cella
libera altrimenti c’è pericolo di enorme confusione.

In allegato un file con cinque fogli_
__foglio Scuola_org con i dati originali se necessitano fare copia incolla sul foglio Scuola
__foglio Scuola con l’intervallo su cui la macro di aiuto dovrebbe lavorare
__Foglio Mia_Macro il risultato della mia macro (trovata in rete e modificata)
__Foglio Groviera come sono i dati dei numeri pari senza quelli dispari
__Foglio Laterale se si decide di fare qualche cosa del genere.
Rammento, a me servono i numeri pari con una macro didattica possibilmente ricca di commenti.
Ringraziando anticipatamente tutti coloro che mi possono aiutare 73 ikwae

https://we.tl/t-7Ih5wGtlH9

Codice: Seleziona tutto
Sub Matrice_Per_Numeri_PARI_rete()

Dim Par_Dis() As Variant, uRig As Long, q As Long, a As Long, i As Long, j As Long, c As Long
Dim sh As Worksheets

   Set sh = Worksheets("Scuola")
    With sh
        uRig = .Range("G" & Rows.Count).End(xlUp).Row
    End With
 
 a = 1
ReDim Par_Dis(1 To uRig)

 For c = 7 To 100
   For i = 1 To uRig
                    'Pari
     If Cells(i, c) Mod 2 = 0 Then Par_Dis(a) = Cells(i, c): a = a + 1

   Next i
For j = 1 To uRig
 Cells(j, 0 + c) = Par_Dis(j)
Next j

For q = 1 To uRig
   Par_Dis(q) = ""
Next q

a = 1

Next c

End Sub
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Macro Cerca Numeri Pari E Trova Cella

Postdi Anthony47 » 28/05/23 11:13

In realta’ la tua macro scansiona una per una le celle sul foglio, e questo (come scrivere le celle una per una) e’ iun processo abbastanza lento.

Per quello che chiedi, l’output “a gruviera” e’ certamente il piu’ veloce, e una macro come questa dovrebbe essere abbastanza veloce:
Codice: Seleziona tutto
Sub PariPa()
Dim wArr, I As Long, J As Long

Sheets("Scuola").Select
'Copio la CurrentRegion di G1 - https://learn.microsoft.com/it-it/office/vba/api/excel.range.currentregion
wArr = Range("G1").CurrentRegion.Value
Debug.Print "Copio area " & Range("G1").CurrentRegion.Address(0, 0)
'
mytim = Timer
'per ubound: https://learn.microsoft.com/it-it/office/vba/language/reference/user-interface-help/ubound-function
For I = 1 To UBound(wArr)                   'Scansione ogni riga..
    For J = 1 To UBound(wArr, 2)            '... e ogni colonna
        If wArr(I, J) Mod 2 = 1 Then        'Se resto di 1...
            wArr(I, J) = ""                 '... allora cancello la cella
        End If
    Next J
Next I
'
'Scrivo il risultato accanto all'originale, separato da una colonna:
Range("G1").Offset(0, UBound(wArr, 2) + 1).Resize(UBound(wArr), UBound(wArr, 2)).Value = wArr
Debug.Print Format(Timer - mytim, "0.00")
MsgBox ("Completato")
End Sub

Ho esagerato coi commenti?

Parte dal foglio Scuola e scrive la gruviera del risultato accanto alla tabella di partenza.
Avatar utente
Anthony47
Moderatore
 
Post: 19425
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro Cerca Numeri Pari E Trova Cella

Postdi ikwae » 28/05/23 15:25

Gentilissimo Anthony sempre molto gentile a rispondermi….

Aggiungo anche di domenica e, per questo punto, ho già alzato entrambe le mani
In una ipotetica assemblea, con alzata di mano, per l’assegnazione del Nobel alla Disponibilità.

@Anthony ha scritto
Ho esagerato coi commenti?

Per quanto mi riguarda i commenti non sono mai troppi per chi come me sta
esplorando nuovi “mondi” e al riguardo posso dirti che tranne quell’odioso e,
malefico, resize :evil: sembra di leggere un libro già letto ma che non sono capace di scriverlo.

Anche se non c’è bisogno di dirlo ho collaudato la tua macro e funziona
molto bene e, contato i numeri pari, i conti tornano.

Proprio con il metodo “a gruviera” arriva il problema della cella da selezionare e mi spiego
ho un programma che genera dati in righe e colonne a livello industriale tipo 200 colonne
per 1.048.575 righe ma per semplicità diciamo qualche colonna (40) e poche righe (90).

Dopo che il programma ha creato tot righe e tot colonne interviene la macro
Can_Disp cancellando oltre ai numeri dispari è possibile che abbia cancellato
anche alcune colonne (cancellando tutti i numeri della colonna) ma non c’è nulla di certo.
Finita la macro Can_Disp subentra un’altra macro per le operazioni sulle righe e per
fare questo devo selezionare la prima cella dell’ultima colonna disponibile tipo

Codice: Seleziona tutto
Range("G1").Select
ActiveCell.CurrentRegion.Select


Ossia la prima cella della prima riga al di fuori della selezione
Esempio1 se la selezione arriva fino alla colonna AL devo selezionare la cella M1
Esempio2 se la selezione arriva fino alla colonna Y devo selezionare la cella Z1
E da qui poi parte la macro Activecell … ecc.

Ho provato in tutti i modi ma non sono riuscito a trovare una semplice soluzione.
L’unica trovata è stata che prima della macro Can_Disp di contare le colonne e scrivere
il numero In cella A6 (ad esempio 32) e finita la macro Can_Disp parte una macro con
tre righe di codice che legge il numero in cella A6 (il 32) e si posiziona all’istante
selezionando la prima cella della colonna 32 che è la AF1 (un doveroso ringraziamento a Ricky).
Le mie macro stanno già lavorando con questa indicazione.

Domanda ma se le colonne sono probabilmente diminuite o no (non si sa)
come su descritto, come si fa ad essere certi di aver selezionato la cella giusta?

Rimangono i doverosi ringraziamenti che di domenica valgono il doppio.
Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Macro Cerca Numeri Pari E Trova Cella

Postdi Anthony47 » 28/05/23 20:58

Range(XX).CurrentRegion parte da Range(xx) e si espande in tutte le direzioni fintanto che non trova come isolamento una riga e una colonna completamente vuota. Con un riepimento “a gruviera” non puoi essere certo che CurrentRegion individui tutta l’area (e, come corollario, ti permette di individuare l’ultima colonna piena).
Altre volte non hai una colonna o una riga certa su cui calcolare (rispettivamente) UltimaRiga e UltimaColonna

In questi casi io opto per queste soluzioni:
Trovare l’ultima riga occupata su tutto il foglio
Codice: Seleziona tutto
On Error Resume Next
lastR = Cells.Find(What:="*", After:=Range("A1"), _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlPrevious).Row
On Error GoTo 0


Trovare l’ultima riga occupata in certe colonne (B:F, nell’esempio)
Codice: Seleziona tutto
On Error Resume Next
lastR = Range("B:F").Find(What:="*", After:=Range("B1"), _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlPrevious).Row
On Error GoTo 0


Trovare l’ultima colonna occupata su tutto il foglio
Codice: Seleziona tutto
On Error Resume Next
LastC = Cells.Find(What:="*", After:=Range("A1"), _
    Lookat:=xlPart, LookIn:=xlValues, SearchOrder:=xlByColumns, _
    SearchDirection:=xlPrevious, MatchCase:=False).Column
On Error GoTo 0


Trovare l’ultima colonna occupata in certe righe (2:1000, nell’esempio)
Codice: Seleziona tutto
On Error Resume Next
LastC = Rows("2:1000").Find(What:="*", After:=Range("A2"), _
    Lookat:=xlPart, LookIn:=xlValues, SearchOrder:=xlByColumns, _
    SearchDirection:=xlPrevious, MatchCase:=False).Column
On Error GoTo 0


NOTA: in tutti gli esempi il parametro After:= va compilato con la prima cella dell’area di ricerca (quindi A1 se la ricerca e’ su tutto il foglio, ma A2 nell’utimo caso, visto che l’area di ricerca e’ da Riga 2
NOTA: il codice dà l’ultima occupazione; per trovare la prima libera dovrai fare +1

Quanto al mitologico Resize che non ti fa dormire:
a) Resize serve per ridimensionare un’area
b) Una matrice ha una dimensione di tot righe e tot colonne
c) se vogliamo copiare tutta la matrice sul foglio dobbiamo indicare un’area che abbia tante righe e tante colonne quante ne ha la matrice. Poiche’ le righe si possono contare con Ubound(Matrice) e le colonne con Ubound(Matrice,2) ecco che vedrai spesso qualcosa come
Codice: Seleziona tutto
Range(CellaIniziale).Resize(Ubound(Matrice), Ubound(Matrice,2)).Value = Matrice


Sia chiaro che potresti benissimo indicare un’area inferiore (e quindi perderai le righe e le colonne non indicate) o un’area superiore (ma in questo caso le righe e le colonne che non sono presenti nella matrice saranno occupare dall’errore #N/D)

Spero sia piu’ chiaro
Avatar utente
Anthony47
Moderatore
 
Post: 19425
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro Cerca Numeri Pari E Trova Cella

Postdi ikwae » 28/05/23 23:51

Gentilissimo Anthony ….

Inizio a dirti che la tua macro è già stata modificata per leggere i numeri dispari con l’aggiunta
di scrivere il risultato con inizio dalla cella G1(per essere compatibile con le altre macro) l’ho
collaudata e sembra che i dati siano corretti. Quindi già sta lavorando in questo modo
e, spero, che vada bene.

Codice: Seleziona tutto
For i = 1 To UBound(wArr)                   'Scansione ogni riga..
    For j = 1 To UBound(wArr, 2)            '... e ogni colonna
       'If wArr(i, j) Mod 2 = 1 Then        'Se resto di 1...
        If wArr(i, j) Mod 2 = 0 Then <<<<<<<<<<<<<<<<<<<<<<<<<<<<
            wArr(i, j) = ""                 '... allora cancello la cella
        End If
    Next j
Next i
Columns("G:AP") = "" '<<<<<<<<<<<<<<<<<<<<<<<<<<
'Scrivo il risultato accanto all'originale, separato da una colonna:
'Range("G1").Offset(0, UBound(wArr, 2) + 1).Resize(UBound(wArr), UBound(wArr, 2)).Value = wArr
 Range("G1").Resize(UBound(wArr), UBound(wArr, 2)).Value = wArr <<<<<<<<


Per quanto riguarda le soluzioni che hai proposto, per la cella da selezionare, li devo controllare
una a una ma già ti posso dire che ho già fatto decine e decine di prove leggendo da tutte le
parti e applicando ciò che capivo (molto poco per la verità) comunque poi ho trovato quella
soluzione di Ricky e per adesso è così.
Comunque leggerò con attenzione cosa hai scritto per vedere se riesco ad applicarlo.

Per il :evil: di resize posso dirti che non c’è parola in rete e su archivi dei vari Forum, compreso
quello di pc-facile, che io non abbia scaricato. Milioni di esercizi ma inutilmente perché sono
semplici da fare e non dicono molto poi sono andato sul pesante anzi sul massiccio ho preso
tutte le tue macro e sapendo che il resize, ossia dimensionamento di un intervallo di righe e
colonne, quindi a dx della virgola sono le righe e a sx della virgola sono le colonne quindi
ho isolato in due fasi cercando di capire

Codice: Seleziona tutto
Resize(UBound(wArr), UBound(wArr, 2)).Value     


So perfettamente che è la matrice ma è il wArr
Codice: Seleziona tutto
wArr (wArr = Range("G1").CurrentRegion.Value)

So che è la matrice dell’intervallo dove “pesca” i dati e qui che devo lavorarci.
So alla perfezione il funzionamento ma in nessun modo riesco a “vederlo” in testa.
Che tradotto in soldoni è: l’orticello/perimetro/range che è sul foglio lo devi
mettere pari_pari di qua (per la stampa) col il resize.

So anche se “corto” taglia i dati se è “lungo” vengono scritti tanti fastidiosi #N/D.

Ci vuole tempo e studio fintanto che non mi si accende la lampadina (proverò con dei disegni).

Sono arrivato alle matrici e vuoi che non arrivo al :evil: di resize?

Che dire oggi è stata una super giornata costruttiva ricca di utilissime indicazioni
che difficilmente dimenticherò (dimenticherò solo come si applicheranno).

Altro da aggiungere sono i ringraziamenti di mille e mille volte grazie e soprattutto della
tua grande disponibilità. Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Macro Cerca Numeri Pari E Trova Cella

Postdi ikwae » 15/06/23 22:51

Ciao a tutti ….
Riapro questo post per due motivi. Il primo per dare il naturale e dovuto riscontro
ad Anthony dato che mi ha dato tante preziose info che io ne ho fatto un vero tesoro.

La seconda è per completare, con una soluzione, il post.

Ricordo, una richiesta del post, era di cercare la prima cella libera della prima colonna.
Che tradotto in soldoni; tutti i dati sulla parte sinistra del foglio e tutte le colonne libere
sulla destra e, di conseguenza, la cella da trovare era la “A1” della prima colonna libera.

Sono riuscito ad assemblare due macro una è il 99,9% di copia incolla delle preziose info
di Anthony e il rimante 0,1% è mio quindi se non funziona la colpa è di quel 0,1% che
è stato configurato male.

La seconda macro è tutta “casareccia” è talmente semplice che mi :oops: un po'
a proporla comunque entrambe funzionano al 100%.

Per il collaudo non servono molti dati anzi lo facciamo un po' difficile.
Scrivere un solo numero In una delle 17 miliardi e rotti di celle (scegliere una a piacere)
e mandare in esecuzione le macro, una alla volta, entrambe le macro selezionano
all’istante, la cella richiesta.

L’unico neo è se si scrive un numero sull’ultima colonna la XFD entrambe le macro vanno
In un naturale errore perché la colonna dopo uccè.
Si può aggiungere un rigo di codice per ovviare al problema ma penso che non sia
necessario oltretutto non ne sarei capace.

Aggiungo a me serve la macro solo per i numeri Count ma ho preferito scrivere CountA
per ovvi motivi. Cordialmente ikwae
Codice: Seleziona tutto
Sub SELEZIONARE_LACELLA_SOLO_QUELLA()
'[A1] = Timer

'Trovare l’ultima riga occupata su tutto il foglio
On Error Resume Next
lastR = Cells.Find(What:="*", After:=Range("A1"), _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlPrevious).Row
On Error GoTo 0

'Trovare l’ultima colonna occupata su tutto il foglio
On Error Resume Next
LastC = Cells.Find(What:="*", After:=Range("A1"), _
    Lookat:=xlPart, LookIn:=xlValues, SearchOrder:=xlByColumns, _
    SearchDirection:=xlPrevious, MatchCase:=False).Column
On Error GoTo 0

Cells(lastR, LastC + 1).EntireColumn.Cells(1).Select
'[A2] = Timer
End Sub

Sub LaCellaSelezionaSoloQuella()
'[B1] = Timer
Dim zona As Range
Dim Toto_Rig As Long
Dim Y As Long
Dim conta As Long

Application.ScreenUpdating = False
''
Toto_Rig = 1048575 'tutte le righe preseni in colonna -1
''
   'Ciclo TUTTE le colonne dalla XFD alla colonna A
   For Y = 16384 To 1 Step -1
      Cells(1, Y).Select

       Set zona = Range(ActiveCell, ActiveCell(Toto_Rig, 1))
          conta = Application.WorksheetFunction.CountA(zona)
     
           If conta > 0 Then Else GoTo uNext
             
             ActiveCell.Offset(0, 1).Select
           
             Exit For

uNext:

    Next Y

Application.ScreenUpdating = True
'[B2] = Timer
End Sub
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Macro Cerca Numeri Pari E Trova Cella

Postdi Anthony47 » 16/06/23 09:20

Non so di che cosa stiamo a parlare, perche’ se sei arrivato all’ultima colonna o all’ultima cella allora sei morto, o excel e’ crashato, e comunque non so cosa puoi farci. Inoltre non serve calcolare contemporaneamente anche l’ultima riga in uso, se l’obiettivo e’ selezionare riga 1 della prima colonna libera.
Una possibile modifica:
Codice: Seleziona tutto
Sub SELEZIONARE_LACELLA_SOLO_QUELLA()
'[A1] = Timer

'Trovare l’ultima riga occupata su tutto il foglio
On Error Resume Next
lastR = Cells.Find(What:="*", After:=Range("A1"), _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlPrevious).Row
On Error GoTo 0

'Trovare l’ultima colonna occupata su tutto il foglio
On Error Resume Next
lastc = Cells.Find(What:="*", After:=Range("A1"), _
    Lookat:=xlPart, LookIn:=xlValues, SearchOrder:=xlByColumns, _
    SearchDirection:=xlPrevious, MatchCase:=False).Column
On Error GoTo 0
If lastc < Columns.Count Then
'    Cells(lastR, lastc + 1).EntireColumn.Cells(1).Select
    Cells(1, lastc + 1).Select
Else
    MsgBox ("Mi spiace, sei morto")
End If
'[A2] = Timer
End Sub

Ho lasciato il codice che cerca l’ultima riga, ma e’ tutto inutile e infatti non uso mai LastR

La seconda macro, quella che esamina le colonne una per una, e’ abbastanza inutile se ne hai un’altra molto piu’ veloce.

C’e’ poi una differenza sostanziale tra le due:
-la prima guarda a cosa e’ visualizzato nelle celle; la seconda a cosa e’ scritto nelle celle. Quindi se una formula restituisce “” sara’ considerata vuota dalla prima Sub ma piena dalla seconda.
Se infatti scrivi in una posizione qualsiasi di un foglio vuoto la formula =SE(3>4;44;"") la prima Sub si posiziona in A1, la seconda nella colonna accanto a quella con la formula

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19425
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro Cerca Numeri Pari E Trova Cella

Postdi ikwae » 16/06/23 13:25

Gentilissimo Anthony ….

Di quello che hai scritto ho capito poco e nulla ma da quel poco che ho capito e, con tutto
il rispetto, non sono d’accordo.
Forse non ho spiegato bene cosa cercavo. Leggiamo l’obbiettivo scritto nei precedenti post…

@ikwae ha scritto
Ossia la prima cella della prima riga al di fuori della selezione
Esempio1 se la selezione arriva fino alla colonna AL devo selezionare la cella M1
Esempio2 se la selezione arriva fino alla colonna Y devo selezionare la cella Z1
E da qui poi parte la macro Activecell … ecc.


Ricordiamoci che la tua ottima e magnifica macro eliminava i numeri lasciando le celle
vuote e di conseguenza è tassativo controllare tutte le colonne che non abbiano
qualche cella occupata perché altrimenti la macro che parte da ActiveCell e arriva
obbligatoriamente e tassativamente fino alla riga 1.048.575 darà dati errati.
Pertanto, entrambe le macro, fanno esattamente e velocemente quello che cerco.

@Anthony ha scritto
C’e’ poi una differenza sostanziale tra le due:
-la prima guarda a cosa e’ visualizzato nelle celle; la seconda a cosa e’ scritto nelle celle.
Quindi se una formula restituisce “” sara’ considerata vuota dalla prima Sub ma piena dalla seconda.


Proprio così a me non serve visualizzare a ma serve che sia piena per
selezionare la colonna a dx.

@Anthony ha scritto
Se infatti scrivi in una posizione qualsiasi di un foglio vuoto la formula =SE(3>4;44;"") la prima Sub si posiziona in A1, la seconda nella colonna accanto a quella con la formula

Anche se non capisco la formula cosa fa ma capisco certamente cosa hai scritto
che io ho evidenziato perché è proprio l’obbiettivo da raggiungere.

@ikwae ha scritto
L’unico neo è se si scrive un numero sull’ultima colonna la XFD entrambe le macro
vanno In un naturale errore perché la colonna dopo uccè.


Questa mia affermazione è sostanzialmente il frutto di due indicazioni
Il primo è stato “grassettato” il naturale vuol dire che se vuoi andare oltre
probabilmente ti mancano le basi, quelli tetta_terra, di Excel.
Il secondo per evitare che qualcuno possa “contestare” le macro che andrebbero in errore nella XFD.

Tutto questo solo come chiarimento del post e non contestare quello che hai scritto che per me
è Vangelo e in aggiunta con una profonda stima e gratitudine. Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Macro Cerca Numeri Pari E Trova Cella

Postdi Anthony47 » 16/06/23 15:18

Hummm... facciamo fatica a capirci...

Non ti quadra il codice della Sub SELEZIONARE_LACELLA_SOLO_QUELLA come modificata da me e che ignora il calcolo di LastR (tanto bisogna selezionare riga 1) e che emette il messaggio in caso di ultima colonna su colonna XFD?


Quanto alla seconda macro (Sub LaCellaSelezionaSoloQuella) effettivamente quello che ho scritto contiene una contraddizione:
-se questa seconda Sub guarda in modo diverso dalla precedente la cella (le seconda guarda al contenuto, la prima al visualizzato) allora e’ sbagliato dire che “ la seconda e’ abbastanza inutile se ne hai un’altra molto piu’ veloce”, perche’ quella piu’ veloce (la prima) fa una cosa diversa dalla seconda; quindi in qualche caso serve usare la prima e in qualche caso la seconda.

Puo’ essere allora utile questa revisione della tua macro, che non usa Select e che quindi dura qualcosa in meno della originale (molte delle righe che ho sostituito le ho lasciate “commentate”, forse aiuta a capire la modifica apportata; le puoi cancellare)
Codice: Seleziona tutto
Sub LaCellaSelezionaSoloQuella2()
'[B1] = Timer
Dim zona As Range
Dim Toto_Rig As Long
Dim Y As Long
Dim conta As Long, myTim As Single
'
'Application.ScreenUpdating = False
''
myTim = Timer
'Toto_Rig = 1048575 'tutte le righe preseni in colonna -1
''
   'Ciclo TUTTE le colonne dalla XFD alla colonna A
   For Y = Columns.Count To 1 Step -1
'       Cells(1, Y).Select
        Set zona = Columns(Y)
'       Set zona = Range(ActiveCell, ActiveCell(Toto_Rig, 1))
        conta = Application.WorksheetFunction.CountA(zona)
        If conta > 0 Then
            If Y < Columns.Count Then
    '           ActiveCell.Offset(0, 1).Select
                Cells(1, Y + 1).Select
                Exit For
            Else
                MsgBox ("Mi dispiace, sei morto")
                Exit Sub
            End If
        End If
uNext:
    Next Y
'Application.ScreenUpdating = True
Debug.Print Format(Timer - myTim, "0.00")
'[B2] = Timer
End Sub

Se ho tralasciato qualcosa sai dove trovarmi...
Avatar utente
Anthony47
Moderatore
 
Post: 19425
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro Cerca Numeri Pari E Trova Cella

Postdi ikwae » 16/06/23 17:08

Gentilissimo Anthony ….
:D
se hai notato sulle due macro postate su nella tua [A1] = Timer [A2] = Timer
e nella mia [B1] = Timer [B2] = Timer
ho fatto tante prove ed effettivamente mentre la tua è istantanea dall’inizio alla fine
la mia fra il primo timer e il secondo c’è un millisecondo di differenza.

Ma se, per pura indicazione, diciamo che la mia fosse stata più veloce avrei usato
certamente e sicuramente la tua, come sta già lavorando adesso.
Perché la mia è casareccia e ci potrebbero essere “effetti collaterali” indesiderati.

Quindi, da giorni, sta lavorando la tua macro che adesso ho sostituito con la nuova
versione (del morto che all’istante ho sostituito con KO) del post sopra.

Il filtro prevede di cancellare delle celle con numeri pari (e poi dispari) trovare la prima cella
libera (che è la seconda richiesta del post) e da questa (in futuro) fare la somma di ogni riga
tassativamente dalla cella attiva fino alla riga 1.048.575 (perché non si sa quante celle cancellate)
NON è un invito per una nuova macro ma per dire come è stato pensato il proseguire dei lavori.

Aggiungo che per scrivere quel 0,1% alla tua macro per me è stata una settimana di ricerche
e prove se poi aggiungi un 100% per la seconda macro casareccia puoi capire quante prove ho
fatto prima di postare il risultato delle due macro ad esclusivo completamento del post.
Quindi il post è super completato in ogni sua parte con ricchi commenti e macro altamente professionali (le tue).
Rimangono i saluti e ringraziamenti del tuo lavoro e delle tue magnifiche macro. Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Macro Cerca Numeri Pari E Trova Cella":


Chi c’è in linea

Visitano il forum: Marius44 e 8 ospiti