(2019.12.02追記)ウチが書いている他のマクロ記事を冒頭に載せました。
もっとはじめに
Excelマクロ関連の記事他にもありますので、よかったら併せてみてもらえるとうれしいです。
-
Excelファイル加工に関するマクロTips
- Excelファイル加工に使えそうなネタをまとめてます
-
個人用マクロブックのすすめ~実践編~
- ウチの個人用マクロブックに入れているマクロを紹介してます
はじめに
職場によって、プロジェクトの計画書、設計書、各プロダクトのテスト仕様書、パラメータシート、手順書などなどの資料をWordやPowerPoint、Excelなどで作ると思います。
そんな自分も、前の職場ではほぼ全てExcelで資料を作成していたのでWordは顛末書書くとき、PowerPointはエンドユーザに説明するときといった具合で、気づいたらExcelにステ全振りになってました。
そんな自分が、Excel資料作成するときにちょっと楽をするためのマクロや、楽をするためのコツが書けたらと思います。
どんな人向け?
以下のような人向けです。
- Excelで資料作成することが多く、もう少し効率的に作成したい
- 簡単なマクロを作ったことがある
- マクロ作ったこと無い場合、Google先生に聞きながらならなんとかなるかもしれないです
- マクロで効率化って言うけど何すればいいかわからない
- 個人用マクロブックって何?
マクロって?
Excelの操作を自動化してくれるプログラムと思って頂いて大丈夫です。
マクロはVisual Basicというプログラミング言語で書きます。
一応**「マクロって何?」**って方でもわかるように記事を書いてますが、わからない点などがあればコメントください。
何をマクロ化すればいいのか
そもそも何をマクロ化すればいいかって話ですが、以下のような処理をマクロ化したいですね。
具体的に何があるのってこともそれぞれ補足してます。
- 特定のタイミングで毎回行うこと
- 保存前に全シートA1セルに合わせ、レイアウトや倍率を統一する
- 前回の保存状態に戻るためにExcelファイルを開き直す
- R1C1形式とA1形式の切り替え
- 一連の処理が同じ流れ(または2,3パターン程度しかない)
- 特定のフォーマットシートを作成する
- 特定フォルダ内のテキストファイルをExcelに書き出す
- ヒューマンエラーが出やすい単調な作業
- 特定列同士の差分チェック
- 文字数チェック
- ショートカットキーにオリジナルの処理を入れたい
- Ctrl+○で選択している行挿入、削除、特定色にセルや文字着色、、、etc
-
F1キーをぶっ潰したいF2キーと押し間違えるF1キーを引っ剥がしたい
早い話が、考えなくても出来て、かつ面倒に感じる作業をどんどんマクロ化していくべきです。
おまけ程度の5番目についてですが、全く使わないキーをよく押し間違えるので無効化するということもマクロで対処することが出来たりします。
なお、当記事のマクロはあくまで自分自身の仕事効率を上げることが目的です。
お客様への納品で参考にするにはガバガバな内容なのでご注意ください。
自分好みにサクッと作って楽ができたり、ヒューマンエラーを減らせるのがいいところです。
個人用マクロブックの話
意外と知らない方多いので解説します。
個人用マクロブックとは
検索すればいくらでも出てくるのでザックリと解説しますが、「Excelを起動すると自動的に開いてくれるマクロ格納用Excelファイル」と思って頂いて問題ないです。
拡張子がPERSONAL.XLSBといつも(xlsx,xlsm)と違いますが、普通のExcelファイルとして使えます。
なので自分用メモやショートカット、ToDoとして使うこともできます。
ウチの場合、こんな感じでカラーインデックス入れてたりします。
作ったマクロはいつでも使えるようにしたいので、
個人用マクロブックを作成し、その中にマクロを入れていきます。
個人用マクロブックの作成(+マクロ関連の設定)
とりあえずExcel起動します。
今までマクロ触ったことない方だと、上段タブに開発がないと思いますので「開発」タブを追加するところから始まります。
開発タブの追加
ファイル → オプション → リボンのユーザー設定を開きます。
メインタブ内の開発のチェックボックスにチェックを入れ、OKします。
すると、上段タブに開発が出てくると思います。
さらに、左下にマクロの記録ボタン(準備完了の右のマーク)が出現すれば、準備完了です。
適当なマクロ作成
適当なマクロを作れば個人用マクロブックが出来るのでサクッと作ります。
左下のマクロの記録ボタンをクリックすると、マクロの記録画面が表示されます。
マクロの保存先に「個人用マクロブック」を選択し、OKします。
するとマクロの記録ボタンが■(停止ボタン)になり、この直後からExcelで行われた操作が全て記録されることになります。
すぐ停止ボタン押してもマクロは出来ますが、どうせなら適当なセルを選択したり、拡大縮小、スクロール、セル入力してみてから停止ボタンを押してみましょう。
停止ボタン押すと元のボタンに戻ります。
開発タブからマクロ(ショートカットならAlt+F8)するとマクロ画面が開かれ、先程記録したマクロが一覧にはいっています。
ここで実行を押すと、前項で記録した操作が超高速で処理されます。
しかし、編集を押すと、以下のエラーが出てきます。
マクロが保存されたことにより、個人用マクロブックが生成されたのはいいものの、初期状態では個人用マクロブックが非表示になっているためです。
マクロの編集画面表示
表示タブより、再表示を選択すると、ウィンドウの再表示が開き、表示するブックにPERSONAL.XLSBが入っています。
PERSONAL.XLSBが選択されていることを確認しOKすると何も書かれていないPERSONAL.XLSBが開かれます。
これでようやく、先程保存したマクロの編集画面に行くことが出来ます。
なお、エディタ画面へはAlt+F11を押せばブックが非表示でもいけます。
個人用マクロブックの保存
最後に個人用マクロブックを保存します。
表示タブより表示しないを選択すると非表示されるので、そのままExcelを終了します。
すると表示されているExcelファイル以外に、個人用マクロブックの変更を保存しますか?とメッセージボックスが出力するので保存をクリックして終了します。
なお、表示されている状態であればいつものExcelファイルと同様Ctrl+Sで保存はできますが、次回起動時は表示されて開かれるので注意してください。
もう一度Excelを起動すると、新規Excelファイルと非表示になっている個人用マクロブックが同時に開かれるので、これで個人マクロブックの設定完了です。
個人用マクロブックにマクロを作成
マクロの記録だけでは限界があるので手動で作成する方法をサクッと紹介します。
エディタを開く
Alt+F11でエディタをサクッと開きます。
左側にVBAProjectのウィンドウが無い場合、表示 → プロジェクトエクスプローラーを選択すると開かれます。
基本は、どのシートでも使えるようにしたいのでVBAProject → 標準モジュール内にモジュール(≒マクロ)を作成します。
Microsoft Excel Objectsの説明は省きますが、当該シート内でのみ処理をしたい場合はそのシート内にマクロを作成することも可能です。
ここでは標準モジュール内のModule1を開きます。
マクロの作成(手書き)
Module1には先程記録されたマクロがあると思います。
Sub Macro1()
'
' Macro1 Macro
'
'
Range("D7:L15").Select
ActiveWindow.ScrollRow = 2
'~以下てきとーな処理~
End Sub
上記のコードのEnd Sub
以下に以下のコードを書き足してみましょう。
Sub test_macro()
'メッセージボックス出力
MsgBox "hello world!"
'A1セルに入力
Range("A1").Value = "hello world"
'デバッグ出力
Debug.Print "hello world ?"
End Sub
書けたらCtrl+Sを押して保存しましょう。
マクロの実行
記録したときと同様、Excel画面からAlt+F8でマクロ呼び出してもいいですが、ここではエディタ上での方法を紹介します。
エディタ上では、カーソルがコード内(Sub ~~ End Sub内の行)にある状態で標準ツールバー内の緑三角ボタンをクリックすると実行されます。
もしもコード外にカーソルがある状態で実行すると、実行できるマクロの一覧が表示されるので、該当のマクロを選択して実行しましょう。
※実行するとき、なんでも良いのでExcelファイルが表示されている状態で実行してください。
実行すると以下のポップアップが出力します。
コードで言うところのmsgbox "hello world!"
による結果です。
メッセージボックスを出力したいときはmsgbox
を利用するので、覚えておきましょう。
次に、開いているExcelファイルのA1セルを見るとhello worldと入力されていると思います。
このように、Excelファイルに書き込み、または値を参照することが出来ます。
イミディエイトウィンドウについて(デバッグ)
先程のコードのDebug.Print "hello world ?"
はイミディエイトウィンドウというデバッグ用に使用するウィンドウ上にしか表示されませんので、ウィンドウを出したいと思います。
エディタより表示タブ → イミディエイトウィンドウを開くと、イミディエイトウィンドウが開かれます。
開くと、おそらく**hello world ?**と出力されているのではないかと思います。
イミディエイトウィンドウは処理中にdebug.print xxxx
を挟み込むことで、その時のxxxxの値を取得することが出来ます。
マクロを作り込んでいて想定の挙動にならない、というときは間にdebug.print
を入れて値の遷移を確認すると良いかもしれません。
知っておくとマクロ作成が楽になること
併せてココらへん知っておくと作成楽になるよってことも補足します。
少しずつ実行したい場合はF5の代わりにF8
F5キーだと一気に実行するので、1行ごとにどう処理されているのか分かりづらいです。
なので1行ずつ実行したい場合、F8で1行ごとに実行することが可能です。
途中まで一気に実行したい場合はブレークポイント
「F8で1行ずつ処理できても途中までのクソ長い処理は一気に進めたい!」という場合は目的の行にブレークポイントをつけましょう。
該当行の左側をクリックすると茶色の丸がつきます。
この状態でF5キーを押すとブレークポイント直前まで一気に実行され、中断されます。
おわりに
ここまで読んだらとりあえず個人用マクロブックが使えるようになっているのではないかと思います。
使い方は様々あるので、**「この作業面倒だなぁ決まったこと延々とやるだけだし」**とか思った作業はどんどんマクロ化しちゃいましょう。
とはいえ、**んじゃ具体的に何ができるの?**という疑問に答えるべく、ウチが実際に使っているマクロを以下の記事で紹介してますので活用いただけたらと思います。