Sviluppare funzionalita su Microsoft Office con VBA macro vba per cercare dati uguali su 2 fogli di lavoro

LoginRegistrati
Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
  • Autore
    Articoli
  • #21604 Risposta

    mirko1969
    Partecipante

      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.
      #21606 Risposta

      Mister_x
      Partecipante
        5 pts

        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.
        #21618 Risposta

        mirko1969
        Partecipante

          Grazie mister X 

          funziona benissimo.

          Grazie ancora e Buon lavoro 

          Mirko 

          #21621 Risposta

          mirko1969
          Partecipante

            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 

            #21628 Risposta

            Mister_x
            Partecipante
              5 pts

              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.
              #21662 Risposta

              mirko1969
              Partecipante

                Grazie 1000 Mister X è perfetta.

                Complimenti ancora per la professionalità e disponibilità.

                Ciao e buon lavoro. 

                #21684 Risposta

                alexelli
                Partecipante

                  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:

                  https://prnt.sc/q9sa7s

                  e nel foglio2 questa:

                  https://prnt.sc/q9sawh

                  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.
                  #21690 Risposta

                  Mister_x
                  Partecipante
                    5 pts

                    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.
                    #21699 Risposta

                    alexelli
                    Partecipante

                      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

                      #22745 Risposta

                      mirko1969
                      Partecipante

                        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.
                      LoginRegistrati
                      Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
                      Rispondi a: macro vba per cercare dati uguali su 2 fogli di lavoro
                      Gli allegati sono permessi solo ad utenti REGISTRATI
                      Le tue informazioni:



                      vecchio frac - 2750 risposte

                      albatros54
                      albatros54 - 833 risposte

                      patel
                      patel - 724 risposte

                      Marius44
                      Marius44 - 634 risposte

                      Luca73
                      Luca73 - 587 risposte