【マクロの記述の仕方】
Excelのマクロを習得して行く時、特に初学者の場合は、
最初の頃はマクロの言語(プログラムする文章)の意味が分からず、
どのようマクロを記述していいか分からないので、
教科書通りの方法で見よう見まねでとにかく記述していました。
この時点でExcelマクロの勉強を辞めてしまう場合が多いようです。
複数のExcelマクロの本を読んで、
日本語を記述してマクロの内容を分かりやすくする方法がありますので、
簡単に解説します。
スポンサーリンク
![](https://koga312.com/wp-content/uploads/2023/10/20231022:マクロの記述①.png)
画像:マクロの記述内容(参考)
スポンサーリンク
デキルっぽいけど理解できなければ意味が無い
ExcelにはセットでExcelVBAというソフトが無料で付いています。
ExcelVBAにマクロ(プロシージャ)を作成でき、作成した内容を処理してくれます。
毎回、同じ処理をする場合は、Excelでも同じ操作を毎回します。
これらを、一度マクロで作成すれば、何度も使えるため、
次回以降の処理時間を短縮できます。
会計とマクロは相性が良くて、仕訳は1行のデータととらえて、
その仕訳データをマクロで処理するようなイメージです。
マクロの記述の仕方について、私なりのステップアップの過程を、
実際に使用しているマクロの文章を参考にしならが説明します。
習得当初や約2年間のステップアップについては、本を参考にして行きました。
その記事は、こちらを参照してくみてください。
このブログ内の言葉で、
「プロシージャ」についてちょっと触れておきます。
プロシージャは、マクロ内の各行の文章のコトをさします。
例えば、
「dim i As Long」や
「Sheets("sheets1").Rows(i).Delete」などが
プロシージャです。
プロシージャの集合体がマクロととらえてください。
(例)~~~~~~~~~~~~~~~~~~~~~~
dim i As Long
Dim LastRow As Long
LastRow = sheets("sheets1").Cells(Rows.Count, 10).End(xlUp).Row
For i = LastRow To 1 Step -1
If Sheets("sheets1").Cells(i, 10) = "0" Then
Sheets("sheets1").Rows(i).Delete
End If
Next i
~~~~~~~~~~~~~~~~~~~~~~~~
上記のプロシージャは、習得当初の段階のもので、
見よう見まねで記述した各プロシージャです。
不要な行を削除するためによく使います。
このExcelシートには、10列目(J列)に金額が入っています。
金額がゼロの場合は、その行を削除するという内容です。
最初の頃は、このように記述していました。
変数の「i」はカウンター変数、「LastRow」は最終行という意味です。
(「i」は「index(インデックス)」の頭文字という意味で、
「Last」は最後・「Row」は行で最後の行という意味で使用しています。)
マクロを記述できる人なら、このプロシージャは決して難しくありません。
そのため、この操作の意味は理解できます。
でも、初めてマクロを習得する人にとって、
いきなりこのプロシージャを見せられても理解不能です。
(初学者の頃の私がそうでした。)
スポンサーリンク
他の人が見るコトを(作成者が見返すコト)意識する
そこで、ちょっと変更します。
変数の「LastRow」を日本語にします。
変数を日本語で設定するコトで、
初見で「うわぁ!」とならないとおもうのですが・・・
いかがでしょうか。
また、各プロシージャの意味が分からない場合は、
コメントを挿入するコトでより分かりやすくなります。
下記の例は、上記のコメントが無いプロシージャに、
プロシージャの上部にコメント(緑色の文字)を記述しています。
~~~~~~~~~~~~~~~~~~~~~~~~
'※※※ 各変数を設定する ※※※
'カウンター変数に「i」を設定する
Dim i As Long
'金額の最後の行を取得するために、変数「金額の最終行」を設定する
Dim 金額の最終行 As Long
'「金額の最終行」を取得する変数
金額の最終行= sheets("sheets1").Cells(Rows.Count, 10).End(xlUp).Row
'※※※ 変数を使ってゼロ行を削除する ※※※
'「for」文を使って、最終行から2行目まで下から繰り返す
For i = 金額の最終行 To 2 Step -1
'条件の設定:10列目(J列)がゼロ
If Sheets("sheets1").Cells(i, 10) = "0" Then
'条件の処理:該当行を削除する
Sheets("sheets1").Rows(i).Delete
'条件の終了:「for」文内の条件の終了
End If
'次の行に進む
Next i
~~~~~~~~~~~~~~~~~~~~~~~~
かなり細かくコメントを入れているのですが、
慣れてくればここまでコメントを記述すると、
プロシージャ自体が分かりにくくなります。
各プロシージャは、セットで記述するコトが多いです。
セットで覚えるコトで、各プロシージャの意味が分かります。
そのため、コメントを最小限に抑えるコトができます。
変数「i」は
「For~Next i」
とセットです。
変数「金額の最終行」は
「sheets("〇〇〇").Cells(Rows.Count, 10).End(xlUp).Row」
とセットです。
(「〇〇〇」はシートの名前)
「If」構文は
「If~then~End If」がセットです。
スポンサーリンク
出来た時間はやりたいコトに充てる
習得当初は、「猿真似」でとにかく真似ました。
次のステップは、
プロシージャを修正できるように、各プロシージャの意味や使い方を
理解するコトに重点を置いています。
更に、他の人が見たときや、後で見返しても作成した本人でも分かるように
説明文(コメント)を挿入しました。
一つのプロシージャの処理では、ほとんど意味が無い場合が多いですが、
各プロシージャの組み合わせるコトで、求めている「答え(処理後のデータ)」に
たどり着くことが出来ます。
手間が省け、時間が短縮されることは間違いありません。
私自身が体感し、保証します。
この程度のレベルまでですが、私の場合は約2年もかかりました。
この2年間のコツコツの習得で、確実に時間短縮ができましたので。
モチベーションを維持するのは難しいので、
「毎日NO残業」、「就業定時は16時」、と言い聞かせていました。
短縮できた時間は、
事務所として取り組みたいコトに割いています。
もし、マクロで時間短縮できていなかったら、
未だに入力や毎回の手作業に追われている日々でした。
マクロの習得によって時間を確保でき、
出来なかったコトが出来るようになりました。
そのため、「毎日NO残業」、「就業定時は16時」は、
ほぼ達成していませんが。
最後まで、ご覧いただき、ありがとうございました。
スポンサーリンク
★ ★ ★
![](https://koga312.com/wp-content/uploads/2024/03/20240312:文章を書く-1.jpg)
投稿者プロフィール
古賀 聡
広島県広島市の税理士。現在は、個人事業主・中小事業者(法人)の税務・経営の相談を中心に活動中。ブログ投稿を2020年10月1日に立ち上げ、税務・会計だけでなく、ExcelマクロやRPAを使って業務の効率化やWebサイトの構築など、「小さな便利」記事を毎週月曜日に作成・投稿中。
人気ブログ投稿
お問い合わせ・ご相談は、
お問い合わせフォームにて受け付けております。
お問い合わせフォームの受付は
24時間受付中です。
![](https://koga312.com/wp-content/uploads/2020/10/000古賀税理士事務所:ロゴ2-1-1024x196.png)
![](https://koga312.com/wp-content/uploads/2024/04/ワークプレイス43-1024x680.jpg)
まずは、気軽に
ご相談・お問い合わせください!