› Sviluppare funzionalita su Microsoft Office con VBA › macro vba per cercare dati uguali su 2 fogli di lavoro
-
AutoreArticoli
-
Buonasera.
Sono un neofita e volevo esporvi la mia necessità per creare una macro per fare quanto di seguito.
Ho in un file il foglio 1 e il foglio 2.
Entrambe presentano nella colonna A il campo "ordine".
Devo cercare nella colonna A "ordine" del foglio 1 i valori uguali presenti nella colonna "ordine" del foglio 2.
Vorrei che la macro copiasse nel Foglio 3 le righe complete del foglio 1 che hanno lo stesso valore del campo "ordine" del foglio 2.
Allego il file e ringrazio
Allegati:
You must be logged in to view attached files.ciao
buttato giu in 5 minuti , vedi se va bene
Option Explicit Sub CopiaUguale2_1in3() Dim i As Long, o As Long, Nriga As Long Dim SH1 As String, SH2 As String, SH3 As String Dim ValOrdine As Variant SH1 = "Foglio1" SH2 = "Foglio2" SH3 = "foglio3" Nriga = 2 Sheets(SH3).Activate For i = 2 To Sheets(SH2).Cells(Rows.Count, 1).End(xlUp).Row ValOrdine = Sheets(SH2).Cells(i, 1) For o = 2 To Sheets(SH1).Cells(Rows.Count, 1).End(xlUp).Row If Sheets(SH1).Cells(o, 1).Value = ValOrdine Then Sheets(SH1).Range("A" & o & ":Z" & o).Copy Cells(Nriga, 1).Select ActiveSheet.Paste Nriga = Nriga + 1 Exit For End If Next o Next i End Sub
riallego il tuo file con la sub() inserita
ciao
Allegati:
You must be logged in to view attached files.Grazie mister X
funziona benissimo.
Grazie ancora e Buon lavoro
Mirko
Buongiorno Mister X
volevo chiederti come è possibile integrare la macro che hai fatto facendo in modo che copi nel Foglio 4 le righe complete del foglio 2 che hanno lo stesso valore del campo "ordine" del foglio 1 (praticamente che faccia un double check delle righe presenti nel foglio 1 e uguali al foglio 2 e delle righe presenti nel foglio 2 e uguali al foglio 1.
Scusa l'ignoranza ma nella seguente sintassi:
Sheets(SH1).Range("A" & o & ":Z" & o).Copy
quale tipo di range hai specificato , se non ho capito male dalla colonna A + variabile o (tutte le righe con valori del foglio 1) + non capisco ":Z" & o .
Grazie
Mirko
ciao
in questo caso dobbiamo eliminare i vari select e affidarci a ( Destination:= ) in quanto andiamo a scrivere su due fogli contemporaneamente i vari valori, quindi la sub() ottiene una modifica con aggiunta di una variabile SH e copy Destination
Option Explicit Sub CopiaUguale2_1in3_e2in4() Dim i As Long, o As Long, Nriga As Long Dim SH1 As String, SH2 As String, SH3 As String, SH4 As String Dim ValOrdine As Variant SH1 = "Foglio1" SH2 = "Foglio2" SH3 = "foglio3" SH4 = "Foglio4" Nriga = 2 Sheets(SH3).Range("A2:Z10000").ClearContents Sheets(SH4).Range("A2:Z10000").ClearContents For i = 2 To Sheets(SH2).Cells(Rows.Count, 1).End(xlUp).Row ValOrdine = Sheets(SH2).Cells(i, 1) For o = 2 To Sheets(SH1).Cells(Rows.Count, 1).End(xlUp).Row If Sheets(SH1).Cells(o, 1).Value = ValOrdine Then Worksheets(SH1).Range("A" & o & ":Z" & o).Copy Destination:=Worksheets(SH3).Range("A" & Nriga) Worksheets(SH2).Range("A" & i & ":Z" & i).Copy Destination:=Worksheets(SH4).Range("A" & Nriga) Nriga = Nriga + 1 Exit For End If Next o Next i
per il Sheets(SH1).Range("A" & o & ":Z" & o).Copy e come srivere .Range("Ax:Zx") ma x viene ricavato dal ciclo For quindi ammettendo che for o in questo momento equivale a 6 Range Riceve un valore di riga = 6 (ps & e uguale a concatena ) qiundi abbiamo in Pratica Range("A6:Z6").copy
ti riallego il file con inserita la variazione , PS il nome della sub() lo puoi cambiare a tuo piacimento
ciao
Allegati:
You must be logged in to view attached files.Grazie 1000 Mister X è perfetta.
Complimenti ancora per la professionalità e disponibilità.
Ciao e buon lavoro.
Buongiorno, ho trovato questo interessante forum cercando proprio relativamente ad un problema simile.
Cercando di adattare questa macro al mio caso ho notato che la ricerca del "match" avviene su tutta la riga e non solo sulla colonna "A".
Per capirci se nel foglio1 ho questa situazione:
e nel foglio2 questa:
Mi copia nel foglio3 solo la riga riferita all'ordine 000L perche tutti i campi sulla riga corrispondono tra il foglio1 ed il foglio2.
Come si potrebbe riuscire a far copiare sul foglio 3 la riga in caso di corrispondenza del solo nome della cella sullac colonna A?
PS: Magari sto ragionando in maniera errata o comunque mi sto complicando la vita, in quanto l'obiettivo finale è questo:
nel foglio 2 ho nome prodotto e prezzo
nel foglio1 ho nome prodotto e ID gestionale
Nel foglio1 ci sono piu prodotti rispetto al foglio2, la mia necessità sarebbe quella di copiare il prezzo dal foglio2 alla foglio1 in caso di corrispondenza del nome prodotto. ( oppure l'ID dal foglio1 al foglio2 sempre in caso di corrispondenza del nome prodotto )
Spero di essere stato chiaro.
Allego il file in questione.
Allegati:
You must be logged in to view attached files.ciao Ale
normalmente non si fa una ricerca di aiuto in un post aperto da un altro utente, ma se ne crea uno nuovo
comunque in questo caso ti rispondo dandoti la sub() per fare questo lavoro in base al tuo file, anche se nei dati nel foglio1 in colonna A ai un casino ( valori e Stringhe )
Option Explicit Sub VerificaNome2_1_dati_in_3() Dim i As Long, o As Long Dim Nriga As Long Dim VerNome As String, verNomFile As Variant Dim Sh1 As String, Sh2 As String, Sh3 As String Nriga = 2 Sh1 = "FILE ESEMPIO" Sh2 = "Foglio2" Sh3 = "Foglio3" Sheets(Sh3).Range("A2:C10000").ClearContents For i = 2 To Sheets(Sh2).Cells(Rows.Count, 1).End(xlUp).Row VerNome = Trim(Sheets(Sh2).Cells(i, 1)) For o = 2 To Sheets(Sh1).Cells(Rows.Count, 1).End(xlUp).Row If IsNumeric(Sheets(Sh1).Cells(o, 1).Value) = True Then verNomFile = Format(Sheets(Sh1).Cells(o, 1).Value, "#") Else verNomFile = Trim(Sheets(Sh1).Cells(o, 1).Value) End If If verNomFile = VerNome Then With Sheets(Sh3) .Cells(Nriga, 1) = VerNome .Cells(Nriga, 2) = Sheets(Sh2).Cells(i, 2) .Cells(Nriga, 3) = Sheets(Sh1).Cells(o, 3) End With Nriga = Nriga + 1 Exit For End If Next o Next i End Sub
riallego il tuo file con inserita questa
ciao
Allegati:
You must be logged in to view attached files.Chiedo scusa per aver risposto al topic senza aprirne uno nuovo ma la problematica sembrava praticamente identica e pensavo fosse utile per chi cercava una risposta avere delle risposte extra.
Ti ringrazio per la correzione, funziona perfettamente.
E' possibile offrirti qualcosa per l'aiuto, scrivi anche in privato, grazie.
Alessandro
Buonasera Mister X,
stavo modificando la macro che aveva creato, per integrarla con queste due funzioni:-- cercare i dati della colonna A del foglio db_csc che non sono presenti nella colonna A del foglio db_cliente . Riportare nel foglio 5 le righe dei valori del foglio db_csc non trovati nel foglio db_cliente.
- cercare i dati della colonna A del foglio db_cliente che non sono presenti nella colonna A del foglio db_csc . Riportare nel foglio 6 le righe dei valori del foglio db_cliente non trovati nel foglio db_csc.Allego il file che ovviamente non mi funziona ..
Può cortesemente vedere dove sbaglio..
Grazie 1000
Allegati:
You must be logged in to view attached files. -
AutoreArticoli