【VBA入門編 記事一覧】
第1回 VBAで仕事がラクになる?
第2回 マクロは誰にでも作れる!←イマココ
第3回 VBAを書いてみよう!
第4回 エラーだって怖くない!
目次
マクロの作り方と考え方
いつもの業務を言語化する
プログラムというものは言語化した操作をひとつずつVBAに変換していくことで出来上がります。今日は教師になった気分で「生徒の成績を点数化する」という業務を例にマクロを考えてみます。
まずは業務の完成形をイメージしましょう。マクロ実行ボタンを押す→C列に点数が入るといったマクロを作ることが目的ですが、VBAに「生徒の成績を点数化する」という抽象的なコードは存在しません。目的を達成するために行っている操作は、「B列に入力されている値(この場合は文字列)によって決められた数値をC列に入力する」ということです。
私たちにとってセルの中身が「成績」や「点数」のような”意味を持つ何か”だとしても、Excelにとってはただの「数値」や「文字列」でしかありません。Excel目線で操作を考えることがマクロ作りの第一歩!
細分化した操作手順を書き出す
自動化したい操作が明確になりましたが、いきなりVBAを書くことはできません。必要な操作のために行っている操作はまだまだあります。さらに「特定のセルを見て判断する」など自分自身の動作も命令しないといけません。ここからは操作の細分化が重要になります。
- ①B列の値(文字列)を確認する
- ②条件を設定する
◎→5点、〇→3点、△→2点 - ③条件からC列に値(数値)を入力する
- ④2~6行目まで繰り返す
4つに細分化することができました。これをVBAというプログラミング言語でコンピュータに対する命令文に書き換えていきます。ここまでは0からマクロを作るときの考え方でした。みなさんの手元に日々行っている業務のマニュアルや作業手順書がある場合は、それを基にVBA化していきましょう。
VBAの基本ルール
日本語からVBAのコードにするために、
基本的な構成と3つのルールをお伝えします。
Sub マクロ名()
Dim 変数名 '←変数の宣言
処理コード '←操作のVBA化
End Sub
- ①「Sub」から始まり「End Sub」で終わる
- ②「Dim 変数名 As 型」で変数の宣言をする
- ③「処理を命令する」コードを書く
が基本の構成ルールです。
また、読みやすさアップのために[Tab⇆]キーで字下げ(インデント)や改行を上手く使用することも大切です。
【コメントアウト】
緑の文字はコメントといってメモみたいなものです。文字の先頭に「'」を付けることによってコンピュータから認識されなくなります。記述したコードを消したくないけど無効化したい時にも使用することができます。
※可読性とインデントについては別の記事を書きたいと思います。
プロシージャ
ひとかたまりの処理単位のことを言います。
VBAは始まりと終わりの言葉が決まっています。手紙でいうところの、拝啓と敬具です。「Sub
プロシージャ名()」で始まり、「End
Sub」で終わるものをSubプロシージャといいます。
また、「Function プロシージャ名()」で始まり、「End Function」で終わるFunctionプロシージャも存在しますが、今はSubプロシージャのみ覚えてもらえたらOKです。
変数の宣言
VBAの中に出てくる値(数字や文字列など)は、そのまま記述せずに別の文字に格納します。数学のx=1やy=x+1をイメージしてください。
「Dim 〇〇」で〇〇を変数名として使う宣言をして、「As
△△」でその中に格納する値の種類(整数・文字列・日付etc...)を指定します。
Dim x As Long
x = 100
上記のコードを日本語に訳すと『xを変数と宣言し、xの中身は整数(Long)を指定します。100をxに格納します。』です。xには整数が指定されているので文字を格納すると「型が一致しません」という下記のエラーが出ます。
また、変数の宣言をする場所ですが 最初にまとめて宣言する派 と 変数を使う直前に宣言する派 に分かれます。自分がしっくりくる方を選んでください。どちらでもOKです。
※データ型の種類や変数宣言のメリット、変数名の付け方ついては別記事で解説しています。
処理コード
ここに先ほど考えた自動化したい操作手順をVBAに変換して記述していきます。最初から全て自分で書く必要はありません。先人の知恵を借りましょう。とにかく「やりたい操作+VBA」で検索するのです。コピペ上等!!まずは立派なコピパーになることが目標です。
Sub macro1_Click()
Dim i As Long
For i = 2 to 6
Select Case Cells(i, 2).Value
Case "◎"
Cells(i, 3).Value = 5
Case "〇"
Cells(i, 3).Value = 3
Case "△"
Cells(i, 3).Value = 2
End Select
Next i
End Sub
'マクロ名:macro1_Click
'変数名:i、データ型:整数(Long)を宣言
'変数iの数値を2から6に指定
'縦2、横2進んだセル(B2)の値を取得する
'取得した値が◎の場合
'縦2、横3進んだセル(C2)に5を代入する
'取得した値が〇の場合
'縦2、横3進んだセル(C2)に3を代入する
'取得した値が△の場合
'縦2、横3進んだセル(C2)に2を代入する
'条件の判定終了
'変数iを次の数字にして繰り返し(6になるまで繰り返す)
'マクロの終了
また、はじめはデータをシンプルにしたもので実行してみるといいと思います。数行のデータで実現できたものは、データが1,000行になっても実現できるはずです。データによっては「何行あるかわからない」ということもあるかもしれません。そんなときは『最終行の行番号を取得する』コードがあります。覚えておいてくださいね。
マクロの実行方法
ボタンにセットして実行する
適当に図形を作って右クリックするとメニュー一覧に[マクロの登録]があるので、そこから作ったマクロを登録することができます。登録したマクロはボタン(図形)をクリックするたびに実行されます。
マクロ作ったった!感が出るのでぜひ使ってみてください。
表示タブから選んで実行する
実はマクロを使うだけなら開発環境はいりません。[表示]タブの右端にある[マクロ]をクリックすると開いてる全てのExcelファイル(以下「ブック」)に含まれているマクロの一覧が出てきます。その中から好きなマクロを選んで実行することが出来ます。
職場ではマクロだけを保存したブックを渡して「処理したいブックから選んで実行するだけで終わるよ〜」と言ってみんなに使ってもらっています。この使い方は周りにVBAを教える必要も元データを触る必要もないのでオススメです。
0 件のコメント:
コメントを投稿