Excel VBA 質問スレッド №2097 (未解決)
条件で列の非表示、列の表示
投稿者 : ど素人です。 投稿日時 : 2025/03/23(Sun) 12:47:53 OS : 未指定 EXCEL : 未指定
初めまして、VBA初心者です。
質問させてください。
IF分ぐらいの理解力しか有りません;
現在閉じると開くが別のボタンになっているので出来たら1つのボタンで閉じる開くをしたいです。
C~100列ぐらいで2行目以降全ての行が0又は0:00の場合その列を非表示する。
うまくいかず教えていただけたらなと思います。
初めまして、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
現在合計わざわざ出しているので合計をしなくとも、列を非表示にしたいです。
表示 非表示 表示
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)
>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)
ネイバーさん
お返事ありがとうございます。
数式は入っておらず落としたデーターをマクロ有効ブックに貼り付けて
実行したいと考えております。
■[返信 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つのボタンで閉じる開くをしたいです。
パブリック変数を設け、表示中か/非表示中かを判断してはどうでしょう? 下のような感じで・・・
■[質問] ど素人です。さん(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)を使って非表示セルがあるかどうか判断する方法を採用しました。
ボタンに下記のマクロを割り当ててください。
数値にマイナス値がなければてらてらさんとピロリさんの回答でいいと思います。
もし、マイナス値が存在する可能性がある場合は、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 )