[[20190205131218]] 『指定の列以外の列をすべて非表示』(茉優) ページの最後に飛ぶ

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

 

『指定の列以外の列をすべて非表示』(茉優)

こんにちは、教えてください。
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


Sub main()
'対象シートが表示された状態で実行
    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.