- 帖子
- 234
- 主題
- 19
- 精華
- 0
- 積分
- 276
- 點名
- 0
- 作業系統
- Windows XP
- 軟體版本
- office 2003
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2013-1-7
- 最後登錄
- 2021-10-7
|
回復 33# wei9133
1.資料位置放置第二個sheet,請自行修改放置位置
2.勝場計算方式
-->只有1筆資料,勝場都不變動
-->2筆以上資料,所有的"空"都算增加1場,有值的直接累加
Sub ex4()
Dim d As Object, ar As Object, r
Dim i%, AA$, a
Application.ScreenUpdating = False
Set d = CreateObject("Scripting.Dictionary")
Set ar = Sheets("對戰統計").[a1].CurrentRegion
For i = 1 To ar.Rows.Count
AA = Join(Application.Transpose(Application.Transpose(ar(i, 1).Resize(, 102))), ",") & "," & ar(i, 106) '建立判斷條件
If Not d.exists(AA) Then '字典內查無該條件
a = Application.Transpose(Application.Transpose(ar(i, 1).Resize(, 115)))
ReDim Preserve a(1 To UBound(a) + 2)
If a(103) = "" Then a(UBound(a) - 1) = 1 '紀錄勝場空白數
a(UBound(a)) = 1 '紀錄筆數
d(AA) = a '將資料放回字典
Else
a = Application.Transpose(Application.Transpose(d(AA))) '將字典資料取出
If ar(i, 103) = "" Then a(UBound(a) - 1) = a(UBound(a) - 1) + 1 Else a(103) = a(103) + ar(i, 103) '勝場空白紀錄累加1,不是空白則將欄位值相加
a(UBound(a)) = a(UBound(a)) + 1 ''紀錄筆數+1
a(105) = a(105) + ar(i, 105) '敗局累加
For Each r In Array(104, 107, 109, 115) '將備註,DC,DE,DK欄位資料合併
If a(r) <> "" And ar(i, r) <> "" Then '如果字典與欄位都有資料,使用","相連
a(r) = a(r) & "," & ar(i, r)
ElseIf a(r) = "" And ar(i, r) <> "" Then '如果字典資料為空白,欄位是有資料的,使用欄位資料
a(r) = ar(i, r)
End If
Next
d(AA) = a '將資料放回字典
End If
Next
With Sheets(2) '在第二個Sheet填入資料
.[a1].CurrentRegion.Clear '清除Sheet資料
.[a1].Resize(d.Count, UBound(a)) = Application.Transpose(Application.Transpose(d.items)) '將字典資料列出
For Each r In .Range(.[cy2], .[cy65535].End(3))
If r.Offset(, 14) > 1 And r.Offset(, 13) > 0 Then r.Value = r.Value + 1 '2筆資料以上且有勝場為"空"的勝場+1
Next
i = .[a1].CurrentRegion.Columns.Count
.Range(Cells(1, i - 1), Cells(65535, i).End(3)).Clear '清除空白&資料計算筆數
End With
Set d = Nothing
Application.ScreenUpdating = True
End Sub |
|