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:
Et mes données de sortie devraient ressembler à:
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 № 1Cela 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