在為 Excel 編寫巨集/VB 方面,我完全是個新手,而且我真的陷入了這個問題。
這是我所擁有的樣本
這就是我所希望的
正如您所看到的,我希望匯總每個 的個人分數及其評論reviewer_id
,appl_id
同時也提取每個 的總分數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