ความพยายามรวบรวมข้อมูลจากหลายแถวเป็นแถวเดียว


0

ฉันเป็นมือใหม่ทั้งหมดเมื่อพูดถึงการเขียนมาโคร / VB สำหรับ Excel และฉันติดอยู่กับปัญหานี้จริงๆ

นี่คือตัวอย่างของสิ่งที่ฉันมี

1

และนี่คือสิ่งที่ฉันหวังไว้

2

ในขณะที่คุณสามารถดูฉันหวังที่จะรวมคะแนนของแต่ละบุคคลและความคิดเห็นของพวกเขากันreviewer_idสำหรับแต่ละขณะเดียวกันก็ดึงคะแนนรวมสำหรับแต่ละappl_id appl_idบางครั้งไม่มีความคิดเห็นสำหรับคะแนนซึ่งดูเหมือนจะทำให้ซับซ้อน ตารางนี้มีความยาวประมาณ 2K แถวดังนั้นการทำเช่นนี้ด้วยตนเองจึงไม่ดูเหมือนตัวเลือก


ตาราง Pivot อาจช่วยให้คุณรู้วิธี ...
mcalex

คุณมีผู้ตรวจทานกี่คนต่อ appl_id เป็นเพียง 1 หรือ 2 เสมอหรือไม่
Sir Adelaide

เป็นไรหรือเปล่าที่คุณสูญเสีย reviewer_id ในผลลัพธ์
Sir Adelaide

คำตอบ:


0

มาโครนี้จะประมวลผลข้อมูลตามตัวอย่างของคุณ หากคุณมีมากกว่า 3 ความคิดเห็นต่อ appl_id 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.