VBAを実行するボタンの作り方を画像を使って紹介【簡単にVBAを実行する3つの方法】

豆父ちゃん
こんな悩みにお答えします。
結論から言うと、ボタンを作成し作成VBAを登録する!です。
作成したVBAの実行には、いろんな方法があります。
- ボタンを作成する
- ユーザーフォームを作成する
- プロシージャ(VBA作成画面)で「F5」や「F8」を押す
上記で紹介している方法は一般的なもので比較的簡単に設定することが可能です。ほかには、引数Targetを使って、セルをクリックするとVBAを実行させる方法がありますが、少し難しいのでこの記事での紹介省略しています。引数Targetの使い方については下記の記事で詳しく紹介しているので気になる方は是非チェックしてみてください。
この記事では、ボタンの作り方、ユーザーフォームの作り方、プロシージャ内で実行する「F5」や「F8」の使い分けについて紹介していきます。
VBAの実行方法はいろいろあるので、エクセルデータの用途に合わせて使い分けるようにしましょう。
VBA実行方法① ボタンによるVBAの実行
ボタンを作成し、マクロの登録をする!という方法が一番簡単で扱いやすいと思います。作成したVBAを手っ取り早く使いたい!という方におすすめです。
ボタンの作成
「開発」→「挿入」→「ボタン」をクリックします。
作成したい場所にボタンを張り付け(ドラックして大きさを調整)→「OK」
「マクロの登録」というポップが表示がされても今は考えなくてOKです。VBAを作成したあとにマクロの登録を行います。これでボタンの作成が完了です。
ボタンの作成(コマンドを登録)
「ボタン(フォームコントロール)」というコマンドをトップ画面に登録することができます。登録すると常に「ボタン(フォームコントロール)」が表示されるようになるので、すぐにボタンを作成できるようになります。
「クイックアクセスツールバーのユーザー設定」→「その他のコマンド」→「すべてのコマンド」→「ボタン(フォームコントロール)」→「追加」→「OK」の手順で設定を行います。
ボタンに登録するVBAの作成
今回は「ボタンの設定」というテキストをA1セルに入力する。という簡単なプログラムを作成しました。
ボタンに作成したVBAを登録
「ボタンで右クリック」→「マクロの登録」→「テスト」→「OK」の手順でマクロの登録は完了です。
マクロ名の表に「テスト」という項目が表示されるようになりました。これは先ほど作成したVBAのことです。プロシージャでVBAを増やしていくとマクロ名の表に自動的に表示されるようになります。
VBAの実行結果
簡単に、ボタンによるプログラムの実行が出来ました。
この方法は簡単に作ることが出来るのですが、デメリットもあります。
デメリット作ったボタンを簡単に削除することができる
行や列の挿入で「ボタン」が移動してしまう
ボタンは簡単に作成できる分、誰でも簡単に操作できてしう!というデメリットがあります。いろんな人が扱うエクセルファイルでは注意が必要です。
VBA実行方法② ユーザーフォームによる実行
そもそもユーザーフォームとはどんなものかというと、下記のようなボタンのことを言います。
ユーザーフォームには、ボタンやリスト、テキストを入力するボックスなどいろんな設定をすることができます。いろんなVBAが設定されているエクセルで見たことがある!という方が多いのではないでしょうか。
ユーザーフォームは簡単に編集することができないので、誰かに編集されたり間違って消されてしまったりする恐れがありません。私の職場ではほとんどのエクセルファイルにユーザーフォームが設定されています。
ユーザーフォームを使ってVBAを実行させるには、ユーザーフォームの表示を設定する画面を編集したり、ユーザーフォームを実行させるVBAを作成したりしなければいけません。使い慣れないうちは設定に戸惑うかもしれませんが、頑張って使い方をマスターしてみてください。
ユーザーフォームでボタンを作成
「Alt」+「F11」でVBAを開く
次に左側のプロジェクトの部分で 右クリック → 「挿入」 → 「ユーザーフォーム」 を選択
下記のような画面になります。もし下記のツールボックスが表示されていない方は、上のツールバーにあるツールボックスを選択すると表示させることができます。
右側の画面がエクセルのSheetに表示されるものです。ツールボックスの「コマンドボタン」を選択し、画面右側に登録します。
「コマンドボタン」を登録したら、「コマンドボタン」を選択した状態で、上記のアイコンを選択すると下記のような画面になります。
ユーざーフォームのボタンにVBAを登録
今回は「ユーザーフォームによる設定」というテキストをA1セルに入力する。という簡単なVBAを作成しました。これでボタンに作成したVBAの登録作業は完成です。
ユーザーフォームを表示させる設定
上記はSheet「ユーザーフォーム」を選択したとき、UserForm1(先ほど作成したユーザーフォーム)を表示させる。というプログラムです。これでユーザーフォームを表示させる設定は完了です。
VBAの実行結果
設定したユーザーフォーム動作するか試してみましょう。
上記のようにSheetをクリックするとユーザーフォームが表示され、ユーザーフォームのボタンをクリックすると作成したVBAが正常に動作しました。
ユーザーフォームの各種設定
ユーザーフォームの表示とボタンにVBAを登録することができました。しかし上記のままでは、何のためのユーザーフォームなのかわからないため仕事では使い物になりません。ボタンに名前を付けたり、ユーザーフォームが邪魔にならない大きさに編集することで、仕事でつかえるボタンにすることができます。
ユーザーフォームの様式設定
ユーザーフォームの表示内容の設定はプロパティで行うことができます。
いろんな設定項目があり、細かい調整をすることができます。私が主に調整する項目は以下の3つです。
「Height」・・・縦の大きさの変更
「Width」・・・横の大きさの変更
このプロパティはプログラムの動作に関係なく、表示されるユーザーフォームの様式が変わる!というものです。ユーザーフォームをしっかり作り込みたい!という方はいろいろ試してみましょう。
ユーザーフォームの表示位置の設定
ユーザーフォームの表示位置の設定はとても重要です。しっかり設定を行わなければユーザーフォームが画面の真ん中に表示されてしまたっり、画面の隅に見切れてしまう恐れがあります。
表示位置の設定をしっかり行うことで、パッと見てVBAをすぐに扱えるエクセルにすることができます。表示位置の設定のプログラムは下記のように行います。
ユーザーフォームのプログラムを記入する箇所に下記のVBAを追加します。
1 | Private Sub UserForm_Layout() |
2 | レイアウトプログラム |
3 | Ebd Sub |
レイアウトプログラムに .Left と .Top を使ってユーザーフォームの表示位置を指定します。数字を変えるとユーザーフォーのが表示位置がどのように変化するか試してみましょう。
上記は、UserForm.Leftの値が20のときと300のときを比較したものです。表示位置が右にずれたことがわかります。UserForm.Topの値を変化させると、表示位置を上下方向に変化させることができます。
使いやすい場所にユーザーフォームが表示されるように、LeftとTopの数字を設定しましょう。
ユーザーフームを使ったVBA実行のメリット・他人にボタンを消される心配がない
・ユーザーフォームが邪魔なとき×で閉じても、すぐに再表示可能
仕事で複数の人が扱うエクセルデータには、このユーザーフォームによるVBAの実行がおすすめです。
VBA実行方法③ 「F5」と「F8」を使ってVBAを実行
VBAを編集するプロシージャで「F5」または「F8」を押すとVBAを実行することができます。どちらのキーでもVBAを実行させることはできるのですが、2つには明確な違いがあります。
「F5」は、作成したVBAをいっきに実行するころができる。
「F8」は、作成したVBAを1行ずつ実行することができる。
という違いがあります。
「F5」で作成したVBAを実行した場合、上記で紹介したボタンによるVBAの実行と同じような結果になります。
「F8」で作成したVBAを実行した場合、プログラム1行ずつVBAが実行されるので、どのようにVBAが実行されていくかをわかりやすく観察することができます。
この実行方法は、複雑で長いプログラムを作成したときに間違いのある個所を探す(デバック)ときによく使われます。
自分しか使わないエクセルファイルで、ボタンやユーザーフォームの設定がめんどう!というときに「F5」や「F8」による実行が便利です。
いろんなVBAの実行方法【導入事例】
VBAの実行方法の設定は、直観的に見て理解できるかどうか!が重要です。エクセルを起動し画面をパッと見てVBAの実行方法がわからなければ、いくら凄いVBAを開発しても意味がありません。
スケジュール管理のために作成したエクセルカレンダーを使ってVBAの実行方法を紹介します。事例で使われているエクセルカレンダーは下記の記事でVBAの内容について詳しく紹介しています。気になる方は参考にしてみてください。
便利な機能が設定されたエクセルカレンダー
スケジュール管理を効率よくしたい!という要望から、エクセルカレンダーには3つのVBAを設定しました。
- 年度切り替えを行うVBA
- ハイパーリンクするVBA
- 簡単な予定を同期させる転記VBA
上記4つのVBAにはそれぞれ違った実行方法を設定しています。
テキストボックスに年度を入力しVBAを実行
「年 設定」というセルをクリックすると、テキストボックスが表示されます。テキストボックスに西暦で年数を入力し実行ボタンを押すとカレンダーが自動的に切り替わります。このとき、曜日、休日の背景色、うるう年(2月29日有無)の変更も同時に行われます。
年度切り替えは年に1度しか使わないから、テキストボックスは使うときだけ表示する設定にしてほしい!という要望からこのVBAの実行方法にしました。
Sheetを切り替えると転記VBAを実行
年間カレンダーと月間カレンダーのSheetを切り替えることで、簡単な予定を同期させるVBAがされます。
予定は常に最新の情報が表示されていなければいけません。そのためSheetを切り替えをする都度、転記VBAが実行される設定にしています。この実行方法を採用することで、転記VBAの実行忘れを防止することができます。
転記VBAの存在を知らない人でも扱える仕様になっています。
セルをクリックするとハイパーリンクVBAを実行
年間カレンダーの「月」をクリックすると、月間カレンダーシートのクリックした月にハイパーリンクする!という機能です。この機能では、セルをクリックするとVBAが実行する方法が使われています。
1つのシートで月間カレンダーを作成した場合、スクロールするのが大変。かといって月毎にシートを分けるのはやめてほしい!という要望があり、このハイパーリンクVBAを設定しました。
スクロールの手間を省きたい!ということなので、セルをクリックするとダイレクトにVBAが実行される方法を採用しました。使い慣れればとても便利なものだと、同僚からは好評です。
便利な機能が設定されたエクセルカレンダーは下記のサイトでダウンロードしてお使いいただくことができます。是非使ってみたい!という方は参考にしてみてください。
この記事では、VBAの実行方法について紹介してきました。中でも、ユーザーフォームを使用した実行方法はとても便利でメジャーなものですが、エクセルを日頃使わない人からは使い方がよくわからないという意見もあります。
ユーザーフォームの表示が作業の邪魔になる
ユーザーフォームを閉じてしまった
再度表示させるにはどうすればいいのかわからない
自分ではプログラムを誰でも簡単に使えるように作成することごできた!と思っていても、むしろ使いにくくなったと感じる人がいるかもしれません。そんな人の意見を取り入れながらVBAを導入しなければ、本当の効率化にはなりません。
VBAの実行方法を見直してみてはいかがでしょうか。
ディスカッション
コメント一覧
まだ、コメントがありません