Excel VBA 質問スレッド №2097 (未解決)

条件で列の非表示、列の表示

投稿者 : ど素人です。     投稿日時 : 2025/03/23(Sun) 12:47:53     OS : 未指定     EXCEL : 未指定
初めまして、VBA初心者です。
質問させてください。
IF分ぐらいの理解力しか有りません;
現在閉じると開くが別のボタンになっているので出来たら1つのボタンで閉じる開くをしたいです。

C~100列ぐらいで2行目以降全ての行が0又は0:00の場合その列を非表示する。
うまくいかず教えていただけたらなと思います。

Sub ボタン1_Clic()
Dim j As Long, n As Long
j = 10
n = 2
Do While Cells(j, n).Value <> ""
With Cells(j, n)
If .Value = 0 Then
.EntireColumn.Hidden = True
End If
End With
n = n + 1

Loop

  
End Sub

スポンサーリンク
[返信 1] Re : 条件で列の非表示、列の表示
投稿者 : ど素人     投稿日時 : 2025/03/23(Sun) 13:29:05
現在合計わざわざ出しているので合計をしなくとも、列を非表示にしたいです。

表示   非表示      表示
0     0:00     1
0     0:00     0 
2     0:00     9 
0     0:00     0
0     0:00     0

[返信 2] Re : 条件で列の非表示、列の表示
投稿者 : ネイバー     投稿日時 : 2025/03/23(Sun) 14:00:47
>Cells(j, n)

に数式が入っているかで変わるし
="" をコピペした場合でも変わるかと
でなければ、これかな

MsgBox IsEmpty(Range("A1").Value)

[返信 3] Re : 条件で列の非表示、列の表示
投稿者 : ど素人     投稿日時 : 2025/03/23(Sun) 15:45:48
■[返信 2] ネイバーさん(2025-03-23 14:00:47)の記事
> >Cells(j, n)

> に数式が入っているかで変わるし
> ="" をコピペした場合でも変わるかと
> でなければ、これかな

> MsgBox IsEmpty(Range("A1").Value)


ネイバーさん
お返事ありがとうございます。
数式は入っておらず落としたデーターをマクロ有効ブックに貼り付けて
実行したいと考えております。

[返信 4] Re : 条件で列の非表示、列の表示
投稿者 : てらてら     投稿日時 : 2025/03/24(Mon) 06:15:59
こんにちは。

列を合計する方法は悪くないと思います。
とりあえず、列を隠すところまで、参考にしてみてください。

Sub macro()
    
    Dim col As Long, row As Long
    Dim result As Double
    Dim lastRow As Long
    lastRow = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).row
    
    With ActiveSheet
    For col = 3 To 100
        If .Cells(2, col) = "" Then Exit For

        result = WorksheetFunction.Sum(.Range(.Cells(2, col), .Cells(lastRow, col)))
        Debug.Print result  '確認用
        
        If result = 0 Then
            .Columns(col).Hidden = True
        End If
        
    Next col

    End With

End Sub

[返信 5] Re : 条件で列の非表示、列の表示
投稿者 : ピロリ     投稿日時 : 2025/03/24(Mon) 08:03:24
■[質問] ど素人です。さん(2025-03-23 12:47:53)の記事
> C~100列ぐらいで2行目以降全ての行が0又は0:00の場合その列を非表示する。
これは、[返信 4] てらてらさんからナイスな案が出ているので、割愛させていただきます。
(同じようなコードを書いても仕方ないので・・・ )

> 現在閉じると開くが別のボタンになっているので出来たら1つのボタンで閉じる開くをしたいです。
パブリック変数を設け、表示中か/非表示中かを判断してはどうでしょう? 下のような感じで・・・

Public Hidden_Mode As Boolean

Sub ボタン1_Clic()
    
    If Hidden_Mode = True Then                              '非表示中の場合は、
        Hidden_Mode = False                                 'モードをFalseにして、
        ActiveSheet.Cells.EntireColumn.Hidden = False       '全列を再表示
        Exit Sub                                            '処理終了
    Else                    '全列表示中の場合は、
        Hidden_Mode = True  'モードをTrueにして、「合計が0の列を非表示にする処理」へ
    End If
    
    '合計が0の列を非表示にする処理:てらてらさんのコードを参考にすると良いでしょう。
    ' Call macro      '★ for test
    
End Sub

[返信 6] Re : 条件で列の非表示、列の表示
投稿者 : hatena     投稿日時 : 2025/03/24(Mon) 18:24:19
数値にマイナス値がなければてらてらさんとピロリさんの回答でいいと思います。

もし、マイナス値が存在する可能性がある場合は、CountIfで0以外をカウントする方法がいいと思います。

非表示/表示の切り替えは、SpecialCells(xlCellTypeVisible)を使って非表示セルがあるかどうか判断する方法を採用しました。


ボタンに下記のマクロを割り当ててください。


Public Sub ColShowToggle()
    Dim rng As Range, col As Range, cnt As Long
    Set rng = Intersect(Cells(1, 1).CurrentRegion, Range("2:" & Rows.Count))
    
    On Error Resume Next
    cnt = rng.SpecialCells(xlCellTypeVisible).Columns.Count
    On Error GoTo 0
    If cnt = rng.Columns.Count Then
        For Each col In rng.Columns
            If WorksheetFunction.CountIf(col, "<>0") = 0 Then
                col.EntireColumn.Hidden = True
            End If
        Next
    Else
        rng.EntireColumn.Hidden = False
    End If
End Sub

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-03 13:34:26 )
タイトルとURLをコピーしました