web-dev-qa-db-ja.com

ドロップダウンリストに基づいて行を表示/非表示にするマクロを作成するにはどうすればよいですか?

以前の投稿( セル値に基づいて行を非表示または再表示するVBAコード )に基づいていくつかのアドバイスに従い、ドロップダウンリストに基づいて特定の行を表示/非表示できるようにマクロを作成しようとしました。私はそれを手に入れるのにかなり近いですが、私の式の少なくとも一部が機能していません。これが私が使っているものです:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("D13").Value = "Unlimited" Then
         Rows("77").EntireRow.Hidden = True
    ElseIf Range("D13").Value = "Unlimited" Then
        Rows("78:82").EntireRow.Hidden = False
    End If
    If Range("D13").Value = "Limited" Then
        Rows("78:82").EntireRow.Hidden = True
    ElseIf Range("D13").Value = "Limited" Then
        Rows("77").EntireRow.Hidden = False
    End If
    If Range("D13").Value = "Select one" Then
        Rows("78:82").EntireRow.Hidden = False
    ElseIf Range("D13").Value = "Select one" Then
        Rows("77").EntireRow.Hidden = False
    End If
End Sub

この式では、ユーザーが選択したものに基づいて、ドロップダウンリストの選択の下に表示される行に影響を与えようとしています。ドロップダウンリストのあるセルはD13です。可能な値は3つあります。制限付き、無制限、1つを選択します。これが私が目指していることです:

  • 1つ選択してください:77-82のすべての行が表示されます
  • 制限:77行目が表示され、78〜82行目が非表示
  • 無制限:行77は非表示、行78〜82は表示されます

上記のコードは多少一貫性がないようです。各ドロップダウンに設定した関数が予期せず重複しているかどうかわからない場合は、現在、私の機能は、[1つ選択]-> [制限付き/無制限]から変更した場合にのみ期待どおりに機能しますが、後で別の選択に変更すると、機能を継続できません。

誰でも助けがあれば大歓迎です!!現在この髪の毛を少し引き裂いています。前もって感謝します :)

2
elliem

以下のコードの最初の行はWorksheet_Changeを処理します。変更されたセルは1つだけで、セルはD13でした。

Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("D13")) Is Nothing Or Target.Cells.Count > 1 Then
        Exit Sub

    ElseIf Range("D13").Value = "Select One" Then
        Rows("77:82").EntireRow.Hidden = False

    ElseIf Range("D13").Value = "Limited" Then
        Rows("77").EntireRow.Hidden = False
        Rows("78:82").EntireRow.Hidden = True    

    ElseIf Range("D13").Value = "Unlimited" Then
        Rows("77").EntireRow.Hidden = True
        Rows("78:82").EntireRow.Hidden = False   

    End If

End Sub

上記のコードは、ドロップダウンがオンになっているシートのWorksheetオブジェクトにコピーする必要があることに注意してください。

enter image description here

これがお役に立てば幸いです。

0
Bandersnatch