[[20260619114259]] 『条件により列も非表示したい』(ヒロ坊) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『条件により列も非表示したい』(ヒロ坊)

お尋ねします。
以下は、実際に設定しているもので、条件により行を非表示にするものです。
これに、列も非表示にしたいのです。
J116:L116のセルが0の場合は、その列(J列〜L列)を非表示にしたいというものです。
どうぞよろしくお願いします。

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

    Const pw As String = "11100"
    Dim rr As Range, r As Range
    If Intersect(Target, Range("D2")) Is Nothing Then Exit Sub
    ActiveSheet.Unprotect Password:=pw
   Set rr = Rows("21:82")
   rr.Hidden = False
   For Each r In rr.Rows
       If r.Range("N1").Value = 0 Then
           r.Hidden = True
       End If
   Next
    ActiveSheet.Protect Password:=pw
End Sub

< 使用 Excel:Excel2021、使用 OS:Windows11 >


以下では?

 Option Explicit

 Private Sub Worksheet_Change(ByVal Target As Range)

    Const pw As String = "11100"
    Dim rr As Range, r As Range

    If Intersect(Target, Range("D2")) Is Nothing Then Exit Sub

    Application.EnableEvents = False
    ActiveSheet.Unprotect Password:=pw

    Set rr = Rows("21:82")
    rr.Hidden = False

    For Each r In rr.Rows
        If r.Range("N1").Value = 0 Then
            r.Hidden = True
        End If
    Next r

    If Application.WorksheetFunction.CountIf(Range("J116:L116"), "<>0") = 0 Then
        Columns("J:L").Hidden = True
    Else
        Columns("J:L").Hidden = False
    End If

    ActiveSheet.Protect Password:=pw
    Application.EnableEvents = True

 End Sub

(稚拙) 2026/06/19(金) 11:56:02


稚拙さん、ありがとうございます。
早速、設定して実行してみたのですが、
行は非表示されますが、列は非表示になりません。
今一度、よろしくお願いします。
(ヒロ坊) 2026/06/19(金) 13:08:23

    With Rows("21:82")
        .Hidden = False
        For Each r In .Rows
            If r.Columns("N").Value = 0 Then r.Hidden = True
        Next
    End With

    ↑と同じ感じの処理にするとしたら↓こんな感じでしょうか?

    With Columns("J:L")
        .Hidden = False
        For Each r In .Columns
            If r.Rows("116").Value = 0 Then r.Hidden = True
        Next
    End With

(白茶) 2026/06/19(金) 14:09:39


白茶さん、ありがとうございます。
これは、どこの部分と差替えればよいでしょうか?
Withから始まる構文が見つけられず、、、
もしよろしければ、全体的な構文を教えていただけると助かります。
(ヒロ坊) 2026/06/19(金) 15:51:19

横からですが、差し替えでなく追加する必要がありますよ。

■1
提示のコードの主要部分だけを抜き出して整理すると↓のようになります。

    Sub 整理()
        Dim r As Range

        '▼行方向のチェック
        Stop 'ブレークポイントの代わり
        For Each r In Range("N21:N82")
            If r.Value = 0 Then
                r.EntireRow.Hidden = True
            End If
        Next
    End Sub

■2
そのうえで、列方向のチェックを加えたいということですから↓のようにすべきといわれているだけです。

    Sub 整理改()
        Dim r As Range

        '▼行方向のチェック
        Stop 'ブレークポイントの代わり
        For Each r In Range("N21:N82")
            If r.Value = 0 Then
                r.EntireRow.Hidden = True
            End If
        Next

        '▼列方向のチェック ←【こいつを追加】
        Stop 'ブレークポイントの代わり
        For Each r In Range("J116:L116")
            If r.Value = 0 Then
                r.EntireColumn.Hidden = True
            End If
        Next
    End Sub

■3
Withステートメントについては↓などで学習されたらよいとおもいます。

 【参考】
http://officetanaka.net/excel/vba/beginner/16.htm

(もこな2) 2026/06/19(金) 16:55:59


コメント返信:

[ 一覧(最新更新順) ]


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