web-dev-qa-db-ja.com

セル値に基づいて行を非表示または再表示するVBAコード

私のコードはここにありますが、それは実際には何もしていません。

Private Sub PG1(ByVal Target As Range)
    If .Range("E50").Value = "Passed" Then
        Rows("51").EntireRow.Hidden = True
    End If
    ElseIf Range("E50").Value = "Failed" Then
        Rows("51").EntireRow.Hidden = True
    End If
End Sub

私の意図は、前の行の特定のセルがドロップダウンから「合格」に設定されている場合、下の行が表示され、「失敗」の場合は代わりに非表示になることです。

2
I AM L

あなたのコードにはいくつかのタイプミスがあるようです。次のようなものが必要です。

Sub PG1()

    If Range("E50").Value = "Passed" Then
        Rows("51:51").EntireRow.Hidden = True
    ElseIf Range("E50").Value = "Failed" Then
        Rows("51:51").EntireRow.Hidden = False
    End If

End Sub

シートを変更したときに行の非表示/再表示を更新するには、Worksheet_Changeイベント:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("E50").Value = "Passed" Then
        Rows("51:51").EntireRow.Hidden = True
    ElseIf Range("E50").Value = "Failed" Then
        Rows("51:51").EntireRow.Hidden = False

    End If
End Sub
9
jonsca

タイプミスはありませんでした。 「rows(51)」は有効です。しかし、「全体」修飾子は必要ありません

rows(n).hidden=true    ; where n is an valid row number

複数の行を非表示にする

 range(rows(n1),rows(n2)).hidden=true ; will hide rows n1 though n2
1
Mudcat