リストボックスで選択する(索引メニューを作る)には?

Question 17.1 Previous Next
このホームページのGalleryの中に索引メニューというのが有りますが、これをどうやって作成すればいいのか、教えて頂きたいのですが。
始めたばかりなので何をどうしていいのか判りません。 どうか宜しくお願いします。
Answer   Copyright (C) 1999.3.10 永井善王
Galleryの索引メニューはワークシートに、リストボックスとテキストボックスそして、コマンドボタンとクリップアートを配置して作りました。リストボックスは視認性が良いので、「たくさんの資料の中から目的の資料を選び出す」というような用途に適しています。

あなたがもし、画面デザインの制作をお尋ねでしたら、エクセルの通常の使い方を説明することになるので、VBAの質問を受け付けている私の範囲外になります。 しかし、あなたが「始めたばかり」と言われるのはVBAのことと思いますので、一番知りたいと思われるリストボックスとVBAのつながりを中心に、説明します。

リストボックスを使うためには、複雑な仕掛けが必要になります。順を追って説明しますので、気合を入れて学習してください。街のパソコン教室で、このことを教えてくれるところがもし、あったとしたら、受講料はすごく高いと思いますよ。
《お断り》 以後の回答はExcel95で制作して、Excel97との相違カ所に赤字で説明を入れました。互換性確保し両方で使えます。

1. 新しいブックを作成し、ワークシート3枚と、モジュールシート1枚を作っておく。
   (ワークシートの名前と内容は、下図と同じにしておきましょう)
「管理表」シート 「メニュー」シート 「呼出」シート
>
白紙のまま
 
(次項参照) (リストボックスとマクロで使う)
(どのブックがディスクのどこにあるかを、先にまとめておく)

2. リストボックスを「メニュー」シートに作る
(1) メニューバーの「表示」から「ツールバー」「フォーム」「OK」とクリックして、フォームツールバーを映す(図は省略)

(2) フォームツールバーの「リストボックス」をクリックする
(3) 上図のように「メニュー」シート上にマウスで4角形を描くと、リストボックスが映る

(4) リストボックス上でマウスを右クリックして右図のようなショートカットメニューを映し、「オブジェクトの書式設定」をクリックする

(5) 「オブジェクトの書式設定」が映ったら、下図のとおり入力して「OK」ボタンを押す
「オブジェクトの書式設定」はエクセル95の場合、エクセル97では「コントロールの書式設定」です

3. リストボックスが上手にできたかテストする
 (1) 「メニュー」シートを選択して、リストボックスに映っている項目から、
   左図のようにクリックしてみる
 (2) 「呼出」シートのA2セルを見ると、答えが映っている。 その意味は、
   クリックされた項目が「管理表」シートの何行目にあるかを表している。
   1行少ない理由は「管理表」シートの1行目に見出し行があるため

以上がリストボックスの作り方の説明です .. ここで諦めないで .. マクロの組み方に進みましょう。

「呼出」シートのA2セルには、“クリックされた項目は「管理表」シートの何行目にある”と示されているのでしたね。
そうであるなら、「管理表」シートの示された行数の内容を調べれば、見たいブックがどのドライブの、どのフォルダーに何というブック名で入っているかが、わかります。
この例の場合は「管理表」シートの3+1(見出し)行目のB4とC4とD4セルに入っている「C」と「環境」と「kankyo3」になります。

これだけ具体的にわかれば、ぜひ頑張ってマクロに組みましょう。

4. リストボックスでクリックされた時に動作するマクロを組む
(ここでは下記のマクロをモジュールシートに写して、次へ進んでください・・後で自分でじっくりと意味を理解しましょう)
'==============================================================================
Option Explicit
Dim 行 As Integer
Dim 選択タイトル As String
Dim 選択ドライブ As String
Dim 選択フォルダー As String
Dim 選択ブック名 As String
Dim 入力範囲列 As String
Dim 入力範囲 As String
Dim リスト下端 As String
Dim リストボックス名 As String
Dim リンクするセル As String
'-----------------------------------------------------------------------------
Sub 環境リストボックスでクリックされた()
    Sheets("メニュー").Select                   'メニューシートを選ぶ
    Application.ScreenUpdating = False          '画面を更新しない
    行 = Sheets("呼出").Cells(2, 1) + 1         '呼出シートのA2セルから値を取り出す
    管理表シートから値を取り出す
    選択されたブックを開く
