列の表示/非表示をコントロール

こちらに寄せられたご意見に着想を得て、このようなものを作成してみました。

↓ コメントをいただいたブログ
infoment.hatenablog.com

↓ 作ってみた

f:id:Infoment:20180711192242p:plain

Private Sub CommandButton1_Click() ' 閉じるボタン
    Unload Me
End Sub

Private Sub CommandButton2_Click() ' 全非表示ボタン

    Dim myFlag  As Boolean
    Dim i       As Long
    
    Select Case CommandButton2.Caption
        Case "全表示"
            myFlag = False
            CommandButton2.Caption = "全非表示"
        Case "全非表示"
            myFlag = True
            CommandButton2.Caption = "全表示"
    End Select
    
    Range("A:" & getColumnLetter(100)).EntireColumn.Hidden = myFlag
    For i = 0 To ListBox1.ListCount - 1
        ListBox1.Selected(i) = myFlag
    Next

End Sub

Private Sub ListBox1_Mouseup(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim i As Long
        Columns.Hidden = False
        For i = 1 To ListBox1.ListCount
            Columns(i).Hidden = ListBox1.Selected(i - 1)
        Next
End Sub

Private Sub UserForm_Initialize()
    Dim seq(1 To 100) As Variant
    Dim i As Long
    Dim j As Long
    
    j = 0    
    For i = 1 To 100
        ListBox1.AddItem StrConv(getColumnLetter(i) & "列(" & i & "列)", vbWide)
        If Columns(i).Hidden = True Then
            ListBox1.Selected(i - 1) = True
        Else
            j = j + 1
        End If
    Next
    
    If j = 100 Then
        CommandButton2.Caption = "全非表示"
    Else
        CommandButton2.Caption = "全表示"
    End If
End Sub

' akashi-keirin さんから紹介いただいた関数を使用
' http://akashi-keirin.hatenablog.com/entry/2017/08/27/171615

Public Function getColumnLetter(ByVal columnNumber As Long) As String
On Error GoTo errorHandler
  Dim Sh As Worksheet
  Set Sh = ActiveSheet
  Dim tmpStr As String
  tmpStr = Sh.Cells(1, columnNumber).Address
  Dim tmpArray As Variant
  tmpArray = Split(tmpStr, "$") 
  getColumnLetter = tmpArray(1)
  Exit Function
errorHandler:
  getColumnLetter = ""
End Function

なお、今回リストボックスに列符号を表示させる部分について、
akashi-keirin さんから紹介いただいた関数を使用しました。
ありがとうございます。

akashi-keirin.hatenablog.com

注意点として、ListBox1.MultiSelect を fmMultiSelectMulti にしています。これを設定しておくと、複数の項目を選択できるようになります。
また、通常業務として使用するのはこの程度だろうということで、最大100列で決め打ちしています。

使い方:リストボックス内の列名をクリック

  • 選 択 ⇒ 選択列非表示
  • 非選択 ⇒ 非選択列表示

となります。

f:id:Infoment:20180711224907p:plain

今回のユーザーフォームは、定型業務で使用するには少々大げさかな?と思います。汎用的な表示/非表示の切り替えには、有効かもしれません。

参考まで。