エクセル(Microsoft EXCEL)は比較的にパソコンにインストールしてあることが多く、仕事でも使う頻度が多いソフトですが、マクロ(VBA)を使いこなしている人は少ない気がします。やってみるとプログラミングの面白さを体験できます。自分で書いたVBAが自動でエクセルを動かすのです。これこそ大人のおもちゃ。わくわくしませんか? 私も素人ですが一緒に一から勉強してこのおもちゃを操れるようになりましょう!
手始めに見積書を自動で作るVBAを書いていこうと思います。ブック(エクセルのファイル)を新規作成するところから始めます。見本としてこの「benkyo roomブログサイト」の見積書をまず手動で作ってみました。
これです。これが完成形になります。↓
さあ、最初だからいろいろ大変ですが頑張っていきましょう!
VBAを始めるための事前準備
初めてエクセルVBAをさわる方がいらっしゃる場合、開発画面を出すために事前にエクセルに設定をしなければなりません。初めてVBAをやってみる方はこちらの記事を先に読んでください。↓
VBE(Visual Basic Editor)を起動する
まずエクセルを立ち上げて上部メニューから「開発」タブをクリックし、VBEを起動します。↓
出てきた画面がVBEです。今は「プロパティエクスプローラー」と「プロパティウィンドウ」が表示されています。もしこの二つが出ていなかったら上部メニューの「表示」タブをクリックして、中にあるプロパティウィンドウをクリックして表示させてください。↓
標準モジュールの追加と削除
これからVBAを書くのですが、まだ書く場所がありません。書く場所(標準モジュール)を作りましょう。上部メニューの「挿入」をクリックし、中にある標準モジュールをクリックしてください。↓
標準モジュールが作成されました。↓
このモジュールはいくつも作ることが出来ます。 ついでに削除の仕方も覚えておきましょう。今作った標準モジュール(名前はデフォルトの「Module1」になっています)が左側のプロジェクトエクスプローラーにも表示されています。この「Module1」を右クリックすると出てきたメニューの中に「Module1の解放」があるのでこれをクリックします。↓
「削除する前にModule1をエクスポートしますか?」と聞かれるので、いいえボタンをクリックして削除を実行します。ちなみに はいボタンを選択するとModule1に書かれた内容を「Module1.bas」として保存するダイアログが表示されます。↓
それでは改めて、標準モジュールをひとつ追加してください。デフォルトの「Module1」の名前で標準モジュールが追加されました。↓
モジュールの名前を変更する
モジュールの名前は変更することが出来ます。名前つけのルールとして先頭に数字を使ってはいけないそうです。そして記号は _ (アンダーバー)のみ使えます。 なんのモジュールか分かるように名前を変えましょうか。 「見積書雛形作成」という名前にしましょう。
プロジェクトエクスプローラーに今作った「Module1」という標準モジュールがあります。これをクリックしてみると下にあるプロパティウィンドウに「(オブジェクト名)Module1」と出ていますね。これを書き直すと名前を変更できます。「Module1」を「見積書雛形作成」に書き直してください。↓
出来ましたでしょうか? 名前を変えたいときはプロパティウィンドウで変えます。 ここで一度このブック(エクセルファイル)を保存しましょう。ファイルの名前は「VBA練習1」にしましょう。一度エクセルの画面に戻って上部メニューの「ファイル」をクリックして「名前を付けて保存」をしてください。↓
これから何度も開くことになるので、デスクトップでもどこでもいいのでお好きな場所に保存して、場所がわからなくならないように覚えておいてくださいね。
まずは新しいブックを作成する
今作っていただいたブック(エクセルのファイル)「VBA練習1」を開き、VBEを起動してください。プロジェクトエクスプローラーの中に標準モジュール「見積書雛形作成」がありますね。これをダブルクリックして開いてください。「Option Explicit」とだけ書いてあります。これはこのまま消さないで残しておいてください。これが先頭に書き込んであると、変数として宣言していないキーワードを間違って書き込むとエラーとする機能がつきます。↓
いま、「VBA練習1」のブック(エクセルのファイル)を開いていますが、これからVBAで作っていく見積書の雛形は、このブックの中には作りません。VBAを使って新しいブックを作成させ、新しいブックの方に見積書の雛形を作成していきます。
モジュールウインドウに、まずこう書いてください。
sub 新規ブックで見積書雛形の作成
「sub」は半角小文字、次は半角スペース、次は「新規ブックで見積書雛形の作成」 書き終わったらENTERキーをおしてください。こう変わりましたか? ↓
変われば成功です。変わらなければなにか文字が間違っています。
いま「新規ブックで見積書雛形の作成」という名前の”subプロシージャ”が作られました。このピンク色で書いてあるSubからEnd Subまでの間にVBAの記述をしていきます。このまとまりが一つのマクロ機能になります。さあ、ここに書いていきましょうか!
あ、ひとつ忘れていました。。これからVBAコードを書いていくのですが、英語が並んでいきますので日本人にはツライ。。わかりやすいように日本語でメモ書きをいれていきたいです。。 コードの中には「コメント」を入れることが出来ます。
コメントを入れたい行の先頭に ’ (シングルクォーテーション)を入れることでその行はコメント行として認識され、VBAのコードには影響しないようにできます。 そしてこの ’ (シングルクォーテーション)を入れるのに便利なボタンがあるのでそれを出しておきましょう。まず上部メニューかツールバーのどこでもいいので右クリックします。すると出たメニューの一番下に「ユーザー設定」があるのでクリックします。↓
ユーザー設定のコマンドタブ→編集を選び、中にある「コメント ブロック」と「非コメント ブロック」の2つをツールバーのどこかにドラック&ドロップで追加してください。↓
「コメントブロック」にと「非コメントブロック」の二つのボタンがツールバーへ追加されました。
さあ、段取り悪くてすいません。。。 書いていきましょう。
SubからEnd Subまでの間にVBAの記述をしていきますから、まずカーソルをその位置に合わせてください。
subからEnd subの間に入っていることを見やすくしたいので、TABキーを1回押して4文字分カーソル位置が右にずれるようにしてください。そしてそこに日本語で「新規ブックを作成する」と書いてください。この行をコメント行に変えるため、先ほど追加した「コメントブロック」ボタンを1回押してください。するとこうなります。↓
行の先頭に ’ (シングルクォーテーション)が挿入され、コメント行になりました。この行はプログラムへ影響を与えなくなりました。改行して再びTABキーを1回押して今度はこう書いてください。↓
workbooks.add
スペルミスをしていなければ、カーソルを別の行に移すと自動で先頭の文字が大文字に変更されてこうなります。↓
なんとシンプルな! 「新規ブックを作成する」のはこれで終わりです。試しに動かしてみましょうか。 SubとEnd subの間のどこでもいいのでカーソルを置いてからツールバーにある「Sub/ユーザーフォームの実行」ボタン(またはキーボードのF5キー)を押してみてください。 どうですか?新規ブック(エクセルのファイル)が立ち上がりましたか? おめでとうございます! 最初の命令文は終了です。 立ち上がった新しいブックはまだ要らないので保存せずにそのまま閉じてしまいましょう。
'新規ブックを作成する
Workbooks.Add
覚えておきましょう。
先頭のシート名を変更する
次にやりたいのは新しく立ち上がったブックの先頭のシート名をデフォルトの「sheet1」から「見積書表紙」にかえることです。やってみましょう。
まず「先頭のシート名を変更する」と書いてからそのまま改行せずに「コメントブロック」ボタンを押してコメントアウトさせます。 次の行にコードを書きます。↓
Worksheets(1).name="見積書表紙"
他の行に移るとまた自動で先頭の文字が大文字になり、スペースが挿入されます。 スペルミスなどがあると変えてくれませんので間違いをさがしましょう。こうなりましたでしょうか。↓
この「Worksheets(1)」というのは1番目のシート、つまり先頭のシートという意味です。先頭とは一番左側にあるシートのことです。例えば左から2番目のシートならば「Worksheets(2)」と書きます。
シートの名前を直接指定したい場合は、 ” (ダブルクォーテーション)で挟んで書きます。つまり「Worksheets(“sheet1”)」です。
次に書いた「.Name」は文字通り「名前」です。 シートの持っている「プロパティ」のひとつです。「プロパティ」というのはシートの属性・構成要素・情報のことで、名前の他にも列やら行やらセルの数やらたくさんあります。
「Worksheets(1)」の数あるプロパティの中から「.Name」名前を指定して「=”見積書表紙”」で変更しました。
決まりとして、=(イコール)の左側は情報を受け取る側で、右側は情報を渡す側です。
左側にある「Worksheets(1)」の「Name」に、右側の”見積書表紙”の文字を渡したことになります。 これでシートの名前変更が成立しました。
「Name」はシートの「プロパティ」のひとつだと言いましたが、シート自体は「オブジェクト」と呼ばれます。 エクセルで私たちが普段使うものは「オブジェクト」です。ブック(エクセルのファイル)、シート、セル、グラフ、オートシェイプ、操作対象となるものが「オブジェクト」です。
「オブジェクト」の集合は「コレクション」と呼ばれます。複数形で語尾にsがついていますね。「Worksheets(1)」というのはWorksheetの集合である「Worksheets」コレクションから、(1)で1番目のシートを指定しています。
今回の行は「オブジェクト」.「プロパティ」=「渡す情報」 というひとつの基本パターンです。
ここで一区切りしましょう。「VBA練習1」のブックを上書き保存して休憩です。お疲れ様でした!