• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vbaでコントロールブレイク)

VBAでコントロールブレイクを使ってデータを集計する方法

このQ&Aのポイント
  • Excelでデータを集計する際に、VBAのコントロールブレイク機能を使用する方法を教えてください。
  • 関数を使用して集計を試みましたがうまくいかなかったため、VBAを利用した方法についてお知りたいです。
  • データには空白セルがあり、その場合は「.」と表示されるようにしたいです。関数でもVBAでも実現可能な方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)
回答No.1

言っていることは推測が付く。しかしもう少し具体的(らしい)丁寧な例にして、イメージが直感できるよう、例を挙げてほしい。Idやa、b、cなどではなく。 また列の位置がOKWAVEでは崩れて見辛くなるので、その点ご考慮を。 ーー ID列ででソート。 直前(行)のキー(ID)と現在(行)を比較して 変わらなければ、計数列の計数を足しこみ 変われば合計を書き出し、合計を0にする。 総合計が必要なら、総合計に加えて、合計を0にする。 >集計しなくてもいい行はそのまま これが具体的には良くわからない。 >データになにも入力されていないセルは"."が入ります 珍しい例だが、ピリオドが入るのですか。 であればそのセルは0を足す。 ーーー SUBTOTAL関数というのがあるが、検討してみましたか。使えるかもしれない。 ピボットテーブルも使えるかもしれない、検討してみてください。

deaimax
質問者

お礼

vba,関数では無理そうでしょうか? データも多いのでマクロにしたいです。

関連するQ&A