[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定の列以外の列をすべて非表示』(茉優)
こんにちは、教えてください。
VBA初心者です。
VBAを使ってユーザーフォームに、不要な列を非表示にするボタンを作成しました。
Range("A:A,C:D,G:I,L:L,N:T,V:AM,AP:AX,AZ:BB").EntireColumn.Hidden = True
ユーザーフォームを起動して、非表示にさせたいエクセル表をアクティブにしてボタンを使用しているのですが、このエクセル表は不定期で列が増えたり減ったりします。増減する列は全て非表示にさせたい列で、表示させておきたい列が増減することはありません。なので、指定の列以外の列をすべて非表示にするというやり方に変えたいです。表示させたい列は15列あります。
このように書けば良いよというものを参考に教えていただけないでしょうか。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
一度 Columns.Hidden = True で前列非表示にしてから必要な列のみHiddenをFalseにしてはどうか? (ねむねむ) 2019/02/05(火) 13:27
Sub Sumple() Dim Hcol As Range For Each Hcol In Range("A1").CurrentRegion.Columns Select Case Hcol.Column Case 2, 4 , 6 , 8 '←ここに残したい列番号を入れる Case Else: Hcol.EntireColumn.Hidden = True End Select Next End Sub
(TAKA) 2019/02/05(火) 13:36
TAKA様
回答ありがとうございます。
追加で質問させて下さい。VBAを入れるエクセルのSheet2のB列に列名(アルファベット)を入れておき、そこのアルファベットを列番号に変換したものをVariant変数に格納したいと思っています。
Dim d as Variant
'列名→列番号に変換 With ThisWorkbook.Sheets(2) For i = 2 To .Cells(Rows.Count, 1).End(xlUp).row c = .Range("B" & i).Value If IsEmpty(d) Then d = .Range(c & "1").Column Else d = d & "," & .Range(c & "1").Column End If Next i End With
>Case 2, 4 , 6 , 8 '←ここに残したい列番号を入れる
この部分を
>Case d
にするとオーバーフローでエラーになってしまったのですが、一つの変数にまとめて格納するようなやり方は可能ですか?
オーバーフローになってしまったので数を減らして動かしてみましたが、この書き方だと列番号と認識してもらえず全部の列が非表示になってしまいます。。
(茉優) 2019/02/05(火) 16:56
Dim c As Range Columns.EntireColumn.Hidden = False For Each c In Sheets("Sheet2").Cells.SpecialCells(2) Columns(c.Value).EntireColumn.Hidden = True Next c End Sub
(mm) 2019/02/05(火) 17:31
それなら 一回表全体を非表示にしてから Sheet2のB列に書いてあるアルファベットの列だけ再表示する
と考えた方が簡単だと思います。
Sub Sumple3() Dim i As Long, S1 As Worksheet, S2 As Worksheet, c As String Set S1 = ThisWorkbook.Sheets("Sheet1") Set S2 = ThisWorkbook.Sheets("Sheet2")
S1.Range("A1").CurrentRegion.EntireColumn.Hidden = True For i = 1 To S2.Cells(S2.Rows.Count, "B").End(xlUp).Row c = S2.Cells(i, "B").Value S1.Range(c & "1").EntireColumn.Hidden = False Next i End Sub (TAKA) 2019/02/05(火) 17:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.