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

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

我是 vba 的新人,我想问一些关于我制作的 VBA 代码的问题。

我已经读过这个link: 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

欢迎来到 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

您还可以使用:

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