特定のセルの値に従ってExcelシートの行を表示または非表示にする(Excel 2007およびWindows 7)


1

さまざまな標準オプションから装飾の選択を指定するスプレッドシートを作成しました。

5つの個別の範囲があるため、これが最初の選択であり、各範囲内に追加の選択があります。

そのため、シートの開始時に「フレーム」と5つの「ラジオボタン」を使用し、この選択をcellにリンクしましたP1

したがって、この選択が行われたら、さまざまな行を非表示にして、最初の選択に関連する選択(範囲1に関連する行10〜19、範囲2に関連する行20〜29など)のみを表示します。

以下は私の「コード」ですが、ラジオボタンの選択を変更しても何もしません(セルの値がP1期待どおりに変化するのを見ることができます)。

Sub HideShow()
'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection


If Range("P1").Value = 1 Then  ‘Decoration Range A
        Rows("10:19").Select
        Selection.EntireRow.Hidden = False
        Rows("20:59").Select
        Selection.EntireRow.Hidden = True

ElseIf Range("P1").Value = 2 Then  'Decoration Range B
        Rows("10:19").Select
        Selection.EntireRow.Hidden = True
        Rows("20:29").Select
        Selection.EntireRow.Hidden = False
        Rows("30:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 3 Then  'Decoration Range C
        Rows("10:29").Select
        Selection.EntireRow.Hidden = True
        Rows("30:39").Select
        Selection.EntireRow.Hidden = False
        Rows("40:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 4 Then  'Decoration Range D
        Rows("10:39").Select
        Selection.EntireRow.Hidden = True
        Rows("40:49").Select
        Selection.EntireRow.Hidden = False
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 5 Then  'Decoration Range E
        Rows("10:49").Select
        Selection.EntireRow.Hidden = True
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False
End If


End Sub

私はおそらく最終選択を本当に必要としないことを知っています(A、B、C、またはDでなければ、Eにしかできません)が、すっきりさせるためにそれを入れました。

また、セル値をテキストとして試しましたElseIf Range("P1").Value = "5" Then...が、そこには喜びもありませんでした。

どんなガイダンスも感謝します。


コードがヒットしているかどうかわからない場合は、「If」の前にMsgBoxをポップします。MsgBox "P1 ="&Range( "P1")。value
mcalex 14年

回答:


1

コードをラジオボタン選択で実行する場合は、ラジオボタンでマクロを呼び出すか、ワークシートの変更で実行するマクロをprivate sub worksheet_change()にする必要があります。

コード自体は問題なく実行されます。より良い方法がありますが、コードに問題はありません。

作業しているシートのVBAにこれを配置します。

Private Sub worksheet_change(ByVal Target As Range)

'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection

If Not Intersect(Target, Cells(1, 16)) Is Nothing Then

    If Range("P1").Value = 1 Then
        'Decoration Range A
        Rows("10:19").Select
        Selection.EntireRow.Hidden = False
        Rows("20:59").Select
        Selection.EntireRow.Hidden = True

    ElseIf Range("P1").Value = 2 Then  'Decoration Range B
        Rows("10:19").Select
        Selection.EntireRow.Hidden = True
        Rows("20:29").Select
        Selection.EntireRow.Hidden = False
        Rows("30:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 3 Then  'Decoration Range C
        Rows("10:29").Select
        Selection.EntireRow.Hidden = True
        Rows("30:39").Select
        Selection.EntireRow.Hidden = False
        Rows("40:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 4 Then  'Decoration Range D
        Rows("10:39").Select
        Selection.EntireRow.Hidden = True
        Rows("40:49").Select
        Selection.EntireRow.Hidden = False
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 5 Then  'Decoration Range E
        Rows("10:49").Select
        Selection.EntireRow.Hidden = True
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False
    End If

End If

End Sub

しかし、私はこのようにします:

Private Sub worksheet_change(ByVal Target As Range)

'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection

If Not Intersect(Target, Range("p1")) Is Nothing Then
    On Error Resume Next
    ActiveSheet.Cells.EntireRow.Hidden = False

    If Range("P1") = 1 Then 'Decoration Range A
        Rows("20:59").Hidden = True

    ElseIf Range("P1") = 2 Then  'Decoration Range B
        Rows("10:19").Hidden = True

    ElseIf Range("P1") = 3 Then  'Decoration Range C
        Rows("10:29").Hidden = True

    ElseIf Range("P1") = 4 Then  'Decoration Range D
        Rows("10:39").Hidden = True

    ElseIf Range("P1") = 5 Then  'Decoration Range E
        Rows("10:49").Hidden = True

    End If

End If

End Sub
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.