2017-07-28 13 views
-2

Excelでアンケートを作成しようとしていて、その回答に基づいて行を表示および非表示にしたいとします。たとえば、D3 = "no"の場合、行D4:D10を非表示にしますが、これを何度も繰り返す必要がありますが、非表示にする行の数は変更されます。したがって、D3 = "yes"の場合は非表示にしてください。その後、D5 = "いいえ"の場合、行D6:D7を非表示にします。そしてこれはずっと続いています。値に基づいて行を表示および非表示にする

+3

このサイトからWorksheet_ChangeおよびHiddenを検索してください。 – Jeeped

答えて

0

イベントの使用worksheet_change()イベントを使用します。 VBEで、この変更(このセル)が発生するワークシートをダブルクリックします。そして、次のように入力します

Private Sub Worksheet_Change(ByVal Target As Range) 

    'Detect if the worksheet change was on cell D3 
    If Not (Intersect(Target, Range("D3")) Is Nothing) Then 
     'Hide rows if the value of D3 is "No" 
     Range("D4:D10").EntireRow.Hidden = (Range("D3").Value = "No") 
    End If 
End Sub 

変更は変更がセル「D2」で発生した場合には、このサブルーチンがオフに発火するワークシート、テストで発生するたびに、その値に基づいて行の隠し財産を切り替えます。 EntireRow範囲オブジェクトの

HiddenプロパティがTrueまたはFalse値をとるので、我々はちょうど大幅にコードをあなたの量を簡素化TrueFalseを返します条件文(Range("D3").value = "No")の結果にそれが等しくなるように設定することができます書く必要があります。

If Not (Intersect(Target, Range("whatever")) Is Nothing) Then行を追加して、D5のような他のセルをテストし、そのセルでテストしている値に基づいて適切な行を非表示にするだけです。

それはあなただけのように一度交差をテストすることができます(すべてのそれらの交差をテストする)あまりにも多くのコードであることを取得する場合:この獣は、任意の変更は、このワークシートに行われている任意の時間を起動しますので、

If Not (Intersect(Target, Union(Range("D3"), Range("D5"), Range("D8"))) Is Nothing) Then 
    'And then in here your individual lines that toggle the hidden property: 
    Range("D4:D10").EntireRow.Hidden = (Range("D3").Value = "No") 

    Range("D6:D7").EntireRow.Hidden = (Range("D5").Value = "No") 

    ... 
End If 

最後にサブルーチンの実行中にイベントの起動を停止することができます。だから、サブルーチンの先頭にenableEventsをオフにして、最後にオンに戻すこと:

Private Sub Worksheet_Change(ByVal Target As Range) 

    Application.EnableEvents = False 

    If Not (Intersect(Target, Union(Range("D3"), Range("D5"), Range("D8"))) Is Nothing) Then    
     Range("D4:D10").EntireRow.Hidden = (Range("D3").Value = "No")  
     Range("D6:D7").EntireRow.Hidden = (Range("D5").Value = "No") 
     Range("D9:D12").EntireRow.Hidden = (Range("D8").Value = "No")  
    End If 

    Application.EnableEvents = True 

End Sub 

これは、それ自体、それはシートを変更無限ループを引き起こし、エクセルをロック忙しいながらによって呼び出されたばかり、この同じサブルーチンを防ぐことができます(あなたがそれを発射する前にブックを保存しなかった場合には、それはうんざりです)。

+0

フィードバックいただきありがとうございます。私は上記のコードを使用してみましたが、残念ながらそれは私のためには機能しませんでした。私はD3に "いいえ"があるときにランを押すが、その下の行は隠されていない。 – Maddie

+0

実行を押すことはありません。ワークシートが変更されると、このworksheet_changeイベントコードが自動的に実行されます。コードがモジュール内ではなく、ワークシートのコード内にあることを確認してください(VBEのVBAプロジェクトペインでワークシートをダブルクリックして) – JNevill

+0

ワークシート内にあることを確認しましたが、何も起こっていません。 – Maddie

関連する問題