|
>チェックボックスのチェックを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 キーを押しながらマウスをクリックすると、クリックされた項目だけが
選択項目に追加されます。
|
|