J'essaie de comparer les rangées dans les colonnes A et B contre les colonnes D et E. Pour être plus précis, les lignes des colonnes A et B seront copiées et collées dans une autre feuille si elle correspond à l'une des lignes des colonnes D et e. P>
J'ai essayé de combiner la correspondance, l'index, les formules de Vlookup, mais je n'ai eu jusqu'à présent que possible de détecter des doublons et de ne pas correspondre exactement aux lignes. P>
Voici un exemple de mes données: P>
Les rangées de la colonne A et B seront copiées et collées dans une autre feuille si elle correspond à l'une des lignes de la colonne D et E. P>
3 Réponses :
Essayez d'utiliser "si" conditionner la colonne A et B P>
J'ai assemblé cela avec quelques commentaires pour vous aider à comprendre l'approche.
Ceci utilise Un tableau qui n'est pas vu sur la feuille. Ceci est similaire à une "colonne d'assistance" si vous deviez mettre dans Vous pouvez colonne F code> pour concaténer vos valeurs. Vous pouvez voir comment modifier quoi / où la macro met à jour les mises à jour dans les premières lignes (il est maintenant basé sur votre tir d'écran). P>
Sub TryingToclear2500Points()
Const theFirstColoumns As String = "A:B"
Const theSecondColumns As String = "D:E"
Const theDestinantionComun As String = "A:B"
Dim ws As Worksheet: Set ws = Sheet1 'Worksheet you want to analyse the columns
Dim psheet As Worksheet: Set psheet = Sheet2 'worksheet to paste data to
Dim checkRNG As Range, i As Long
'establishes destination column
Dim dCOlumn As Long
dCOlumn = Range(theDestinantionComun).Cells(1, 1).Column
'this is similiar to a helper column in that it makes an 1 dimensional array
'of the columns concatenated together
Set checkRNG = Intersect(ws.UsedRange, ws.Range(theSecondColumns))
With checkRNG
'builds an array to hold the data
ReDim Makealist(1 To checkRNG.Rows.Count) As String
For i = 1 To .Rows.Count
'if using excel 2016 or higher TextJoin might be good for more dynamic
'Makealist(i) = Application.WorksheetFunction.TextJoin("", False, Range(.Cells(i, 1), .Cells(i, .Columns.Count)))
'this will always work if just two columns
Makealist(i) = .Cells(i, 1).Value2 & .Cells(i, 2).Value2
Next i
End With
'now loop through columns A and b and check for a match in the array MakeAList)
Set checkRNG = Intersect(ws.UsedRange, ws.Range(theFirstColoumns))
With checkRNG
For i = 1 To .Rows.Count
'check if match
If Not IsError(Application.Match(.Cells(i, 1).Value2 & .Cells(i, 2).Value2, Makealist, 0)) Then
'found a match
'using copy paste
'Range(.Cells(i, 1), .Cells(i, 2)).Copy _
psheet.Cells(Rows.Count, dCOlumn).End(xlUp).Offset(1, 0)
'If you just want values, below is a better method that just sends values
psheet.Cells(Rows.Count, dCOlumn).End(xlUp).Offset(1, 0).Resize(1, 2).Value = _
Range(.Cells(i, 1), .Cells(i, 2)).Value2
End If
Next i
End With
End Sub
Salut là-bas, désolé pour la réponse tardive était juste à la maison. Quoi qu'il en soit essayé d'exécuter le code et que je reçois une erreur qui disent que le type inadéquation sur cette ligne particulière du code: Makealist (i) = .Cells (I, 1) .value2 & .Cells (i, 2) .value2 est là quand même à résoudre ceci? Désolé comme je suis assez nouveau à VBA.
En supposant que vous travaillez directement avec cette capture d'écran, c'est probablement parce que vous avez des erreurs dans la colonne B. Découvrez un moyen de se débarrasser de ceux-ci et vous devriez être bon. Déterminez également quelle ligne il s'agit en identifiant la valeur de i code> lorsque l'erreur frappe. Probablement confrri que c'est lié au
n / a code>
OK, j'ai compris! On dirait que je dois supprimer tous les # n / a des données avant de pouvoir exécuter la macro. Merci!
Salut là-bas, j'essaye maintenant ceci sur le fichier principal que je travaille sur et avoir une erreur sur cette ligne de code: sinon IsError (application.match (.Cells (I, 1) .value2 & .Cells (i, 2) .value2, Makealist, 0)) Ensuite, je reçois une nouvelle fois l'erreur de décalage de type et je ne suis pas très sûr de ce que cette ligne de code fait, apprécierait si vous pouviez expliquer et aider. Merci!
Également sur le fichier principal, je travaille sur, les données des colonnes A et B et des colonnes D et E ne sont pas les mêmes que cela peut être la cause? Si oui, est là quand même pour résoudre ce problème. Merci!
Mise à jour, cela fonctionne lorsque le nombre de lignes est la même. Cependant, j'en ai besoin pour travailler même lorsque le nombre de lignes est différente. De toute façon pour éditer au code? Merci
Ce n'était donc pas clair pour moi si vous voulez faire cela à l'aide du code (dans lequel la réponse de PGCODERider est excellente) ou sur une base manuelle.
S'il est manuel, vous pouvez simplement mettre cette déclaration dans la colonne C et Copiez-le vers le bas: p> Ceci ajoutera le mot "correspondance" si la colonne A et B combinée sont identiques à la colonne D et E combinées (et laissez la cellule vide si elles ne correspond pas). Vous pouvez ensuite filtrer ou trier la colonne C pour "Match" et copier les lignes. P> Si vous le vouliez afin que la colonne A ou la colonne B correspond à D et E respectivement, changez la formule à p > = si (ou (A2 = D2, B2 = E2), "correspond" "," ") p> Ceci suppose que vous n'aurez pas d'entrées vides dans les colonnes (si oui vous Besoin d'étendre la formule pour ignorer les cellules vides à l'aide de la fonction et de la fonction). p> p>