[[20200530125133]] 『別シートのセル値によって非表示列を変える方法に』(あやとん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別シートのセル値によって非表示列を変える方法について』(あやとん)

こちらの掲示板で下記コードを見つけて使わせていただいてます。
このコードを別のシートのセル値によって非表示にする列を変えるにはどおしたらよいのでしょうか?
例えばシート1のA3のセルの値によって、シート2の列を非表示にするといった具合です。
(下記コードは行の非表示)

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A3")) Is Nothing Then

    Cells.EntireRow.Hidden = False
    Select Case Range("A3").Value
        Case "うさぎ"
            Range("14:20").EntireRow.Hidden = True
        Case "とり"
            Range("14:25,30:40").EntireRow.Hidden = True
        Case "条件3"
            '上記と同様に設定
        Case "条件4"
            '上記と同様に設定
    End Select
End If
End Sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


たとえば、Sheet1のモジュールで
「Range("A1")」と書いた場合、「Sheets("Sheet1").Range("A1")」と書いたとみなされる仕様です。

したがって質問の部分だけでいえば、

 Range("14:20").EntireRow.Hidden = True
        ↓
 Sheets("Sheet2").Range("14:20").EntireRow.Hidden = True

のようにすればよろしいかと思います。

また、質問とは関係ありませんが、「とり」の場合エラーになりませんか?
(試してないのでエラーにならないのであれば忘れてください)

(もこな2 ) 2020/05/30(土) 13:03


下のケースを変えれば良かったのですね!
上のコードばかり考えてました。
すいません、このコードはこちらのサイトのをそのまま貼り付けただけで実際は"とり"では私も試してないので分からないです。
ありがとうございます
(あやとん) 2020/05/30(土) 13:09

返答ありがとうございます。先程、イミディエイトで
 Range("14:25,30:40").EntireRow.Hidden = True

として、試してみましたが、エラーにならないですね。失礼しました。

(もこな2 ) 2020/05/30(土) 16:44


検証ありがとうございます。
ちなみにセル値の条件ももう一つ加えることは可能でしょうか?
A3のセルの値によってに上記の処理をしつつ
A4のセルの値によっても追加で非表示にさせたい列があります
(あっつ) 2020/05/30(土) 20:05

 参考に

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A3:A4")) Is Nothing Then Exit Sub
    Cells.EntireRow.Hidden = False
    If Target.Address = "$A$3" Then
        Select Case Range("A3").Value
            Case "うさぎ"
                Range("14:20").EntireRow.Hidden = True
            Case "とり"
                Range("14:25,30:40").EntireRow.Hidden = True
            Case "条件3"
                '上記と同様に設定
            Case "条件4"
                '上記と同様に設定
        End Select
    ElseIf Target.Address = "$A$4" Then
        Select Case Range("A4").Value
            Case "かめ"
            '何らかの処理
        End Select
    End If
 End Sub

(ピンク) 2020/05/30(土) 20:50


おかげさまで下記コードまでたどり着くことができました。
ただ、C3のセルの値で非表示にした列がC4のセルの値で非表示にする時に表示されてしまします。
C3のセルの値で非表示にした列は非表示のままC4の値によってさらに列を非表示にすることはできますか?

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C3:C4")) Is Nothing Then

   Sheets("sheet2").Cells.Columns.Hidden = False
   Sheets("sheet3").Cells.Columns.Hidden = False
   If Target.Address = "$C$3" Then
    Select Case Range("C3").Value

    Case "うさぎ"
      Sheets("sheet3").Columns("AS:CF").Hidden = True
    Case "とり"
      Sheets("sheet3").Columns("BM:CF").Hidden = True

    End Select
    ElseIf Target.Address = "$C$4" Then
      Select Case Range("C4").Value
    Case "かめ"
           Sheets("sheet2").Columns("E:I").Hidden = True
           Sheets("sheet2").Columns("K:L").Hidden = True
           Sheets("sheet3").Columns("AO").Hidden = True
           Sheets("sheet3").Columns("AS:AW").Hidden = True
           Sheets("sheet3").Columns("AY").Hidden = True
           Sheets("sheet3").Columns("BC:BG").Hidden = True
           Sheets("sheet3").Columns("BI").Hidden = True

    End Select

  End If
 End If
End Sub

(あっつ) 2020/05/30(土) 23:00


 では?

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C3:C4")) Is Nothing Then
        If Target.Address = "$C$3" Then
            With Sheets("sheet3")
                .Columns("AS:CF").Hidden = False
                .Columns("BM:CF").Hidden = False
            End With
            Select Case Range("C3").Value
                Case "うさぎ"
                    Sheets("sheet3").Columns("AS:CF").Hidden = True
                Case "とり"
                    Sheets("sheet3").Columns("BM:CF").Hidden = True
            End Select
        ElseIf Target.Address = "$C$4" Then
            With Sheets("sheet2")
                .Columns("E:I").Hidden = False
                .Columns("K:L").Hidden = False
            End With
            With Sheets("sheet3")
                .Columns("AO").Hidden = False
                .Columns("AS:AW").Hidden = False
                .Columns("AY").Hidden = False
                .Columns("BC:BG").Hidden = False
                .Columns("BI").Hidden = False
            End With
            Select Case Range("C4").Value
                Case "かめ"
                    With Sheets("sheet2")
                        .Columns("E:I").Hidden = True
                        .Columns("K:L").Hidden = True
                    End With
                    With Sheets("sheet3")
                        .Columns("AO").Hidden = True
                        .Columns("AS:AW").Hidden = True
                        .Columns("AY").Hidden = True
                        .Columns("BC:BG").Hidden = True
                        .Columns("BI").Hidden = True
                    End With
            End Select
        End If
    End If
 End Sub

(ピンク) 2020/05/31(日) 00:25


ご教示いただいたコードを基に作成してみましたが、やはり、C3セルの値で一度非表示にした列もC4セルの値を選択すると、表示されてしまします。
何かまちがっているのでしょうか?

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C3:C4")) Is Nothing Then

   If Target.Address = "$C$3" Then
    With Sheets("sheet3")
      Sheets("sheet3").Columns("AS:CF").Hidden = False
      Sheets("sheet3").Columns("BC:CF").Hidden = False
      Sheets("sheet3").Columns("Y:CF").Hidden = False
      Sheets("shet3").Columns("AI:CF").Hidden = False
      Sheets("sheet3").Columns("BC:CF").Hidden = False

      End With
    Select Case Range("C3").Value

    Case "A事業"
      Sheets("sheet3").Columns("AS:CF").Hidden = True
    Case "B事業"
      Sheets("sheet3").Columns("BC:CF").Hidden = True
    Case "C事業"
      Sheets("sheet3").Columns("Y:CF").Hidden = True
    Case "D事業"
      Sheets("sheet3").Columns("AI:CF").Hidden = True
    Case "D事業"
      Sheets("sheet3").Columns("BC:CF").Hidden = True

    End Select
    ElseIf Target.Address = "$C$4" Then
      With Sheets("sheet2")
       .Columns.Hidden = False

      End With
            With Sheets("sheet3")
          .Columns("E:I").Hidden = False
          .Columns("K").Hidden = False
          .Columns("O:S").Hidden = False
          .Columns("U").Hidden = False
          .Columns("Y:AC").Hidden = False
          .Columns("AE").Hidden = False
          .Columns("AI:AM").Hidden = False
          .Columns("AO").Hidden = False
          .Columns("AS:AW").Hidden = False
          .Columns("AY").Hidden = False
          .Columns("BC:BG").Hidden = False
          .Columns("BI").Hidden = False
          .Columns("BM:BQ").Hidden = False
          .Columns("BS").Hidden = False
          .Columns("BW:CA").Hidden = False
          .Columns("CC").Hidden = False
          .Columns("CG:CK").Hidden = False
          .Columns("CM").Hidden = False

          .Columns("E:H").Hidden = False
          .Columns("L:M").Hidden = False
          .Columns("O:R").Hidden = False
          .Columns("V:W").Hidden = False
          .Columns("Y:AB").Hidden = False
          .Columns("AF:AG").Hidden = False
          .Columns("AI:AL").Hidden = False
          .Columns("AP:AQ").Hidden = False
          .Columns("AS:AV").Hidden = False
          .Columns("AZ:BA").Hidden = False
          .Columns("BC:BF").Hidden = False
          .Columns("BJ:BK").Hidden = False
          .Columns("BM:BP").Hidden = False
          .Columns("BT:BU").Hidden = False
          .Columns("BW:BZ").Hidden = False
          .Columns("CD:CE").Hidden = False
          .Columns("CG:CJ").Hidden = False
          .Columns("CN:CO").Hidden = False
       End With

      Select Case Range("C4").Value
    Case "うさぎ"
        With Sheets("sheet2")
           .Columns("E:I").Hidden = True
           .Columns("K:L").Hidden = True
        End With
        With Sheets("sheet3")
          .Columns("E:I").Hidden = True
          .Columns("K").Hidden = True
          .Columns("O:S").Hidden = True
          .Columns("U").Hidden = True
          .Columns("Y:AC").Hidden = True
          .Columns("AE").Hidden = True
          .Columns("AI:AM").Hidden = True
          .Columns("AO").Hidden = True
          .Columns("AS:AW").Hidden = True
          .Columns("AY").Hidden = True
          .Columns("BC:BG").Hidden = True
          .Columns("BI").Hidden = True
          .Columns("BM:BQ").Hidden = True
          .Columns("BS").Hidden = True
          .Columns("BW:CA").Hidden = True
          .Columns("CC").Hidden = True
          .Columns("CG:CK").Hidden = True
          .Columns("CM").Hidden = True

      End With
    Case "とり"
        With Sheets("sheet2")
           .Columns("E:H").Hidden = True
           .Columns("K").Hidden = True
           .Columns("M:N").Hidden = True
        End With
        With Sheets("sheet3")

          .Columns("E:H").Hidden = True
          .Columns("L:M").Hidden = True
          .Columns("O:R").Hidden = True
          .Columns("V:W").Hidden = True
          .Columns("Y:AB").Hidden = True
          .Columns("AF:AG").Hidden = True
          .Columns("AI:AL").Hidden = True
          .Columns("AP:AQ").Hidden = True
          .Columns("AS:AV").Hidden = True
          .Columns("AZ:BA").Hidden = True
          .Columns("BC:BF").Hidden = True
          .Columns("BJ:BK").Hidden = True
          .Columns("BM:BP").Hidden = True
          .Columns("BT:BU").Hidden = True
          .Columns("BW:BZ").Hidden = True
          .Columns("CD:CE").Hidden = True
          .Columns("CG:CJ").Hidden = True
          .Columns("CN:CO").Hidden = True

      End With

    End Select

  End If
 End If
End Sub

(あっつ) 2020/05/31(日) 21:49


最初のマクロのように単純にしてはだめですか。
こんな感じ。

 Private Sub Worksheet_Change(ByVal Target As Range)

 '  1)対象セル以外なら終了
    If Intersect(Target, Range("C3:C4")) Is Nothing Then Exit Sub

 '  2)最初に、いったん全て再表示

 '  3)C3の値で非表示
    Select Case Range("C3").Value

    End Select

 '  4)C4の値で非表示
    Select Case Range("C4").Value

    End Select

 End Sub

(マナ) 2020/06/01(月) 13:22


マナ様
ありがとうございます。
理想の形でできました。
こんなに短い文章でできるんですね
勉強します!

手伝ってくれた皆様もありがとうございます。

(あっつ) 2020/06/01(月) 22:28


質問とは関係ありませんが、列を指定する部分はパターンがあるようですから、列挙して書かなくても良いような気がします。

    Sub 実験()
        Dim MyRNG壱 As Range, MyRNG弐 As Range
        Dim i As Long

        With Worksheets("sheet3").Range("E1:I1,K1")
            Set MyRNG壱 = .Cells

            For i = 1 To 8
                Set MyRNG壱 = Union(MyRNG壱, .Offset(0, i * 10))
            Next

            MsgBox MyRNG壱.EntireColumn.Address(False, False)
        End With

        With Worksheets("sheet3").Range("E1:H1,L1:M1")
            Set MyRNG弐 = .Cells

            For i = 1 To 8
                Set MyRNG弐 = Union(MyRNG弐, .Offset(0, i * 10))
            Next

            MsgBox MyRNG弐.EntireColumn.Address(False, False)
        End With

        MsgBox Union(MyRNG壱, MyRNG弐).Address(False, False)

    End Sub

(もこな2) 2020/06/02(火) 19:17


もこな2様

ありがとうございます!
こちらも少ない文で綺麗ですね!

こっちでも1度試してみたいと思います!
(あっつ) 2020/06/02(火) 19:37


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.