Mes données sont répandues dans de nombreuses colonnes. Dans ce cas, la colonne A et la colonne B ont un nom identique (en double), tandis que les colonnes C à Q sont des valeurs liées à la colonne B. Je souhaite aligner la colonne B vers la colonne A tout en préservant les valeurs suivantes telles qu'elles sont.
REMARQUE : Ma question est très similaire à celle-ci " Alignez des données identiques dans deux colonnes tout en préservant les valeurs au 3ème dans excel "
Mais dans mon cas, je souhaite conserver plus de colonnes subséquentes (de C à Q). J'ai joué avec un code donné en tant que solution par @Jeeped dans cette publication mais a échoué.
Puis-je get de l'aide à cet égard,
J'ai essayé le code suivant: Sub aaMacro1() Dim i As Long, j As Long, lr As Long, vVALs As Variant With ActiveSheet lr = .Cells(Rows.Count, 1).End(xlUp).Row vVALs = Range("B1:C" & lr) Range("B1:C" & lr).ClearContents For i = 1 To lr For j = 1 To UBound(vVALs, 1) If vVALs(j, 1) = .Cells(i, 1).Value Then .Cells(i, 2).Resize(1, 2) = Application.Index(vVALs, j) Exit For End If Next j Next i End With End Sub
J'ai essayé de modifier la plage ("B1: C" et lr) à la plage ("B1: Q" et lr), mais cela n'a pas fonctionné. Ensuite, j'ai changé .Résize (1,2) à .Resize (1,3), et il a copié deux lignes suivantes, mais lorsque j'ai inséré un code avec .Resize (1,4), cela n'a pas fonctionné.
J'espère que cette publication modifiée aidera à répondre à ma question.
Avec le meilleur
Basé sur le code dans le lien d'origine, devrait fonctionner avec n'importe quel nombre de colonnes …
Option Explicit Option Base 1 Sub aaMacro1() Dim i As Long, j As Long, k As Long Dim nRows As Long, nCols As Long Dim myRng As Range Dim vVALs() As Variant With ActiveSheet nRows = .Cells(Rows.Count, 1).End(xlUp).Row nCols = .Cells(1, Columns.Count).End(xlToLeft).Column Set myRng = .Range(.Cells(2, 2), .Cells(nRows, nCols)) End With nRows = nRows - 1 nCols = nCols - 1 vVALs = myRng.Value myRng.ClearContents For i = 1 To nRows For j = 1 To nRows If vVALs(j, 1) = ActiveSheet.Cells(i + 1, 1).Value Then For k = 1 To nCols myRng.Cells(i, k).Value = vVALs(j, k) Next k Exit For End If Next j Next i End Sub
Entrée test …
Fournit cette sortie …
vous pouvez essayer ceci
Option Explicit Sub AlignDupes() Dim lRow As Long, iRow As Long Dim mainRng As Range, sortRange As Range With ActiveSheet lRow = .Cells(.Rows.Count, 1).End(xlUp).Row Set mainRng = .Range("A1:A" & lRow) Set sortRange = .Range("B1:Q1").Resize(mainRng.Rows.Count) .Sort.SortFields.Clear End With Application.AddCustomList ListArray:=mainRng With sortRange .Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo, OrderCustom:=Application.CustomListCount + 1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal iRow = 1 lRow = .Cells(.Rows.Count, 1).End(xlUp).Row Do While iRow <= lRow Do While .Cells(iRow, 1) <> .Cells(iRow, 1).Offset(, -1) .Rows(iRow).Insert iRow = iRow + 1 lRow = lRow + 1 Loop iRow = iRow + 1 Loop End With Application.DeleteCustomList Application.CustomListCount End Sub