| 
    
     |  | それだけのためにユーザーフォームを用意するのは、ちょっと大げさだしファイルも 重くなってメリットが少ないですね。私ならセル右クリックイベントを使って、
 フォームのリストボックスを出す仕組みにします。
 
 ↓対象シートのシートモジュールへ
 
 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _
 Cancel As Boolean)
 Dim Lp As Single, Wp As Single, Hp As Single
 
 With Target
 If .Count > 1 Then Exit Sub
 If .Row > 1 Then Exit Sub
 Lp = .Left: Wp = .Width: Hp = .Height
 End With
 Cancel = True
 Columns("B:M").Hidden = False
 With ActiveSheet.Buttons.Add(Lp, 0.1, Wp, Hp)
 .Caption = "月を選択"
 .Font.Size = 9
 .OnAction = "Scl_MyM"
 End With
 With ActiveSheet.ListBoxes.Add(Lp, Hp + 2, Wp, Hp * 8)
 .AddItem Array("1月", "2月", "3月", "4月", "5月", _
 "6月", "7月", "8月", "9月", "10月", "11月", "12月")
 .MultiSelect = xlSimple
 End With
 End Sub
 
 ↓標準モジュールへ
 
 Sub Scl_MyM()
 Dim i As Integer
 
 If VarType(Application.Caller) <> 8 Then Exit Sub
 ActiveSheet.Buttons(1).Delete
 With ActiveSheet.ListBoxes(1)
 If IsError(Application.Match(True, .Selected, 0)) Then
 .Delete: Exit Sub
 End If
 For i = 1 To .ListCount
 If .Selected(i) Then
 Columns(i + 1).Hidden = True
 End If
 Next i
 .Delete
 End With
 End Sub
 
 *使い方
 対象シートの「1行目のみ」「1個のセルを選択して」右クリックしてみて下さい。
 ボタンとリストボックスが出てきます。リストボックスはマルチセレクト出来ます
 から、非表示にしたい月を複数選択してボタンを押すだけです。選択解除したい
 場合は、もう一度その月をクリックします。何も選択しないでボタンを押すと、
 非表示になっている月の列が全て表示され、終わります。一回の処理ごとにボタンと
 リストボックスを削除しますから、ブック内に残らずファイルサイズを肥大させる
 こともありません。とても軽いシステムになってます。
 
 |  |