2016-11-25 10 views
1

これは私を怒らせてしまったので、あなたのうちの1人が私が間違っていることを教えてくれるでしょう。VBA範囲1列で他の列を表示/非表示にする

私がしたいのは、列Iのセルに値「Y」が含まれていて列Jが非表示になっている場合です。任意のセルからYを削除すると、列Jが再び表示されます。ここで

は私のコードです:

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim rng As Range 
Set rng = Range("I:I") 
Set cell = rng.Find(What:="Y") 
If cell Is Nothing Then 
     Columns("J").EntireColumn.Hidden = True 
    Else 
     Columns("J").EntireColumn.Hidden = False 
    End If 
End Sub 

基本的にコードは絶対に何もしません。私が間違ってやったことが何の手掛かりもないので、エラーを出す以上に悩まされる。

+0

このコードがある場合は?ワークシートに添付されていますか? – Floris

答えて

0

これが働くものです...

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cell As Range 

Columns("I:I").Select 
Set cell = Selection.Find(What:="Y", After:=ActiveCell, LookIn:=xlFormulas, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False) 

If cell Is Nothing Then 
    Columns("J").EntireColumn.Hidden = False 
Else 
    Columns("J").EntireColumn.Hidden = True 
End If 
End Sub 
0

を次のように試してみてくださいません、対応するシートにあなたのコードを入れて、

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim c  As Range 

    If Target.Column = 9 Then 
     With Range("I:I") 
      Set c = .Find("Y") 
      If Not c Is Nothing Then 
       Columns("J").EntireColumn.Hidden = True 
      Else 
       Columns("J").EntireColumn.Hidden = False 
      End If 
     End With 
    End If 

End Sub 
  • を、それが動作することを確実にするために、モジュール内で
  • マクロが有効になっていることを確認する
0

IYがあるかどうかをテストするワークブックにセルがある場合は、まずこのVBAを単純に保つことができます。それはまた、あなたに何が起こっているかのいくつかの光景を与える - 私はExcelがスマートであるため、ワークシート上でこれを入れて助言し、迅速VBAよりも、この計算を実行しますセルにA1

=COUNTIF(I:I,"Y") 

を次のように置きます。

現在第一に、それはあなたがブックを開いたときに、列Jが正しい状態にあるかどうかをテストするために、おそらく良いアイデアマクロ


の列Jを非表示にするかどうかを判断するために A1の値を使用することができます次のコードを ThisWorkbookモジュールに入れてください。 このコードは

Sub Workbook_Open() 
    With Me.Worksheets("Sheet1") 
     If .Range("A1").Value > 0 Then 
      .Range("J:J").EntireColumn.Hidden = True 
     Else: 
      .Range("J:J").EntireColumn.Hidden = False 
     End If 
    End With 
End Sub 
その後

は、列Iの値の変更を監視し、ワークシートのモジュールに次のコードを配置するオプションです

Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Me.Range("I:I")) Is Nothing Then 
     If Me.Range("A1") > 0 Then 
      Me.Range("J:J").EntireColumn.Hidden = True 
     Else 
      Me.Range("J:J").EntireColumn.Hidden = False 
     End If 
    End If 
End Sub 

注:このコードは変更するユーザーのために設計されていません一度に複数のセルを使用できますが、説明したように使用する場合は問題ありません。一度に複数のセルに貼り付ける場合は、これを少し変更する必要があります。

0
Private Sub Worksheet_Change(ByVal Target As Range) 
    Columns("J").EntireColumn.Hidden = WorksheetFunction.CountIf(Columns("I"),"Y") >0 
End Sub 

それとも

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Columns("I")) Is Nothing Then Columns("J").EntireColumn.Hidden = WorksheetFunction.CountIf(Columns("I"),"Y") >0 
End Sub 
関連する問題