|
それだけのためにユーザーフォームを用意するのは、ちょっと大げさだしファイルも
重くなってメリットが少ないですね。私ならセル右クリックイベントを使って、
フォームのリストボックスを出す仕組みにします。
↓対象シートのシートモジュールへ
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個のセルを選択して」右クリックしてみて下さい。
ボタンとリストボックスが出てきます。リストボックスはマルチセレクト出来ます
から、非表示にしたい月を複数選択してボタンを押すだけです。選択解除したい
場合は、もう一度その月をクリックします。何も選択しないでボタンを押すと、
非表示になっている月の列が全て表示され、終わります。一回の処理ごとにボタンと
リストボックスを削除しますから、ブック内に残らずファイルサイズを肥大させる
こともありません。とても軽いシステムになってます。
|
|