Search code examples
excelvbamatchmsgbox

VBA Excel how to match two column and paste the data in anotherone


i'm new in vba and i would ask something about a VBA code that i made.

I've already read this link: VBA - Match Column Data and paste but it's not good for my needs.

My target is match column E with column F and give the description inside rows in G to paste in column H.

To get an msg box error if the match is false.

my problem is that the msg box appear always on my desk without matching.

Which is my mistake?

thank you everyone.

This is an example of my sheet:

This is my code so far:

Sub AssociazioneCodice()

'Dichiarazione della variabile per conteggio righe
Dim countRows, r, c, e As Integer
Dim trovato As Boolean
trovato = False


'Applicazione conteggio righe - Achtung!: Inserire sempre correttamente il nome del foglio dove si trovano i riferimenti da contare
countRows = ThisWorkbook.Worksheets("Foglio2").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count

'Il for serve a cercare il numero del codice nella colonna E dei codici
For r = 1 To countRows

'Con il secondo for effettuo la corrispondenza tra la colonna dei codici E e confronto con i codici di riferimento generici della colonna F
    For e = 1 To countRows

'L'if seguente serve a dire SE la cella della riga 'r' della colonna E è uguale alla cella della riga 'e' della colonna F
        If Cells(r, 5) = Cells(e, 6) Then
        'visto che ho trovato corrispondenza, allora prendi il contenuto della riga 'e' della colonna G e copiala nella riga 'r' della colonna H

            Cells(r, 8) = Cells(e, 7)
            e = countRows   'una volta controllato il codice e trovato, passo alla riga 'r' successiva
            trovato = True

        End If

    If trovato = False Then
    'SE non è stato trovato il codice, allora manda un messaggio e scrivi "ERRORE" nella riga'r' della colonna H

        MsgBox "Codice non in elenco " & Cells(r, 5).Value & " Riga " & r
        Cells(r, 8) = " ERRORE "

    Else: trovato = False   'Se ha trovato il codice, allora viene resettato a False il booleano 'trovato'

    End If

    Next e
Next r

MsgBox " Numero di avvisi a sistema " & countRows

End Sub

Solution

  • Welcome to SO Antonio,( i am italian and i have studied your question)try to put next e before If trovato = False Then... Keep me update...

    Sub AssociazioneCodice()
    
        'Dichiarazione della variabile per conteggio righe
    
    
        Dim countRows, r, c, e As Integer
        Dim trovato As Boolean
         
        'Applicazione conteggio righe - Achtung!: Inserire sempre correttamente il nome del foglio dove si trovano i riferimenti da contare
        countRows = ThisWorkbook.Worksheets("Foglio2").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
    
        'Il for serve a cercare il numero del codice nella colonna E dei codici
        For r = 1 To countRows
         
            'Con il secondo for effettuo la corrispondenza tra la colonna dei codici E e confronto con i codici di riferimento generici della colonna F
            For e = 1 To countRows
    
                'L'if seguente serve a dire SE la cella della riga 'r' della colonna E è uguale alla cella della riga 'e' della colonna F
                If Cells(r, 5) = Cells(e, 6) Then
    
                    'visto che ho trovato corrispondenza, allora prendi il contenuto della riga 'e' della colonna G e copiala nella riga 'r' della colonna H
                    Cells(r, 8) = Cells(e, 7)
    
                    e = countRows                    'una volta controllato il codice e trovato, passo alla riga 'r' successiva
                    trovato = True
    
                End If
    
            Next e
    
            If trovato = False Then
    
                'SE non è stato trovato il codice, allora manda un messaggio e scrivi "ERRORE" nella riga'r' della colonna H
                MsgBox "Codice non in elenco " & Cells(r, 5).Value & " Riga " & r
                Cells(r, 8) = " ERRORE "
    
            Else
    
                trovato = False                      'Se ha trovato il codice, allora viene resettato a False il booleano 'trovato'
    
            End If
    
        Next r
    
        MsgBox " Numero di avvisi a sistema " & countRows
    
    End Sub