Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Cerca Ultima posizione

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

Cerca Ultima posizione

Postdi miko » 01/09/21 14:04

buongiorno, un saluto a tutti gli utenti.
ho bisogno del vostro aiuto per risolvere il seguente problema.
in una colonna, H, ho dei numeri e devo trovare l'ultima occorrenza di un numero generico
la funzione Match mi risulta trova la prima occorrenza.
allora ho pensato di invertire il range o la matrice che contiene la colonna,
cosi Match trova la posizione del numero e poi con un semplice calcolo deduco
la sua posizione effettiva nel range o matrice originaria.
in rete ho trovato questa piccola macro che risolve parzialmente il quesito

Codice: Seleziona tutto
Sub test()

Range("B3:B20").Value = WorksheetFunction.Transpose(Split(StrReverse(Join(Evaluate("transpose(H3:H20)"),"^;")),";^"))

End Sub


il codice inverte la colonna ma cambia i numeri
se inizialmente
range effettivo > applicando la macro > range invertito
1 .... 51
2 .... 21
10 .... 7
7 .... 1
12 .... 2
15 .... 1

il numero 15 e' diventato 51
il 12 diventa 21
il 10 diventa 1
in pratica tutti i numeri con 2 cifre vengono invertiti.
anche se intuisco che dipenda StrReverse, non riesco a modificare il codice per ottenere gli stessi numeri.
e' possibile modificare la macro oppure esiste una diversa soluzione, a parte un ciclo che inverte la successione dei numeri?
grazie saluti
windows 10 - office 2013
miko
Utente Senior
 
Post: 490
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: Reverse Range oppure Array

Postdi Anthony47 » 01/09/21 15:31

Cambiando approccio:

Codice: Seleziona tutto
Dim CercaIn As String, CercaCosa, LastXX

CercaIn = "K1:K100"     '<<< L'intervallo in cui cercare
CercaCosa = 3           '<<< Che cosa cercare
'
LastXX = Evaluate("=Max(If(" & CercaIn & "=" & CercaCosa & ",Row(" & CercaIn & "),""""))")

LastXX conterra' quale riga della colonna in cui cerchi contiene quel valore

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

Re: Reverse Range oppure Array

Postdi miko » 01/09/21 18:40

buonasera,
ho fatto un piccolo test e confermo che il tuo codice funziona.
grazie

ho provato con un range variabile del tipo:

Codice: Seleziona tutto
CercaIn = "B" & FirstRow & ":B" & LastRow
....
...

e funziona anche in questo modo.
fino ad ora abbiamo considerato 1 sola colonna; viene spontaneo chiedersi:

1) cosa cambia se consideriamo un range più esteso con più colonne del tipo:

Codice: Seleziona tutto
CercaIn = "B" & FirstRow & ":N" & LastRow
....
...

2) come si modifica nel caso di una matrice colonna scrivendo:

Codice: Seleziona tutto
Dim MyArray

 MyArray = Range ("B" & FirstRow & ":B" & LastRow).value
....
...

3) caso di una matrice con R righe e C colonne

Codice: Seleziona tutto
Dim MyArray

 MyArray = Range ("B" & FirstRow & ":N" & LastRow).value
....
...


ho provato con le matrici ma ho sempre errore, anche cambiando la Dim CercaIn
grazie

p.s. poiche' l'argomento non ha più nulla a che vedere con il reverse ho pensato che se vuoi e/o puoi cambiare il titolo del post
forse in "ultima occorrenza in range o array" sarebbe più appropriato per una futura ricerca
windows 10 - office 2013
miko
Utente Senior
 
Post: 490
Iscritto il: 29/12/09 10:44

Re: Cerca Ultima posizione

Postdi Anthony47 » 01/09/21 19:20

Esempio:
Codice: Seleziona tutto
CercaIn = "K1:N100"     '<<< L'intervallo in cui cercare

Ti restituira' sempre la riga piu' avanzata che contiene "CercaCosa", ma non ti dice la colonna

L'approccio non e' utilizzabile con array in memoria; potresti quindi fare:
Codice: Seleziona tutto
CercaIn = "B" & FirstRow & ":B" & lastRow     '<<< L'intervallo in cui cercare
CercaCosa = 4           '<<< Che cosa cercare
'
MyArray = Range(CercaIn).Value
LastXX = Evaluate("=Max(If(" & CercaIn & "=" & CercaCosa & ",Row(" & CercaIn & "),""""))")


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

Re: Cerca Ultima posizione

Postdi miko » 01/09/21 19:43

ciao ho provato l'ultimo codice
ma se in
LastXX = Evaluate(...
sostituisco CercaIn con MyArray ho errore " tipo non corrispondente "
quindi la linea MyArray = Range(CercaIn).Value sarebbe inutile
oppure sbaglio qualcosa
grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 490
Iscritto il: 29/12/09 10:44

Re: Cerca Ultima posizione

Postdi miko » 01/09/21 20:14

buonasera,
sto testando le varie possibilità
se uso la notazione

Codice: Seleziona tutto
CelFirst = "B" & (NRowIni + 1)
Range(Range(CelFirst), _
                   Range(CelFirst).Resize(NRowFin - NRowIni, 1)).Select


dove NRowIni è la prima riga del range ed NRowFin l'ultima riga
come devo modificare la stringa CercaIn ?
oppure non e' possibile ?
ciao grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 490
Iscritto il: 29/12/09 10:44

Re: Cerca Ultima posizione

Postdi Anthony47 » 01/09/21 20:37

ma se in
LastXX = Evaluate(...
sostituisco CercaIn con MyArray ho errore " tipo non corrispondente "
Te l'ho detto, quell'approccio non e' utilizzabile con Array in memoria.

quindi la linea MyArray = Range(CercaIn).Value sarebbe inutile
Io non so se myArray ti serve per altro; non mi serve (non con questo approccio) per cercare l'ultima presenza di qualcosa; quindi se non ti serve per altro lo puoi eliminare

se uso la notazione
Codice: Seleziona tutto
    CelFirst = "B" & (NRowIni + 1)
    Range(Range(CelFirst), _
                       Range(CelFirst).Resize(NRowFin - NRowIni, 1)).Select

dove NRowIni è la prima riga del range ed NRowFin l'ultima riga
come devo modificare la stringa CercaIn ?
Senza sconvolgere quello che hai fatto, puoi usare
Codice: Seleziona tutto
CercaIn = Selection.Address


Oppure direttamente, eliminando le tue due istruzioni (se il .Select non ti serve per altro):
Codice: Seleziona tutto
CercaIn = "B" & (NRowIni + 1) & ":B" & NRowFin


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

Re: Cerca Ultima posizione

Postdi miko » 02/09/21 06:40

buongiorno,
tutto molto chiaro,
la linea select serviva solo per evidenziare come individuare il range di ricerca,
la matrice serviva come "approfondimento" del codice che hai sviluppato.
va benissimo la soluzione che hai trovato.
grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 490
Iscritto il: 29/12/09 10:44


Torna a Applicazioni Office Windows


Topic correlati a "Cerca Ultima posizione":

ccleaner ultima versione
Autore: danny
Forum: Software Windows
Risposte: 14

Chi c’è in linea

Visitano il forum: Nessuno e 45 ospiti