日々のこと

読書と文具たまに旅行。趣味と仕事の両立が永遠のテーマ

Excelマクロ(VBA)初心者でも簡単にできる、マクロの組み立て方


【スポンサーリンク】

 Excelマクロ(VBA)というのは、ちまっとしたツールを作るのにとても便利な存在です。

職場でExcelを使う場面は非常に多いと思うので、覚えておくと仕事がとても楽になります!人力ならちまちまちまちま作らないといけないようなファイルが、ボタンポチっとしてトイレ行って帰ってきたら完成してたら嬉しいでしょ。

独学でVBAを覚えた私が、職場ではどんな風にツールを作っているのかざっくり書いてみます。

たとえばこんな依頼があったとします

要望

一覧表から削除リストにあるIDを削除して、結果ファイルを作るマクロを作って欲しい。毎日このマクロを動かすことにするから、結果ファイル名の最後には実行した日付を入れて欲しい。入出力ファイルの保存先はそのときで変わるかも。

種別ファイル名
インプット 01_一覧表.xlsx
02_削除リスト.xlsx
アウトプット 【削除後】一覧表_[日付].xlsx

…と、いう依頼がきたとします。さて、どこから手をつけようか。

VBAを独学で覚えた私なりのマクロの作り方

マクロはサクっと作って渡すことができるのがいいところ。かっちり仕様書を作るということは殆どありません。*1

まず、マクロを動かすためのエクセルファイルを作ります。

名前は[不要ID削除ツール.xlsm]とします。 これはインプットファイル操作してアウトプットファイルを作る指令所です。

メインとなる関数を作って、その中に「依頼されたことを人間がやるとしたら、どうするか?」ということをざっくりと書いていきます。

f:id:r-taro:20141002152555p:plain

ざっくりなので、こんなものです。 これらをやるために必要な情報はなんだろうか。

[01_一覧表.xlsx]と[02_削除リスト.xlsx]をマクロで開くためには、ファイルが保存してあるパスとファイル名をVBAに教える必要があります。 そして[【削除後】一覧表_[日付].xlsx]を作るためには、保存先のファイルパスとそのファイル名が必要だ。それから末尾に日付をつけるから、今日の日付も教えてあげないと。

と、いうわけでこんな風に入力シートを作ると。今日の日付はVBAの関数を使って取得することとします。

f:id:r-taro:20141002164735p:plain

メインとなる関数でやることがちょっと増えました。

f:id:r-taro:20141002152556p:plain

入力漏れがあるとファイルを開くことができません。指定したファイルが存在しない(入力間違い)でもエラーになってしまいます。 

やることが固まったところで、それぞれの処理を行う関数を作っていきます。(あっ、下の画像のIF文のところ変数名がおかしいですね。スミマセン。)

 

f:id:r-taro:20141002161609p:plain

※追記

画像が長くなるな…と思ったので一部しか載せてませんが、この後に閉じる関数が続きます。紛らわしかったですね。

更にその関数の中でやることを書いていけば、マクロは完成です。

f:id:r-taro:20141002161610p:plain

おっと、実行ボタンも忘れずにつけましょう。

f:id:r-taro:20141002164707p:plain

この方法のいいところ

やることを順を追ってコメントとして書いていくので、ヌケ・モレが出にくいです。そしてコメント文のとおりにやることをどんどんコード化していけばいいので、とっても楽ちん。

「こんなに細かくコメント入れるのだるい」と思うかもしれませんが、慣れるに従ってコメント文も減っていきます。たとえば「ファイルが存在しなかったらエラーメッセージを出して、Falseを返して関数終了する」というのをこのくらいには省略してしまいます。

f:id:r-taro:20141002162811p:plain

コメントをある程度入れておくと、後から仕様書を作って!といわれたときに困らないかもしれません。

「自分だったら目的とする成果物をどう作るか」ということをしっかり理解できていれば、マクロを作るのは難しくありません。人力でやることをExcelにやらせるだけなので。

「こういう場合はどう書いたらいいんだろう?」「こういうことってできるかな?」と思ったら、検索すればいくらでも例となるコードがでてきますしね。

ちょっとでも業務上の負荷を減らしたいと考えてる方は、マクロにチャレンジしてみてはいかがでしょうか。

関連記事

地味な作業ほどマクロの得意とするところです。定型作業はExcelに任せて、人間じゃないとできないことに時間を使いましょう。

「ありがとう!」と言われないよりも、言われたほうが嬉しいよね。

*1:引継ぎのためにメンテ用に作って欲しいといわれることもあるけれど