
Microsoft ExcelでVBAプロシージャを実行する方法はたくさんあります。シートレベルでマクロボタンを追加したり、リボンにカスタムグループとして追加したりできます。複数のプロシージャがある場合は、データ入力規則コントロールでそれらの選択肢を提供すると便利です。そうすることで、シートレベルでタスクを選択できるようになります。この手法を使えば、単純な保存タスクから、動的な範囲のコピーや高度なフィルターの実行といったより複雑なタスクまで、あらゆるタスクを実行できます。
このチュートリアルでは、VBAイベントプロシージャを実行するデータ入力規則コントロールを挿入する方法を説明します。VBAに詳しくなくてもご安心ください。詳細な手順を説明しますが、Excelの基本スキルは必須です。このチュートリアルでは、「マクロ」ではなく「プロシージャ」という用語を使用します。厳密にはマクロとプロシージャは同じではありませんが、この2つの用語は同じ意味で使用されていることに気づくでしょう。Microsoftでも同様です。
Windows 10 64ビットシステムでMicrosoft 365を使用していますが、以前のバージョンのExcelも使用できます。Web版ExcelはVBAプロシージャをサポートしていません。このチュートリアル用の.xlsmデモファイルとサンプルの.clsファイルをダウンロードできます。
参照: Excel 会計システムの起動方法 (TechRepublic Academy)
Excelにデータ検証コントロールを埋め込む方法
まず、データ検証コントロールを作成し、いくつかのタスク名を入力します。これをご自身の作業に適用する場合は、まずイベントプロシージャを作成するのが良いでしょう。どちらの方法を採用しても構いません。
ドロップダウンリストに2つの項目を追加しますが、もっと多くの項目を追加できます。それでは、データ検証コントロールを挿入しましょう。図Aに示すシンプルなデモシートを使用して、B2をクリックします。お好みでご自身のファイルを使用したり、別のセルを選択したりしても構いません。実際のVBAコードは適宜更新してください。ユーザーがコントロールをすぐに見つけられるように、書式設定を追加しました。
図A

「データ」タブをクリックし、「データツール」グループの「データの入力規則」をクリックします。表示されるダイアログで、「許可」ドロップダウンから「リスト」を選択します。ソース管理に「Say Hello,Say Goodbye」と入力します(図B)。「OK」をクリックします。
図B

図Cに示すように、ドロップダウンには入力した「タスク」が表示されています。2つの項目を区切るカンマの前後にはスペースがありません。次のステップはVBAイベントプロシージャを追加することですが、その前に、.xlsx形式を使用している場合は、マクロ有効ファイルとして保存してください。
図C

ExcelにVBAプロシージャを追加する方法
ドロップダウンでどちらかの項目を選択しても、今のところ何も起こりません。ドロップダウンでいずれかの項目を選択したときに実行されるイベントプロシージャを追加する必要があります。まず、「開発」タブの「コード」グループで「Visual Basic」オプションを選択し、Visual Basic Editor (VBE) を開きます。左側のプロジェクトエクスプローラーで、Sheet 1 をダブルクリックします。コントロールはSheet 1 にあるため、シートレベルモジュールを使用しています。他のシートからはアクセスできません。図 Dに示すように、リスト Aを入力してください。
リストA
プライベートサブワークシート_Change(ByVal ターゲット範囲)
'プロシージャを実行するには、Sheet1!B2 のデータ入力規則コントロールを有効にします。
Target.Address = “$B$2” の場合
ケースターゲット.値を選択
ケース「こんにちは」
メッセージボックス「こんにちは」
ケース「さよならを言う」
メッセージボックス「さようなら」
それ以外の場合
メッセージボックス「問題が発生しました」
選択終了
終了条件
終了サブ
図D

コードは手動で入力するか、ダウンロード可能な.clsファイルをインポートできます。また、ダウンロード可能な.xlsmファイルにも手順が記載されています。コードを手動で入力する場合は、このウェブページから貼り付けないでください。代わりに、コードをテキストエディタにコピーし、Sheet1モジュールに貼り付けてください。そうすることで、エラーの原因となる可能性のあるWeb上の不要な文字が削除されます。
VBAは、シートに変更を加えるたびにこのイベントプロシージャをトリガーします。そのため、非常に多くのデータを含むワークシートで使用すると、処理速度が若干低下する可能性があるため、少しリスクがあります。ただし、この場合は特に問題はありません。
イベントプロシージャはトリガーされると、現在のセル(ターゲットセル)をチェックします。B2でない場合は処理を続行せず、IFステートメントでフローを停止します。
SELECT CASE 文を使うと、異なる条件で値をチェックできます。この例では、Target の値(B2)をチェックします。値が「Say Hello」というテキストと等しい場合、メッセージボックスに「Hello」という単語が表示されます。Target の値が「Say Goodbye」の場合、メッセージボックスに「Goodbye」という単語が表示されます。
CASE ELSE句は、何か他の事態が発生した場合に備えて用意されています。「問題が発生しました」と表示されます。これをご自身の作業に適用する場合は、より意味のあるテキストを追加したり、エラー処理ルーチンを実行したりすることをお勧めします。ちなみに、この単純な手順にはエラー処理がないため、ご自身の作業に適用する際には、その点について考慮する必要があります。
何を期待するかがわかったので、試してみましょう。
Excelのデータ入力規則コントロールを使用してイベントプロシージャを実行する方法
データ検証コントロールを使ってイベントプロシージャを実行するのは簡単です。ドロップダウンをクリックし、項目を1つ選択するだけです。さあ、そうしましょう。最初の項目「Say Hello」を選択してください。図Eに示すメッセージボックスが表示されます。
図E

数式バーに選択された項目のテキストが表示されていることに注意してください。これは、検証コントロールによって項目がB2に入力されるため、コードで選択された項目を確認できるからです。メッセージボックスを閉じて、もう一度試してください。今度は「Say Goodbye」を選択すると、図Fに示すメッセージが表示されます。数式バーのテキストが「Say Goodbye」になっていることに注目してください。
図F

もう一度試してみましょう。今回は内容を削除します。そうするとイベントプロシージャがトリガーされ、CASE ELSE句が評価され、図Gに示すメッセージが表示されます。
図G

手順が実行されない場合は、信頼設定をチェックして、次のように手順が有効になっていることを確認してください。
- [ファイル]タブをクリックします。
- 左側のペインで [オプション] をクリックします。
- [セキュリティ センター] をクリックし、[セキュリティ センターの設定] をクリックします。
- 左側のペインで、「マクロ設定」をクリックします。
- 必要に応じて、「通知オプション付きでVBAマクロを無効にする」をクリックします。この設定により、プロシージャはブロックされますが、状況に応じて有効になります。
コードは意図的にシンプルにしていますが、このテクニックを実際に適用すると、おそらくより複雑になるでしょう。焦点となるのは、イベントプロシージャをトリガーするデータ検証の設定です。このテクニックで本当に必要なのは、まさにこの部分です。シンプルでありながら、あまり知られていません。