VBA Excel, как сопоставить два столбца и вставить данные в другой - PullRequest
0 голосов
/ 07 ноября 2018

Я новичок в VBA, и я хотел бы спросить кое-что о коде VBA, который я сделал.

Я уже читал эту ссылку: VBA - сопоставить данные столбца и вставить но это не подходит для моих нужд.

Моя цель - сопоставить столбец E со столбцом F и дать описание внутри строк в G для вставки в столбец H.

Чтобы получить сообщение об ошибке в окне сообщения, если соответствие ложно.

Моя проблема в том, что на моем столе всегда отображается сообщение.

В чем моя ошибка?

спасибо всем.

Это пример моего листа:

Это мой код:

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 голосов
/ 07 ноября 2018

Вы также можете использовать:

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
0 голосов
/ 07 ноября 2018

Добро пожаловать в SO Антонио, (я итальянец, и я изучил ваш вопрос) попробуйте поставить 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
...