Intentar agregar información de varias filas en una sola fila

Intentar agregar información de varias filas en una sola fila

Soy un completo novato en lo que respecta a escribir macros/VB para Excel y me estoy estancando mucho en este problema.

Aquí una muestra de lo que tengo

1

Y esto es lo que espero

2

Como puede ver, espero agregar las puntuaciones individuales y sus comentarios para cada uno reviewer_id, appl_idy al mismo tiempo obtener la puntuación AGREGADA para cada uno appl_id. A veces no hay comentarios para las partituras, lo que parece complicarlo. Esta tabla tiene aproximadamente 2K filas de longitud, por lo que hacer esto manualmente no parecía una opción.

Respuesta1

Esta macro procesará los datos según su ejemplo. Si tiene más de 3 revisores por appl_id, entonces debe cambiar mr. Es posible que también desee cambiar la hoja y el rango al que se refiere REF.

Sub marine()

Dim REF As Range
Dim REF2 As Range
Set REF = Sheets("Sheet1").Range("A1") 'location of start of data table set. Set this to the correct reference.

Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "Processed"

Set REF2 = Sheets("Processed").Range("A1")

' max number of reviewers
mr = 3

' set headers
REF2.Value = "appl_id"
For i = 1 To mr
 REF2.Offset(0, (i - 1) * 2 + 1).Value = "score_" & i
 REF2.Offset(0, (i - 1) * 2 + 2).Value = "comment_" & i
Next i
REF2.Offset(0, mr * 2 + 1).Value = "aggregate_score"

i = 1
a = 0
s = 0
Do While (REF.Offset(i, 0).Value <> "")
 appl_id = REF.Offset(i, 0).Value
 If (appl_id <> REF.Offset(i - 1, 0).Value) Then 'new apple_id
   a = a + 1
   s = 0
   REF2.Offset(a, 0).Value = appl_id 'set new apple_id row
 End If
 If (REF.Offset(i, 1).Value = "AGGREGATE") Then
   REF2.Offset(a, mr * 2 + 1).Value = REF.Offset(i, 2).Value 'set aggregate
 Else
   REF2.Offset(a, s + 1).Value = REF.Offset(i, 2).Value 'set score
   REF2.Offset(a, s + 2).Value = REF.Offset(i, 3).Value 'set comment
   s = s + 2
 End If

 i = i + 1
Loop

End Sub

información relacionada