0
votes

Essayer de trouver des paires de données n'importe où dans une feuille

J'ai donc une feuille Excel où je veux parcourir Sheet1 et trouver des paires de données similaires à Sheet2 . Donc, j'ai par exemple A1: B1 et j'ai besoin de trouver une ligne sur Sheet2 qui a exactement les mêmes valeurs les unes à côté des autres (mais cela pourrait être A33: B33 ou n'importe où) et copiez la ligne dans Sheet1 (dans la colonne C ou autre)

J'essaie également d'en faire une boucle dynamique pour qu'elle vérifie A1: B1 paire avec Sheet2 puis A2: B2 et ainsi de suite jusqu'à la dernière ligne.

Maintenant, le code que je possède vérifie uniquement si A1: B1 sur Sheet1 correspond à A1: B1 sur Sheet2 (mais pas n'importe où sur la feuille). De plus, je ne peux pas faire en sorte qu'il vérifie dynamiquement chaque ligne de Sheet1 (j'ai essayé de le faire avec le x = x + 1 mais cela ne fonctionne pas)

Voici mon code:

Sub matchme()

    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim r As Range

    Set sh1 = Sheets("Sheet1")
    Set sh2 = Sheets("Sheet2")
    r = lastrow = sh1.Range("A" & Rows.Count).End(xlUp).Row    

    For x = 1 To r    
        If sh1.Range("A" & x) = sh2.Range("A" & x) And sh1.Range("B" & x) = sh1.Range("A" & x) & sh2.Range("B" & x) Then 
            sh1.Range("A" & x).EntireRow.Copy Destination:=sh2.Range("C" & x)    
        x = x + 1    
    Next x


End Sub

S'il vous plaît, aidez-moi, je me débat avec ça depuis des jours maintenant et je dois remettre un rapport d'ici la fin d’aujourd’hui, et je ne trouve rien d’utile sur Internet. J'apprécie vraiment tout conseil


5 commentaires

Merci, mais y a-t-il un moyen de résoudre ce problème avec un script?


Vous pouvez utiliser la méthode Find sans avoir à parcourir chaque cellule.


Désolé, je n'ai pas bien compris la question lors de la première lecture, je n'ai pas lu correctement la boucle d'une ligne à l'autre. J'ai supprimé le commentaire: o) @SJR a raison, code utilisant des fonctions Excel comme .find et .match par exemple


@SJR mais si je devais utiliser Find, je ne pourrais pas changer dynamiquement les paires de données à vérifier sans boucle, n'est-ce pas? Pourriez-vous s'il vous plaît illustrer votre méthode avec un code, je ne suis pas trop familier avec Find and Match pour être honnête: o /


Je ne sais pas ce que vous voulez dire - j'ai publié un code ci-dessous, alors dites-moi comment vous vous en sortez.


4 Réponses :


0
votes

Si vous souhaitez utiliser des boucles, essayez ceci:

Sub matchme()

    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim x As Long
    Dim i As Long
    Dim j As Long

    Dim lastrow As Long
    Dim lastRow2 As Long
    Dim lastCol2 As Long

    Set sh1 = Sheets("Sheet1")
    Set sh2 = Sheets("Sheet2")
    lastrow = sh1.Range("A" & Rows.Count).End(xlUp).Row

    With sh2
        lastRow2 = .Cells(Rows.Count, 1).End(xlUp).Row
        lastCol2 = .Cells(1, Columns.Count).End(xlUp).Column
    End With

    For x = 1 To lastrow

        For i = 1 To lastRow2

            For j = 1 To lastCol2

                If sh1.Cells(x, 1) = sh2.Cells(i, j) Then

                    If sh1.Cells(x, 2) = sh2.Cells(i, j + 1) Then

                        MsgBox "Found match!"

                    End If

                End If

            Next j

        Next i

    Next x

End Sub


0 commentaires

0
votes

Je n'ai pas testé cela.

J'ai supposé que vous recherchiez les valeurs de la feuille A dans la colonne A de la feuille 2 uniquement.

Lorsqu'une correspondance est trouvée, la valeur de la colonne C sur la feuille 2 est copié dans la colonne C de la feuille 1.

Sub x()

Dim rFind As Range, s As String, r As Range

With Sheet1
    For Each r In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
        Set rFind = Sheet2.Columns(1).Find(What:=r.Value, Lookat:=xlWhole, MatchCase:=False, SearchFormat:=False)
        If Not rFind Is Nothing Then
            s = rFind.Address
            Do
                If rFind.Offset(, 1).Value = r.Offset(, 1).Value Then
                    r.Offset(, 2).Value = rFind.Offset(, 2).Value
                End If
                Set rFind = Sheet2.Columns(1).FindNext(rFind)
            Loop While rFind.Address <> s
        End If
    Next r
End With

End Sub


0 commentaires

0
votes

Pour obtenir les paires de Sheet1 et les rechercher dans Sheet2:

entrez la description de l'image ici

J'ai utilisé ce code:

< pre> XXX

La sortie de ce code est: entrez la description de l'image ici

Ce sont les numéros de ligne où se trouvent les paires. Il vous suffit d'ajouter un code pour copier la ligne entière.

J'espère que cela vous aidera


0 commentaires

0
votes

Essayez le code ci-dessous (commentaires dans le code):

Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim r As Range

Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
lastRow = sh1.Range("A" & Rows.Count).End(xlUp).Row
iLastRow = sh2.Range("A" & Rows.Count).End(xlUp).Row

For j = 1 To lastRow
    For i = 1 To iLastRow
        If sh1.Cells(j, 1) = sh2.Cells(i, 1) And sh1.Cells(j, 2) = sh2.Cells(i, 2) Then
            sh1.Cells(i, 3) = "Write some information"
        End If

        'you don't need to increment loop variable "Next" does it for you
        'also i is better suited for iterator name :)
    Next
Next


0 commentaires