| 
    
     |  | >チェックボックスのチェックをVBA上で入れて、集計をしたい ということは、単に項目が多すぎてチェックが面倒だからなのか、ある一定の条件
 に合う項目は全部集計対象にしたいと思うが、それが多すぎて困るから
 なのか分かりませんが、条件が無いとすれば(ただし当然のことながら、集計の
 基準にする列は除外するが)どうしても任意の項目を選択する必要がありますよね ?
 なので集計機能のダイアログよりは "選択しやすくしたつもり" のリストボックス
 をシート上に配置して、任意の複数の項目を選択できるようにしてみました。
 以下の2つのマクロを標準モジュールに入れ、Select_Item の対象シートを
 アクティブにするコードを正しく変更し、そのマクロを実行して下さい。
 MySubTotal は呼び出し専用です。
 
 Sub Select_Item()
 Dim Rc As Integer
 Dim Lp As Single, Tp As Single, Wp As Single
 Dim Hp As Single, Wp2 As Single, Hp2 As Single
 Dim LB As ListBox, BT As Button
 Dim LVal As Variant
 
 Sheets("Sheet1").Activate '←集計対象の表があるシートに変更
 If Not IsError(Application.Match("総計", Range("E:E"), 0)) Then
 Cells.RemoveSubtotal
 If MsgBox("現在の集計を削除して終了しますか", 36) = 6 Then Exit Sub
 End If
 With ActiveWindow.VisibleRange
 Rc = .Rows.Count - 1
 With .Range("A1").Resize(Rc, 2)
 Tp = .Top: Wp = .Width: Hp = .Height
 End With
 With .Range("C1:D2")
 Lp = .Left + 0.1: Wp2 = .Width: Hp2 = .Height
 End With
 End With
 With ActiveSheet
 LVal = .Range("A14", .Range("A14").End(xlToRight)).Value
 Set LB = .ListBoxes.Add(0.1, Tp, Wp, Hp)
 Set BT = .Buttons.Add(Lp, Tp, Wp2, Hp2)
 End With
 LB.List = LVal
 LB.MultiSelect = xlExtended
 BT.Caption = "集計スタート"
 BT.OnAction = "MySubtotal"
 Set LB = Nothing: Set BT = Nothing
 End Sub
 
 Sub MySubTotal()
 Dim i As Integer, j As Integer
 Dim Cnt As Integer, CkAry() As Integer
 Dim Ck As Variant
 
 If VarType(Application.Caller) <> 8 Then Exit Sub
 With ActiveSheet
 .Cells.RemoveSubtotal
 With .ListBoxes(1)
 Ck = Application.Match(True, .Selected, 0)
 If IsError(Ck) Then
 MsgBox "集計対象の項目が選択されていません", 48
 Exit Sub
 ElseIf Ck = 5 Then
 MsgBox "集計の基準は選択できません", 48
 .ListIndex = 0: Exit Sub
 End If
 Cnt = .ListCount
 For i = 1 To Cnt
 If i <> 5 And .Selected(i) Then
 ReDim Preserve CkAry(j): CkAry(j) = i
 j = j + 1
 End If
 Next i
 .Delete
 End With
 .Buttons(1).Delete
 .Range("A14", .Range("A65536").End(xlUp)).Resize(, Cnt) _
 .Subtotal 5, xlSum, CkAry, False, True
 .Cells.ClearOutline
 End With
 Erase CkAry
 End Sub
 
 * なお、Select_Item のコードで
 >LB.MultiSelect = xlExtended
 についてですが、複数選択のできる形式には2種類あります。
 いちおう"拡張複数選択"にしてありますが、テストした後、以下のヘルプの抜粋を
 読んで適宜設定を変更して下さい。
 ------------------------------------------------------------------------
 複数選択 (xlSimple) を指定すると、フォーカスの設定された状態で項目をクリック
 するか Space キーを押したときに、その項目の選択状態が切り替わるようになります。
 このモードは、頻繁に複数の項目が選択される場合に適しています。
 
 拡張複数選択 (xlExtended) を指定すると、普通は単独選択と同じ動作で、
 いずれかの項目をクリックするとそれまで選択されていた項目が選択解除されます。
 しかし、Shift キーを押しながらクリックしたり方向キーを押したりすると、
 それに応じて、選択される項目の範囲が拡張されます。
 また、Ctrl キーを押しながらマウスをクリックすると、クリックされた項目だけが
 選択項目に追加されます。
 
 |  |