|
发表于 2017-7-18 16:46
|
显示全部楼层
本楼为最佳答案
- Sub grf()
- arr = Sheet1.[a1].CurrentRegion
- Set d = CreateObject("scripting.dictionary")
- For i = 2 To UBound(arr)
- x = arr(i, 5) & arr(i, 6) & arr(i, 7) '号码+姓名+节次
- y = arr(i, 5) & arr(i, 6) & "合计" '号码+姓名+合计
- If Len(arr(i, 9)) Then '统计 号码+姓名+节次 的暂停次数,并合计
- d(x & "暂停") = d(x & "暂停") + 1
- d(y & "暂停") = d(y & "暂停") + 1
- End If
- If Len(arr(i, 10)) Then '统计 号码+姓名+节次 的犯规次数,并合计
- d(x & "犯规") = d(x & "犯规") + 1
- d(y & "犯规") = d(y & "犯规") + 1
- End If
- If Len(arr(i, 11)) Then '统计 号码+姓名+节次 的分值,并合计
- d(x & "分值") = d(x & "分值") + arr(i, 11)
- d(y & "分值") = d(y & "分值") + arr(i, 11)
- End If
- If Len(arr(i, 12)) Then '统计 号码+姓名 的说明,成字符串
- x = arr(i, 5) & arr(i, 6) & "说明"
- d(x) = d(x) & "," & arr(i, 12)
- End If
- Next
-
- For k = 3 To 23 Step 20 '上下两个表
- arr = Cells(k, 1).Resize(13, 23) '上下两个表的区间
- For j = 5 To 23
- If arr(1, j) = "" Then arr(1, j) = arr(1, j - 1) '第一行为节次
- For i = 3 To UBound(arr)
- If arr(i, 2) <> "" Then '除最后一列外,key=号码+姓名+(节次/合计)+(暂停/犯规/分值),最后一列key=号码+姓名+说明
- x = IIf(j < 23, arr(i, 2) & arr(i, 3) & arr(1, j) & arr(2, j), arr(i, 2) & arr(i, 3) & arr(1, j))
- arr(i, j) = IIf(j < 23, d(x), Mid(d(x), 2))
- End If
- Next
- Next
- Cells(k, 1).Resize(13, 23) = arr '显示结果
- Next
- End Sub
复制代码 |
|