我要做的是 SUM IF 在每个小计中的值为 1 created 。我试过使用 Subtotal 选项,但我无法让它工作(可能是因为我不擅长使用 Excel),有时我会得到 0 和 1 的总和。所以我决定做一个VBA。
这组数据差不多
- | A | B | C |
-----------------------------
1 | Names | Points | N |
-----------------------------
2 | Grimer | 1 | 88 |
3 | Grimer | 1 | 88 |
4 | Grimer | 0 | 88 |
5 | Psyduck | 1 | 54 |
6 | Psyduck | 0 | 54 |
7 | Psyduck | 0 | 54 |
8 | Pikachu | 1 | 25 |
9 | Pikachu | 1 | 25 |
10| Pikachu | 1 | 25 |
这就是我想要得到的:
| A | B | C |
-------------------------------
1 | Names | Points | N |
-------------------------------
| 2 | Grimer | 1 | 88 |
| 3 | Grimer | 1 | 88 |
| 4 | Grimer | 0 | 88 |
- 5 | Grimer | 2 | 88 |
| 6 | Psyduck | 1 | 54 |
| 7 | Psyduck | 0 | 54 |
| 8 | Psyduck | 0 | 54 |
- 9 | Psyduck | 1 | 54 |
| 10| Pikachu | 1 | 25 |
| 11| Pikachu | 1 | 25 |
| 12| Pikachu | 1 | 25 |
- 13| Pikachu | 3 | 25 |
每行开头的虚线(从 2 开始)是我要创建的组(每行的 B 单元格是结果.. 它应该是粗体)。下面的代码是为了得到之前的结果(表格)。它有效,但我想知道是否有一种方法,是否有更好的解决方案在 Excel 上执行此操作而无需编程。或者......是否有任何错误,因为当我运行它时,它需要几秒钟(超过 4000 行)。
Sub GetPointsByPokemon()
With ThisWorkbook.ActiveSheet
Dim Fila As Integer, InitRow As Integer, Suma As Integer
PkNumber = .Range("C2").Value
InitRow = 2
ActualRow = 2
Suma = 0
Do Until .Cells(ActualRow, 1).Value = ""
If .Cells(ActualRow, 2).Value = 1 Then
Suma = Suma + 1
End If
If PkNumber <> .Range("C" & (ActualRow + 1)).Value Then
.Cells(ActualRow, 1).Offset(1).EntireRow.Insert
PkNumber = .Range("C" & (ActualRow + 2)).Value
.Range(ActualRow & ":" & ActualRow).Offset(1).Value = .Range(ActualRow & ":" & ActualRow, 1).Value
.Range("B" & (ActualRow + 1)).Value = Suma
.Rows(InitRow & ":" & ActualRow).Group
ActualRow = ActualRow + 1
InitRow = ActualRow + 1
Suma = 0
End If
ActualRow = ActualRow + 1
Loop
End With
End Sub
所有数据都是一个示例,我不得不更改代码上的一些值。我已经使用 MySQL 完成了它,但我真的很想知道如何在 excel(和 vba)上做到这一点提前谢谢!