セルに入力したブック名でそのブックを開くには?

Question 14.3 Previous Next
はじめまして。いつも貴殿のホームページは大変わかりやすく、仕事に重宝しております。

さて、お聞きしたいのですが、あるセルに入力したブック名でそのブックを開くようなマクロを、作りたいのですが・・・・・
そのことにより、ブックの内容を表示したリストから、呼び出したいブック名をセルに入力することで、すぐに開くことができるからです。 よろしくお願いします。
Answer   Copyright (C) 1999.1.14 永井善王
あなたがお使いのエクセルのバージョンが不明のため、95と97に共通するマクロで、お答えします。

質問にある「ブックの内容を表示したリスト」と、「ブック名を入力するセル」とが、別々のシートにあった場合でもマクロは組めますが、回答をわかりやすくするために、下図のデザインのシートを作ってみました。

入力シート1 「開きたいブック名を入力するセル」は、B2とします。
A2からC5が「ブックの内容を表示したリスト」です。
回答用のサンプルのため、行数が3行しかないですが、増えてもマクロには影響ありません。
A列の整理No.については後で、説明します。

マクロのポイントとしては、
    (1) B1セルの値を使ってブックを開く方法
    (2) 表示したリストのブックが、すべて同じフォルダーにあるかどうか
    (3) 同様に、同じドライブにあるかどうか
    (4) ブック名入力後にマクロを簡単に実行する方法、 くらいでしょうか。

(1) については、このHPの「Macro」の「開始・終了」の[応用型]のページに載っている「
開始処理
と、「値の出入」の[基本型]のページの「
セルの値を取り出す」を組み合わせて作ればよいでしょう。

(2)と(3)については、すべて同一とします。

このケースを当てはめてみると、マクロは下記のとおりになりますね。
Sub セルに入力したブック名のブックを開く()
    ブック名 = Cells(1, 2)                      'B1セルの値を取り出す 
    Workbooks.Open FILENAME:=ブック名 & ".xls"  '指定されたブックを開く
End Sub
以上で質問への回答としては終りです。
ですが、ポイント(4)と整理No.についても、考えておきたいですね。
あなたは十分おわかりかと思いますが、参考のために以下に書いておきます。

ユーザーが行う操作を考えると、B2セルにブック名を入力した後、メニューバーの「ツール」から「マクロ」をクリックし、「マクロの実行」ダイアログからマクロ名を選んで「開始ボタン」を押す、と なります。 ・・ わずらわしいですね。

入力シート2 ワークシート上に、右図のようにコマンドボタンを作っておいて、上記のマクロをボタンに登録しておきましょう。

ユーザーは、ボタンを押すだけの操作で済みます。

だんだん欲が出てきました。
ブック名の入力の代わりに、整理No.を使えないでしょうか?
この例のようにブック名が短ければ、大きな入力負荷にはならないでしょうが、整理No.の入力だけで済むなら、負荷もミスも少なくなるでしょう。
そのためには、下図のようにVLOOLUP関数を使えば、整理No.からブック名を取り出すことができます。
入力シート2
上記のマクロは、ブック名を B1セルから取り出すようになっていますので、D1セルに書きかえる必要があります。

D1セルを使いたくない(ユーザーに見せたくない)場合は、VLOOLUP関数をマクロの中に組み込むことも可能です。

くわしい説明は省略しますが、興味のある方は、このHPの「Macro」の「サンプルマクロ」のページに載っている 「
1)受信データ自動編集」の中で使っているので、研究してみてください。

場合によっては、このHPの「Gallery」の「索引メニュー」のページに載っている「
共用資料の索引」のように、「ブックの内容を表示したリスト」をリストボックスとして表示して、ユーザーがそのリスト上でクリックするだけで、希望のブックを開くようにすることも可能と思います。

 

Excel VBA Macro