2

これが私が持っているものです。列を非表示にするために、3 つの値のドロップダウン リストを使用しています。各値には固有の特定の列があり、値が選択されると、それに関連付けられていない他の列を非表示にする必要があります。

次のコードを使用しました。

Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case Target.Value
    Case "Marine"
        Columns("T:X").EntireColumn.Hidden = True
        Columns("Z").EntireColumn.Hidden = True

    Case "Inland"
        Columns("S").EntireColumn.Hidden = True
        Columns("U").EntireColumn.Hidden = True

    Case Else
        Columns("T:X").EntireColumn.Hidden = False
        Columns("Z").EntireColumn.Hidden = False
        Columns("S").EntireColumn.Hidden = False
        Columns("U").EntireColumn.Hidden = False
    End Select
 End Sub

これは、ドロップダウンから値を選択すると機能しますが、ワークシートの別のセルをクリックするとすぐに、非表示の列が再び表示されます。ドロップダウンで値を選択できるようにし、ドロップダウンで別の値を選択するまでセルを非表示のままにしたいと考えています。誰でもこれで私を助けることができますか?私は使用しようとしましWorkSheet_SelectionChangeたが、これは機能しません。

4

4 に答える 4

2

コードを Target.Address でラップします。

たとえば、ドロップ ダウンがセル "B2" にある場合、コードは次のようになります。

If Target.Address(True, True) = "$B$2" Then
    Select Case Target.Value
    Case "Marine"
        Columns("T:X").EntireColumn.Hidden = True
        Columns("Z").EntireColumn.Hidden = True

    Case "Inland"
        Columns("S").EntireColumn.Hidden = True
        Columns("U").EntireColumn.Hidden = True

    Case Else
        Columns("T:X").EntireColumn.Hidden = False
        Columns("Z").EntireColumn.Hidden = False
        Columns("S").EntireColumn.Hidden = False
        Columns("U").EntireColumn.Hidden = False
    End Select
End If

さらに、コードの目的を推測して、さらに微調整しました。簡略化されたバージョンは次のようになります。

If Target.Address(True, True) = "$B$2" Then
    Select Case Target.Value
    Case "Marine"
        Columns("S:Z").EntireColumn.Hidden = False
        Columns("T:X").EntireColumn.Hidden = True
        Columns("Z").EntireColumn.Hidden = True
    Case "Inland"
        Columns("S:Z").EntireColumn.Hidden = False
        Columns("S").EntireColumn.Hidden = True
        Columns("U").EntireColumn.Hidden = True

    Case Else
        Columns("S:Z").EntireColumn.Hidden = False
    End Select
End If
于 2013-04-26T13:08:45.310 に答える
1

このコードをチェックしてください。

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Column

Case 2

    If Target.Value = "Marine" Then

        Columns("S").EntireColumn.Hidden = False
        Columns("U").EntireColumn.Hidden = False            
        Columns("T:X").EntireColumn.Hidden = True
        Columns("Z").EntireColumn.Hidden = True

    ElseIf Target.Value = "Inland" Then

        Columns("S").EntireColumn.Hidden = True
        Columns("U").EntireColumn.Hidden = True
        Columns("T:X").EntireColumn.Hidden = False
        Columns("Z").EntireColumn.Hidden = False
    Else

        Columns("T:X").EntireColumn.Hidden = False
        Columns("Z").EntireColumn.Hidden = False
        Columns("S").EntireColumn.Hidden = False
        Columns("U").EntireColumn.Hidden = False

    End If

End Select

End Sub

ケースが選択されているコードの 4 行目で、シートでドロップダウンまたは検証が有効になっている列番号の列番号を指定します。特定のケースでは、列 'B' を表す 2 です。そしてブーム!

あなたのコードでの過去の経験に基づいて、少し修正しました。海兵隊のエントリは列 'S' と列 'U' で作成する必要があり、島のエントリは列 'T:X' と 'Z' で作成する必要があると仮定します。

元のコードで、特定の行項目で最初に「Marine」を選択し、後で「Island」に修正した場合、必要なすべての列が非表示になるだけですが、Island 列が必要でした。 (おそらくこれらのフィールドにデータを入力するため) 非表示にしないように修正しました。

于 2013-04-27T16:23:51.570 に答える
1

コードの先頭にこれを追加して (調整する必要があります)、クリックされた範囲を確認し、ユーザーが特別な範囲外をクリックしたときに最終的にサブを中止します。

Dim isect As Range
Set isect = Intersect(Target, Me.Range("$a$8:$a$48"))
If isect Is Nothing Then Exit Sub

アドレスを確認することもできます。

If Target.Range Like "$X$*" Then...

更新:
一方、たとえば、列 A をクリックした場所に応じて列を表示/非表示にする必要がある場合は、むしろ SelectionChange イベントを使用します。以下にサンプルを示します。

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim isect As Range
        Set isect = Intersect(Target, Me.Range("$a$8:$a$48"))
        If Not isect Is Nothing Then
            select case Target.Value
                .....
            end select
        End If
    End Sub
于 2013-04-26T12:52:29.047 に答える
1

問題はあなたの発言だと思いますCase Else。他のセルに移動すると、ワークシートの変更イベントがトリガーされます。値が「Marine」でも「Inland」でもないため、このElseステートメントが実行され、すべての列が に設定されHidden = Falseます。

ドロップダウンには 3 つのオプションがあるためCase、キャッチオールではなく、3 番目のステートメントを明示するだけで済みます。

于 2013-04-26T12:49:03.190 に答える