/ / Macro Excel pour désempiler des données - excel, vba, excel-vba

Macro Excel pour désempiler des données - excel, vba, excel-vba

J'ai des données qui ont été empilées avant monle recevoir. Il existe plusieurs lignes de valeurs pour un même identifiant unificateur. Je souhaite convertir ces multiples lignes en une seule ligne en ajoutant des colonnes et en extrayant une plage de données spécifiée. Ainsi, mes données initiales ressemblent à ceci: entrer la description de l'image ici

Et mes données de sortie devraient ressembler à:

entrer la description de l'image ici

Idéalement, j’aimerais voir la macro de deux façonsDans ce cas, cela implique une série de colonnes (B: C). Cependant, j’aimerais aussi le voir si les colonnes nécessaires ne sont pas consécutives (B et E par exemple).

Merci pour toute aide, l'apprécie !!

Réponses:

1 pour la réponse № 1

Cela doit faire ce que vous voulez en désempilant les données dans la feuille Sheet2 afin que la feuille Sheet1 ne soit pas écrasée, ce qui est fondamentalement plus sûr. Elle ne crée pas de tableau dans la feuille Sheet2 mais écrit simplement les données.

Il se compose de deux boucles internes: une qui parcourt les lignes avec des codes identiques et une autre qui parcourt les autres. Vous devez vous assurer que la valeur d’en-tête de la cellule B1 n’est pas égale à la valeur du 1er ID - ce qui ne devrait pas être un problème étant donné que vos ID sont des nombres et que B1 sera toujours "ID".

Sub UnstackData()
Dim wSht1 As Worksheet, wSht2 As Worksheet
Set wSht1 = Sheets("Sheet1")
Set wSht2 = Sheets("Sheet2")

Dim r As Integer: r = 2
Dim r2 As Integer: r2 = 1
Dim r1 As Integer, c2 As Integer

With wSht1
wSht2.Rows(1).Value = .Rows(1).Value
r1 = .Cells(.Rows.Count, "A").End(xlUp).Row

Do While r <= r1
c2 = 6

Do While .Cells(r, "A") = .Cells(r - 1, "A")
wSht2.Cells(r2, c2).Value = .Cells(r, "B").Value
wSht2.Cells(r2, c2 + 1).Value = .Cells(r, "C").Value
c2 = c2 + 2
r = r + 1
Loop
r2 = r2 + 1

Do While .Cells(r, "A") <> .Cells(r - 1, "A")
wSht2.Range("A" & r2 & ":E" & r2).Value = .Range("A" & r & ":E" & r).Value
r = r + 1
r2 = r2 + 1
Loop
r2 = r2 - 1

Loop

End With

End Sub