
次のコードを使用して、Excelドキュメント内の特定の行を表示/非表示にするチェックボックスを作成することができました。
If CheckBox1.Value = True Then Rows("26:28").EntireRow.Hidden = False If CheckBox1.Value = False Then Rows("26:28").EntireRow.Hidden = True
ただし、この範囲を超える行を挿入するときに、範囲を更新できるようにする必要があります。
範囲が始まるセルを見つけて、その範囲に 2 を追加しようとしましたが、その方法がよくわかりません。
乾杯
ロバート
答え1
答え2
これらの行を表示/非表示にする機能コードがあり、問題は上記の行を挿入した後の行を見つけることだけであると仮定します。
表示/非表示にする範囲が 1 つしかない場合は、名前付き範囲を使用できます。上に新しい行がある場合でも、名前付き範囲は同じ行を指します。
ToBeHidden
いくつかのセルに名前 (例 ) を付けるだけです(A26:A28
行全体に名前を付ける必要はありません)。次のコードを使用してセルを切り替えます。
With ActiveSheet.Range("ToBeHidden").EntireRow
If .Hidden = True Then
.Hidden = False
Else
.Hidden = True
End If
End With
切り替える行が 1 セットだけであれば簡単ですが、行が多数ある場合は、より強力なものが必要になります。この機能を有効にするには、専用の列を追加してください。
答え3
OP の目標は、「挿入された行の有無と数を検出すること」であり、これは上記の Máté Juhász のコメントで確認できます。したがって、ソリューションでは、挿入または削除された行の非表示データ範囲を追跡する必要があります。
まず、非表示の範囲に名前を付けA26:A28
、次の VBA コードを使用して、挿入または削除された行の数を追跡します。
Private Sub Worksheet_Change(ByVal Target As Range)
Static lngRow As Long
Dim rng1 As Range
Set rng1 = ThisWorkbook.Names("Named Range").RefersToRange
If lngRow = 0 Then
lngRow = rng1.Row
Exit Sub
End If
If rng1.Row = lngRow Then Exit Sub
If rng1.Row < lngRow Then
MsgBox lngRow - rng1.Row & " Row Deleted"
Else
MsgBox rng1.Row - lngRow & " Rows Inserted"
End If
lngRow = rng1.Row
End Sub
注: 挿入された行のみをカウントしたい場合は、最後If...
のを
If rng1.Row > lngRow Then
MsgBox rng1.Row - lngRow & " Rows Inserted"
End If