これにはいくつかのアプローチがあると確信しています。私が最初に考えたのは、チェックボックスを追加して、それらすべてを 1 つのマクロにリンクすることです。アクティブ化すると、いくつかのことを行う必要があります。
誰がサブを呼び出しているかを調べます (どのチェックボックス)。
その特定のチェックボックスがどこにあるか (どの行) を見つけます。
その下の行を非表示/再表示します。
1:
チェックボックスの名前は簡単です。Application Caller
あなたにそれを与えるでしょう。
2:
ここでの本当の問題は場所です。チェックボックスにそのような特定の名前を付けて、それがどの行にあるかを明確にする以外に、ここでは簡単な解決策は見当たりません。チェックボックスを追加すると、「名前付き範囲」入力フィールドに名前を付けることができます。非表示にする必要がある行を指定する名前を付けると、さらに効果的です。のようなもの:
HIDE_4_7
チェックボックスが行 4 から 7 を非表示/非表示にする必要があることを示します。
3:
行の非表示が簡単になりました。
トータルソリューション:
Sub HideRows()
Dim cbName As String
Dim cbValue As Boolean
Dim s() As String
Dim firstRow As Long
Dim lastRow As Long
On Error Resume Next
cbName = Application.Caller
If Err.Number <> 0 Then Exit Sub 'sub is not called from an application object
cbValue = (ActiveSheet.CheckBoxes(cbName) = xlOn)
If Err.Number <> 0 Then Exit Sub 'sub is not called from a checkbox
On Error GoTo 0
s = Split(cbName, "_")
If s(LBound(s)) <> "HIDE" Then Exit Sub 'name of the shape is not valid
firstRow = Val(s(LBound(s) + 1))
lastRow = Val(s(LBound(s) + 2))
Sheets(1).Rows(firstRow & ":" & lastRow).Hidden = Not cbValue
End Sub
チェックボックスを呼び出して、HIDE_*firstrow*_*lastrow*
このサブにリンクする必要があります。それは私の側で動作します。
編集
開いたときにすべての行を非表示にするには、Workbook_Open サブ (ワークブック コード ストレージ内) を使用できます。このようなもの:
Private Sub Workbook_Open()
Dim shp As Shape
Dim s() As String
Dim firstRow As Long
Dim lastRow As Long
Dim cbValue As Boolean
For Each shp In Sheets(1).Shapes
Debug.Print shp.Name
s = Split(shp.Name, "_")
If s(LBound(s)) <> "HIDE" Then GoTo nextShp
'set checkbox off:
Sheets(1).CheckBoxes(shp.Name) = xlOff
firstRow = Val(s(LBound(s) + 1))
lastRow = Val(s(LBound(s) + 2))
Sheets(1).Rows(firstRow & ":" & lastRow).Hidden = True
nextShp:
Next shp
End Sub