- ベストアンサー
VBAでコントロールブレイクを使ってデータを集計する方法
- Excelでデータを集計する際に、VBAのコントロールブレイク機能を使用する方法を教えてください。
- 関数を使用して集計を試みましたがうまくいかなかったため、VBAを利用した方法についてお知りたいです。
- データには空白セルがあり、その場合は「.」と表示されるようにしたいです。関数でもVBAでも実現可能な方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
よくわかりませんが、こういう事でいいんでしょうか。 Private Sub CommandButton1_Click() Dim strArr(100, 3) As String Dim sh As Worksheet Set sh = Sheets("Sheet1") Dim counter As Integer counter = 0 Dim index As Integer Dim i As Integer For i = 0 To 100 Dim A_Value As String A_Value = GetCellText(sh, i + 1, 1) If A_Value = "" Then Exit For If A_Value <> "." Then strArr(counter, 0) = A_Value index = counter counter = counter + 1 End If If index <> -1 Then strArr(index, 1) = strArr(index, 1) & GetCellText(sh, i + 1, 2) strArr(index, 2) = strArr(index, 2) & GetCellText(sh, i + 1, 3) strArr(index, 3) = strArr(index, 3) & GetCellText(sh, i + 1, 4) End If Next Set sh = Nothing Dim sh2 As Worksheet Set sh2 = Sheets("Sheet2") Dim j As Integer For j = 0 To 100 Dim A_Value_2 As String Dim B_Value_2 As String Dim C_Value_2 As String Dim D_Value_2 As String A_Value_2 = strArr(j, 0) B_Value_2 = strArr(j, 1) C_Value_2 = strArr(j, 2) D_Value_2 = strArr(j, 3) If A_Value_2 = "" Then Exit For Call SetCellText(sh2, j + 1, 1, A_Value_2) Call SetCellText(sh2, j + 1, 2, B_Value_2) Call SetCellText(sh2, j + 1, 3, C_Value_2) Call SetCellText(sh2, j + 1, 4, D_Value_2) Next Set sh2 = Nothing End Sub Private Function GetCellText(ByRef sh As Worksheet, ByVal rowIndex As Integer, ByVal colIndex As Integer) As String Dim rng As Range Set rng = sh.Cells(rowIndex, colIndex) GetCellText = rng.Text Set rng = Nothing End Function Private Sub SetCellText(ByRef sh As Worksheet, ByVal rowIndex As Integer, ByVal colIndex As Integer, ByVal value As String) Dim rng As Range Set rng = sh.Cells(rowIndex, colIndex) rng.value = value Set rng = Nothing End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
言っていることは推測が付く。しかしもう少し具体的(らしい)丁寧な例にして、イメージが直感できるよう、例を挙げてほしい。Idやa、b、cなどではなく。 また列の位置がOKWAVEでは崩れて見辛くなるので、その点ご考慮を。 ーー ID列ででソート。 直前(行)のキー(ID)と現在(行)を比較して 変わらなければ、計数列の計数を足しこみ 変われば合計を書き出し、合計を0にする。 総合計が必要なら、総合計に加えて、合計を0にする。 >集計しなくてもいい行はそのまま これが具体的には良くわからない。 >データになにも入力されていないセルは"."が入ります 珍しい例だが、ピリオドが入るのですか。 であればそのセルは0を足す。 ーーー SUBTOTAL関数というのがあるが、検討してみましたか。使えるかもしれない。 ピボットテーブルも使えるかもしれない、検討してみてください。
お礼
vba,関数では無理そうでしょうか? データも多いのでマクロにしたいです。