こんにちは。すたユキです。
※今回は、これまでExcel等でマクロを使ったことがないという、VBA初心者向けの内容です。
マクロを触ったことがない方にとっては、どこかハードルが高く、手をつけにくい印象があると思いますが、意外とやってみると何とかなるものです。
まずはExcelを開いて、上のメニューに開発タブがあるかの確認から見ていきましょう。
既に開発タブがある方は次の項目に進んでくださいね。
開発タブの表示
下の画像のように表示されていればOKです。
表示されていなければ、下の画像のように、
「ファイル」⇒「オプション」⇒「リボンのユーザー設定」の順にクリックし、
オプション画面を開きます。
③のように、「開発」のチェックボックスにチェックを入れます。
これで、開発タブが表示されました。
マクロ有効ブック(.xlsm)で保存する
Excelでマクロを実行するには、マクロ有効ブックで保存する必要があります。
これについてはいくつか形式がありますが、今回は広く一般的に使われるxlsm形式で保存することにしましょう。
名前を付けて保存ダイアログを開いて、ファイルの種類を上の画像のようにxlsm形式を選択します。
すると、左側のようなアイコンで保存されます。※右側が通常の形式です。
VBE(エディタ)を開いて初期設定
では、エディタを開いてみましょう。ExcelにはVBA専用のエディタであるVBEが付属しているので、何も追加インストールすることなく、マクロを作り始めることが出来ます。
開発タブを開くと、左端にVisual Basicと書かれたボタンがあります。
これをクリックすることでVBEを起動できます。
上のようなウィンドウが表示されたと思います。
さっそく作ってみよう!っと言いたいところですが、
最初におすすめの設定を紹介しておきます。
今回は、特に重要な箇所だけ紹介しますので、慣れてきたら色々試してみてください。
まずは、ツールメニューからオプション画面を開いてください。
左側が初期設定だったかと思います。これを右のように変更します。
自動構文チェックのチェックを外し、変数の宣言を強制するにチェックを入れます。
下記に簡単に説明しておきます。
なぜかデフォルトではこのチェックが外れていて、何でも宣言せずに使えてしまうので、
ちょっと誤字脱字が混じっていても何もエラーなく実行されてしまったりします。
実際にコードを書いて実行してみる
それでは、実際にコードを書いてみましょう。
Sheet1(各シート)に書くことも可能ですが、制約が多いので、
特に理由がなければ標準モジュールに書くようにしましょう。
ということで、まずは標準モジュールを追加します。
これで標準モジュールが追加されました。
新たに標準モジュールのツリーが生成され、Module1が追加されていますね。
同時に右の枠内にコードウィンドウも表示されます。
もし、表示されていない場合は、プロジェクトエクスプローラー内で、
表示したいモジュール(今回はModule1)をダブルクリックしてください。
また、Module1という名前(オブジェクト名)は下にあるプロパティウィンドウで変更できます。
とりあえずTestなどに変更してみても、そのままでもどちらでも構いません。
プロパティウィンドウが表示されていない場合は、上の表示メニューから選択するかF4キーを押してください。
では、ここで何か処理を書いてみましょう。
先程開かれたコードウィンドウ内に下記のように記載してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Option Explicit Sub MyTest() Dim rng As Range Dim msg As String 'Rangeオブジェクトに選択しているセルをセット Set rng = ActiveCell 'msgにrng内の値を文字列型で格納 msg = rng.Value 'メッセージボックスにmsgを表示 MsgBox msg End Sub |
選択しているセル内の値をメッセージボックスで表示するという処理です。
では、実行してみましょう。
Excelのシート画面に戻ってください。
メッセージボックスに表示したい文字列(数字でも構いません)を任意のセルに入力し、そのセルを選択しておきます。
準備ができたら、開発タブのマクロをクリックします。
先程作成したMyTestを選択して実行ボタンをクリックします。
このように表示されれば成功です。
また、先程のマクロ画面のオプション設定でショートカットキーを登録することもできます。
ここで任意のキーを設定することができます。
マクロの保存先は、とりあえず作業中のブックで問題ないでしょう。
本記事の主な内容はここまでとなります。
いかがでしょう。何となく作業の効率化ができるイメージが湧いて来ましたか?
最後に、変数の宣言を強制する理由について、具体例を紹介します。
下記コードを見てください。
1 2 3 4 5 6 7 8 9 10 |
Sub MyTest() Dim rng As Range Dim myMessage As String Set rng = ActiveCell myMessage = rng.Value MsgBox myMassage End Sub |
間違い探しです。一見先程と同じ処理に見えますが、これを実行すると下の画像のように空っぽのメッセージボックスが表示されます。
もうお分かりいただけましたね。実は最後の値だけマッサージになっちゃってるんですね。
あるあるですね。
Option Explicitを削除すると、これでも何のエラーもなく実行されてしまうため、うまく動かない原因を特定するのに時間がかかりそうです。
以上です。
最後まで読んでいただきありがとうございました。
コメント