事後の行の挿入を考慮する VBA コード。

事後の行の挿入を考慮する VBA コード。

次のコードを使用して、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

行の追加/削除の追跡と管理は非常に困難になる可能性があります (必ず常にキャプチャし、新しい行番号のコード自体を変更するか、シート上のどこかに保存する必要があります...)。回避策を使用することをお勧めします。

  1. 名前付き範囲を使用します。名前付き範囲はセルと一緒にシフトされるため、参照すると常に同じセルが参照されます。

    • 以下の例では、A6:A7 は名前付き範囲であり、サンプル コードによってそれが表示/非表示になります。

ここに画像の説明を入力してください

  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

関連情報