2017-01-13 5 views
1

私は年中無休のシートリストを作成しています。行はさまざまなユーザーによって手動で移入され、目的は1年を通してこれらの値を記録することです。列はその年の各日に固有であるため、特定の範囲を見つけるには多くのスクロールが必要です。Excel VBA:与えられた2つの日付間の列を非表示にする

私が達成したいのは、開始日と終了日の2つの日付で塗りつぶすことができる2つのセルを持つことです。これらのセルを入力すると、他のすべての列が表示されなくなります。

特定の日付の前にあるセルを非表示にする方法が見つかりましたが、別のセルの指定した日付の後に列を非表示にする方法を組み込むのに役立ちます。この場合、セルE35は

メソッドのVBAコードは、これまでのところです:ここ

Private Sub Worksheet_Change(ByVal Target As Range) 
'Updateby Extendoffice 20160725 
    Dim xCell As Range 
    If Target.Address <> Range("E34").Address Then Exit Sub 
    Application.ScreenUpdating = False 
    For Each xCell In Range("H1:NG1") 
     xCell.EntireColumn.Hidden = (xCell.Value < Target.Value) 
    Next 
    Application.ScreenUpdating = True 
End Sub 

参照画像:Example

は、事前にありがとう// R

答えて

2
Private Sub Worksheet_Change(ByVal Target As Range) 
'Updateby Extendoffice 20160725 
    Dim xCell As Range 
    If Target.Address <> Range("E34").Address AND Target.Address <> Range("E35").Address Then Exit Sub 
    Application.ScreenUpdating = False 
    For Each xCell In Range("G1:NG1") 
    xCell.EntireColumn.Hidden = (xCell.Value < Range("E34").Value or xCell.Value > Range("E35").Value) 
    Next 
    Application.ScreenUpdating = True 
End Sub 
3

@dgortiの回答をフォローアップすると、将来的に複数の範囲のワークシートを監視する場合は、

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("E34:E35")) Is Nothing Then 
    ' perform your code hewe 

Else 
    ' you can put your Exit Sub here 
End If 

End Sub 
関連する問題