VBA Excel如何匹配两列并将数据粘贴到另一个

时间:2018-11-07 13:11:05

标签: excel vba excel-vba match msgbox

我是vba的新手,我想问一些我制作的VBA代码。

我已经阅读了以下链接: VBA - Match Column Data and paste 但这对我的需求不利。

我的目标是将E列与F列匹配,并在G行中进行描述以粘贴到H列中。

如果匹配为假,则获取味精盒错误。

我的问题是味精盒总是出现在我的桌子上而没有匹配项。

我的错误是什么?

谢谢大家。

This is an example of my sheet:

到目前为止,这是我的代码:

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

2 个答案:

答案 0 :(得分:0)

欢迎来到SO Antonio,(我是意大利人,我已经研究过您的问题)请尝试将next e放在If trovato = False Then之前... 随时更新...

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

答案 1 :(得分:0)

您还可以使用:

Sub AssociazioneCodice()

Dim LR As Long, i As Long

With Worksheets("Sheet1")

    LR = .Range("E" & .Rows.Count).End(xlUp).Row

    For i = 2 To LR
        If .Range("E" & i).Value = .Range("F" & i).Value Then
            .Range("H" & i).Value = .Range("G" & i).Value
        End If

    Next i

End With

End Sub