私がやろうとしているのは、作成されたすべての小計の値が1である場合に合計することです。小計オプションを使用してみましたが、機能させることができず(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)で実行する方法を本当に知りたいです。よろしくお願いします。