여러 행의 정보를 단일 행으로 집계하려고 시도합니다.

여러 행의 정보를 단일 행으로 집계하려고 시도합니다.

저는 Excel용 매크로/VB 작성에 있어서 완전 초보자이고 이 문제에 대해 정말 막히고 있습니다.

여기 제가 가지고 있는 샘플이 있습니다.

1

그리고 여기 내가 바라는 것이 있다

2

보시다시피, 저는 각각에 대한 개별 점수와 댓글을 집계하는 reviewer_id동시에 appl_id각각에 대한 AGGREGATE 점수도 가져오길 바라고 있습니다 appl_id. 가끔 점수에 대한 코멘트가 없어서 복잡해지는 것 같습니다. 이 테이블의 길이는 약 2K 행이므로 수동으로 수행하는 것은 옵션처럼 보이지 않습니다.

답변1

이 매크로는 귀하의 예에 따라 데이터를 처리합니다. appl_id당 검토자가 3명 이상인 경우 변경해야 합니다 mr. 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

관련 정보