Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[EXCEL] Errore con "Application.WorksheetFunction.Match"

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

[EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Bruder » 07/07/11 10:14

Buongiorno a tutti, devo sviluppare una macro semplicissima ma mi sono arenato e non riesco a venirne fuori:
voglio che lo script confronti il valori in colonna AG di Foglio1 con quelli in colonna A di Foglio4 e che mi restituisca in colonna AH di Foglio1 i valori in colonna J di Foglio4 qualora vi sia una corrispondenza.

In parole povere si tratta di un comunissimo CERCA.VERTICALE

Il codice che uso è questo:

Codice: Seleziona tutto
Ws1.Select
For RR1 = 3 To UR1
RR4 = Application.WorksheetFunction.Match(Ws1.Range("AG" & RR1), Ws4.Columns("A:A"), 0)
Ws1.Range("AH" & RR1) = Ws4.Range("A" & RR4).Value
Next RR1


Ovviamente lo script si blocca quando non trova nessuna corrispondenza: Errore di Run-Time '1004': Impossibile trovare la proprietà Match per la classe WorksheetFunction.

Allora cosa ho fatto? Ho inserito il classico controllo On Error Resume Next ... On Error GoTo 0

Codice: Seleziona tutto
Ws1.Select
For RR1 = 3 To UR1
On Error Resume Next
RR4 = Application.WorksheetFunction.Match(Ws1.Range("AG" & RR1), Ws4.Columns("A:A"), 0)
Ws1.Range("AH" & RR1) = Ws4.Range("A" & RR4).Value
Next RR1
On Error GoTo 0


Il problema è che così, quando non c'e' corrispondenza, lo script non lascia la cella (AH & RR1) vuota, ma ci mette dentro il valore che gli era rimasto "in memoria", cioè quello della cella sopra.

Ho provato a risolvere così, ma non funziona.

Codice: Seleziona tutto
Ws1.Select
For RR1 = 3 To UR1
RR4 = Application.WorksheetFunction.Match(Ws1.Range("AG" & RR1), Ws4.Columns("A:A"), 0)
If IsError(RR4) Then GoTo SaltaRR1
Ws1.Range("AH" & RR1) = Ws4.Range("J" & RR4).Value
SaltaRR1:
Next RR1


Qualcuno ha idea di come fare?

Grazie mille!!!
Bruder
Utente Junior
 
Post: 29
Iscritto il: 06/06/11 18:30

Sponsor
 

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Flash30005 » 07/07/11 10:23

Spero tu abbia settato i fogli

Codice: Seleziona tutto
Dim Ws1 As Worksheet
Dim Ws4 As Worksheet
Set Ws1 = Worksheets("Foglio1")
Set Ws4 = Worksheets("Foglio4")


prima di utilizzare il codice postato
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Bruder » 07/07/11 10:24

Sì, scusatemi, non ho postato la macro completa ma solo un estratto, ovviamente sono state fatte tutte le dichiarazione del caso.

I termini dovrebbero essere intuitivi, Ws1 e Ws4 sono Foglio1 e Foglio4 rispettivamente, UR1, RR1 e RR4 sono i soliti contatori.
Bruder
Utente Junior
 
Post: 29
Iscritto il: 06/06/11 18:30

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Flash30005 » 07/07/11 10:30

hai dato uno sguardo a questo topic?
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Bruder » 07/07/11 10:35

Sì l'ho visto, tanto è vero che l'Application.WorksheetsFunction l'ho scoperto proprio grazie a quel post.
Non vedo però come ciò risolva il mio problema, continuo a ricevere l'errore di run-time 1004 quando non c'e' una corrispondenza.
Bruder
Utente Junior
 
Post: 29
Iscritto il: 06/06/11 18:30

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Flash30005 » 07/07/11 12:51

Non avendo l'intera macro non posso testarla ma posso dirti che quel tipo di errore normalmente dipende dal fatto che non è selezionato il foglio nel quale la macro deve prelevare i dati
prova a mettere una select
non so, per esempio
ws1.select
o
ws4.select
prima della riga che ti dà errore

altre volte può essere un range per lo stesso motivo
insomma bisogna poter provare

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Bruder » 07/07/11 13:16

Sempre errore mio, avevo già inserito anche il .Select ma non avevo postato la versione completa. Rimediamo così:

Codice: Seleziona tutto
Sub RipristinaLink()
Application.ScreenUpdating = False
Application.Calculation = xlManual

Dim Ws1, Ws4 As Worksheet
Set Ws1 = Worksheets("DETTAGLIO")
Set Ws4 = Worksheets("Foglio2")

UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row

Ws1.Select
For RR1 = 3 To UR1
RR4 = Application.WorksheetFunction.Match(Ws1.Range("AG" & RR1), Ws4.Columns("A:A"), 0)
On Error GoTo SaltaRR1
Ws1.Range("AH" & RR1) = Ws4.Range("J" & RR4).Value
SaltaRR1:
Next RR1

End Sub


Spiego meglio anche la natura del problema: lo script trova correttamente le corrispondenze, l'unico problema è che si blocca al primo caso in cui la corrispondenza non c'e'. Io voglio che quando becca un valore senza corrispondenza, invece di mostrare l'errore, semplicemente ignori quel particolare valore e prosegua oltre.

Spero di essere stato più chiaro. Nel frattempo ringrazio Flash per l'aiuto!
Bruder
Utente Junior
 
Post: 29
Iscritto il: 06/06/11 18:30

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Anthony47 » 07/07/11 13:32

Match e' la funzione Confronta.
In vba quando il Confronta dovrebbe rispondere #N/D viene invece generato un errore; quindi tocca a te con una logica di programmazione aggirare l' ostacolo.
Il mio suggerimento:
-usi On Error resume Next all' interno del loop /On Error goto 0 a completamento
-PRIMA della ".Match" azzeri RR4
-DOPO ti bastera' usare If RR4 <>0 then Ws1.Range("AH" & RR1) = Ws4.Range("A" & RR4).Value

Nella discussione di Statix era garantito che Match avrebbe trovato una corrispondenza perche' il valore da confrontare proveniva dall' elenco in cui si confrontava, non era necessario fare artifici.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Bruder » 07/07/11 13:45

Ciao Anthony, chiaro il problema e chiara anche la soluzione che hai suggerito.
Sapevo di dover gestire l'errore ma non avevo pensato di aggiungere un controllo if per evitare di compilare anche i campi senza match.
Ora ho cambiato la macro come da te suggerito e sto eseguendo, sono fiducioso che funzionerà.
Unico problema: è lentissima!
Dovendo ripetere questo tipo di ricerca più volte all'interno della macro, non esiste una maniera più rapida per eseguire la ricerca?
Bruder
Utente Junior
 
Post: 29
Iscritto il: 06/06/11 18:30

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Bruder » 07/07/11 13:49

Intanto confermo che l'esecuzione è avvenuta in maniera corretta.
Bruder
Utente Junior
 
Post: 29
Iscritto il: 06/06/11 18:30

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Anthony47 » 07/07/11 14:00

Puo' essere lentissima perche' il pc ha la memoria satura e deve usare memoria virtuale, o perche' la cpu e' "scarsa"; guarda con TaskManager se rilevi evidenti anomalie.
Intanto prova con
Ws4.Columns("A1:A10000") invece di Ws4.Columns("A:A") (invece di 10000 metti un valore grande certamente piu' del tuo elenco; oppure calcolati la vera UltimaRiga e usa quella.

Hai delle macro nei moduli dei Fogli o in ThisWorkbook? hai definito delle Function?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Bruder » 07/07/11 14:12

Grazie del suggerimento riguardo A:A10000

Ho diverse macro nei moduli di di VBAProject (PERSONAL.XLSB) mentre non ho nulla in ThisWorkbook

Functions non ne ho definite
Bruder
Utente Junior
 
Post: 29
Iscritto il: 06/06/11 18:30

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Bruder » 07/07/11 14:16

Con Columns(A1:A10000) è una scheggia, peccato però che non trova nessun valore.
Sai dirmi perche'?
Bruder
Utente Junior
 
Post: 29
Iscritto il: 06/06/11 18:30

Re: [EXCEL] Errore con "Application.WorksheetFunction.Match"

Postdi Bruder » 07/07/11 14:19

Mi rispondo da solo, ho usato Range(A1:A10000) e va a meraviglia, grazie mille Anthony e Flash.
Magari appena ho finito vi posto la macro.
Bruder
Utente Junior
 
Post: 29
Iscritto il: 06/06/11 18:30


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] Errore con "Application.WorksheetFunction.Match"":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti