[[20240505214429]] 『VBAで列を表示非表示にしたい』(初心者) ページの最後に飛ぶ

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

 

『VBAで列を表示非表示にしたい』(初心者)

あるサイトで、列を非表示・再表示のマクロがありました。
しかし、1列のみでした。
希望としては複数列をしたいのですが、やり方がわかりません。
どなたか教えていただけますか?

Sub HideShow_Columns()

 Dim i As Long

 i = 3     '[i]列目を表示/非表示にする

 If Columns(i).Hidden = False Then  'もしも[i]列目が表示されていれば
  Columns(i).Hidden = True  '非表示にする
 Else
  Columns(i).Hidden = False  '表示にする
 End If

End Sub

複数の場合2つ要望がります
?@  C列からE列を非表示・再表示
?A  F列からG列、J列からM列を非表示・再表示

よろしくお願いいたします。

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


 (2)のほうだけ回答します。(1)も同じようにトライしてみて下さい。
 Sub test()
     Dim k As Long
     For k = 6 To 13
         If k <> 8 And k <> 9 Then
             Columns(k).Hidden = Not Columns(k).Hidden
         End If
     Next
 End Sub

 #なお、丸囲み文字は文字化けするので使用しないで下さい。

(xyz) 2024/05/05(日) 22:06:42


ありがとうございました。
Sub 科学()
 Dim k As Long
     For k = 9 To 29
         If k <> 11 And k <> 12 Then
             Columns(k).Hidden = Not Columns(k).Hidden
         End If
     Next
End Sub
上記内容を  マクロボタン1に指定して使用できました。
しかし、
マクロボタン2に下記内容を設定するとエラーが生じます。なぜでしょうか・・・
Sub 栄養()
 Dim k As Long
     For k = 9 To 29
         If k <> 13 And k <> 14 Then
             Columns(k).Hidden = Not Columns(k).Hidden
         End If
     Next
(初心者) 2024/05/05(日) 22:41:31

すいません。モジュール1に
Sub 科学()
 Dim k As Long
     For k = 9 To 29
         If k <> 11 And k <> 12 Then
             Columns(k).Hidden = Not Columns(k).Hidden
         End If
     Next
End Sub

モジュール2に
Sub 栄養()

 Dim k As Long
     For k = 9 To 29
         If k <> 13 And k <> 14 Then
             Columns(k).Hidden = Not Columns(k).Hidden
         End If
     Next
End Sub

入れれたらエラーは無くなったんですが、ボタンが反応しません。
教えていただけないでしょうか?
(初心者) 2024/05/05(日) 22:47:36


 Sub 栄養()
     Dim k As Long
     Stop              '仮に入れておく
     For k = 9 To 29
       '以下略
 として、途中で止まるか確認して下さい。
 とまらないなら、マクロの登録がうまくいっていないということです。
 もう一度操作を確認して下さい。

(xyz) 2024/05/05(日) 22:57:06


 ちなみに、それらの列の表示非表示はすべて同じなら、
 Columns("I:L").Hidden = Not Columns("I:L").Hidden
 のような書き方をすればよく、一列ずつ繰り返す必要はありません。
(xyz) 2024/05/05(日) 23:01:25

それだと動きません。
先ほどのだと、ボタンにマクロを設定しなければ、実行すれば作動します。
ただ、ボタン1、ボタン2にそれぞれマクロを記録すると作動しない状況です。

列は、異なりますが非表示・表示するのは同じです。
1列ずつ繰り返す必要がないとは、どういうことでしょうか?
教えていただけますか・・・

(初心者) 2024/05/05(日) 23:05:19


 ・それらのマクロは標準モジュールに書いてあり、
 ・フォームコントロールのコマンドボタンに登録したのですね?
 それなら動作するはずです。
 マクロのボタンへの登録は基本的なことなので、テキストを参照しながら、よく確認して下さい。

 質問事項についてですが、
  (1)
    Columns("I:L").Hidden = Not Columns("I:L").Hidden
  (2)
    Dim k
    For k = 9 To 12
        Columns(k).Hidden = Not Columns(k).Hidden
    Next
  は、まったく同じ動作をするということです。

  ただし、そもそも例えばI列とJ列の表示状態が異なるという状態から出発するなら、結果は違ってきます。
  ・4列とも同じ状態にして、反転させるなら(1)のようにする必要があります。
  ・各列ごとに表示非表示を反転するなら   (2)のようにする必要があります。

  以上とさせてください。

(xyz) 2024/05/05(日) 23:17:30


 > (2)F列からG列、J列からM列を非表示・再表示

 全ての列の表示状態がすべて同じ場合

 Sub Test1()
    With Range("F:G,J:M").Columns
        .Hidden = Not .Hidden
    End With
 End Sub

 列の表示状態がそれぞれ異なるとき

 Sub Test2()
    Dim col As Range
    For Each col In Range("F:G,J:M").Columns
        col.Hidden = Not col.Hidden
    Next
 End Sub

(hatena) 2024/05/06(月) 00:16:51


コメント返信:

[ 一覧(最新更新順) ]


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