End Sub
'-----------------------------------------------------------------------------
Private Sub 管理表シートから値を取り出す()
    Sheets("管理表").Select
    選択タイトル = Range(Cells(行, 1), Cells(行, 1)).Value
    選択ドライブ = Range(Cells(行, 2), Cells(行, 2)).Value
    選択フォルダー = Range(Cells(行, 3), Cells(行, 3)).Value
    選択ブック名 = Range(Cells(行, 4), Cells(行, 4)).Value
End Sub.
36
'-----------------------------------------------------------------------------
Private Sub 選択されたブックを開く()
    On Error GoTo エラー処理                    'エラーが発生した時の飛び先
    ChDrive 選択ドライブ & ":"                  'ドライブを変更する
        ChDir 選択ドライブ & ":" & "\" & 選択フォルダー 'フオルダを変更する
        Workbooks.Open Filename:=選択ブック名 & ".xls", ReadOnly:=True
                                                '上書き禁止で開く
    Exit Sub                                    '正常終了なら出口へ

エラー処理:                                     'エラーが発生した時の入り口
    MsgBox "作業を中止します。原因を取り除いてから、やり直してください。", _
    vbCritical, "予期せぬエラーが発生しました ... " & Str(Err) & ": " & Error(Err)
    Application.DisplayAlerts = False           '閉じる際に確認メッセージを出さない
    Close                                       'ファイルをすべて閉じる
    Application.Quit                            'エクセルを終了する
End Sub
'==============================================================================
5. リストボックスにマクロを登録する   
(1) リストボックス上でマウスを右クリックして、右図のようなショートカットメニューを映し、「マクロの登録」をクリック


(2) 「マクロの登録」が映ったら、下図のとおり「環境リストボックスでクリックされた」をクリックし、「OK」を押す
エクセル97の画面は少し違うけど「マクロの登録」を選ぶ

これで「索引メニュー」の心臓部分が完成です。後は色付けとかクリップアートで飾ったり、あなたのセンスで工夫しましょう。

あなたのパソコンのCドライブに「環境」と名付けたフォルダーを作り、そのフォルダーの中に「kankyo3.xls」と名付けたブックを作っておけば、このマクロを実際に動かして、そのブックを開くことが可能です ... さあ、実行してみましょう!!

うまく作れなかった場合は、もし、あなたが Internet Explorer 4.0と、Excel97または95がインストールされたパソコンで、このHPを見ているのでしたら、 ここをクリック すればエクセルが起動して、サンプルブックが開きます。
サンプルブックが開いたら、[ファイル]-[名前を付けて保存]して、[ファイル]-[閉じる]で一旦終了します。

サンプルブックは、Internet Explorerから直接開いて実行すると、正しく動作しないようです。 Excel 2000 でファイル形式を変更して保存すると「不正な処理のエラー」が出る場合は、ここをクリック して見てください。

後で改めてExcel を起動し、ダウンロードしたブックを開いて、「おためしボタン」をクリックすれば、例示のシートが見れますし、マクロを動かして試せれます。この場合も事前に、Cドライブに「環境」と名付けたフォルダーを作り、そのフォルダーの中に「kankyo3.xls」と名付けたブックを作っておきましょう。

サンプルブックのマクロには、Auto_Openプロシージャを組み込んでおきました。これは、ブックが開かれたときに、リストボックスを初期表示するためのマクロです。ここでは、くわしく説明しませんが、あなたの実力の向上に合わせて解明してみてください。
サンプルブックを見終ったら、エクセルシートが映っている画面右上角の × をクリックすれば、この画面へもどれます。

Excel VBA Macro