Microsoft Excel VBA - ワークシート選択フォームを作る方法

◆概要

 ブックにシートが多数含まれている場合、シートを選択するのが困難になります。このページでは、シート選択フォームを作成し、簡単にシートを選択できるようにします。

◆ユーザーフォームの作成
 まずは、ユーザーフォームを作成しましょう。
フォームに追加するコントロールは以下のとおりです。

フォーム:UserForm1
リストボックス:ListBox1
コマンドボタン:CommandButton1

UserForm1

キャプション等はプログラムで変更するので、既定値でOK。

◆コマンドボタンのイベントプロシージャ
コマンドボタンをダブルクリックして、フォームを閉じる処理を追加します。

Private Sub CommandButton1_Click()
    Unload Me
End Sub

◆リストボタンのイベントプロシージャ
リストボックスをダブルクリックして、リストの項目が選択されたときの処理を追加します。

Private Sub ListBox1_Click()
   
    Dim Index As Integer
    Dim Buf As String
    
    Index = ListBox1.ListIndex  'ワークシートリストの選択された位置
    Buf = ListBox1.List(Index)  'ワークシート名を取得
    Worksheets(Buf).Activate
    
    ' セルA1を左上端にする
    Application.Goto Reference:=Range("A1"), Scroll:=True
End Sub

◆フォームを表示するイベントプロシージャ
 最後にフォームを表示するプロシージャを標準モジュールに作成します。

Sub ShowForm()
    Dim i As Integer
    For i = 1 To Worksheets.Count   'シート数分処理する
        If Worksheets(i).Name <> "data" Then  'シート名がdataならば表示しない
                 UserForm1.ListBox1.AddItem (Worksheets(i).Name)
        End If
    Next i
    
    With UserForm1
        .Height = 180
        .Width = 240
        .CommandButton1.Caption = "閉じる"
        ' ユーザーフォームのタイトルを設定
        .Caption = "ワークシート選択"
        ' ユーザーフォームを表示
        .Show (vbModeless)
    End With
End Sub

 上記のコードでは、「data」というシートがあれば、リストボックスに表示しないようにしています。また、フォームのタイトル、幅、高さ、コマンドボタンのキャプションを設定するとともに、Showメソッドでフォームを表示しています。Showメソッドの引数にvbModelessを指定することによって、フォームを表示したままセルの操作が可能になります。

◆実行結果
 ShowFormプロシージャにカーソルを置き、F5キーを押すとフォームが表示されます。

実行結果

リストボックスで項目をクリックすると、そのシートが表示されます。また、項目をクリックした後はキーボードの↓↑キーを押すことによって高速にシートを切り替えることができます。

◆ブックが開いたとき、フォームを表示する
 ブックが開いたとき、ShowFormプロシージャ一を実行して、フォームを表示すると便利です。
 VBAのIDEで、ThisWorkbookをダブルクリックして選択し、以下のコードを貼り付けます。

Private Sub Workbook_Open()
    Dim mySheet   As Worksheet
    
    ' ShowFormというマクロにCtrl+Shit+Sのショートカットキーを割り当てる
    Application.OnKey "+^S", "ShowForm"
    
    ' ワークシート保護
    ' ユーザーの手動操作では一部の機能を使用不可とするが、マクロからは全ての操作を使用できる
    For Each mySheet In Worksheets
        mySheet.Protect UserInterfaceOnly:=True
    Next mySheet
    ' ユーザーフォームを表示する
    Call ShowForm
End Sub

 Workbook_Open()プロシージャは、ブックが開いたときに自動実行されるマクロです。フォームを表示するだけなら、最後の行の

Call ShowForm

だけで可能ですが、 ここでは、ShowFormというマクロにCtrl+Shit+Sのショートカットキーを割り当てています。これによって一旦フォームを閉じた後でも、キーボードからCtrl+Shit+Sを押すことによって、いつでもフォームを表示させることができます。

 また、すべてのワークシートに対して保護をかけています。Protectメソッドの引数にUserInterfaceOnly:=True を指定することによって、ユーザーの手動操作では一部の機能を使用不可とし、マクロからは全ての操作を使用できるようにしています。

▼ページトップへ