個人用マクロブックのすすめ～入門編～

(2019.12.02追記)ウチが書いている他のマクロ記事を冒頭に載せました。

---

# もっとはじめに
Excelマクロ関連の記事他にもありますので、よかったら併せてみてもらえるとうれしいです。

- [Excelファイル加工に関するマクロTips](https://qiita.com/iguru/items/dcce1a2994025354f190)
    - Excelファイル加工に使えそうなネタをまとめてます
- [個人用マクロブックのすすめ～実践編～](https://qiita.com/iguru/items/b504e0446c3080635b80)
    - ウチの個人用マクロブックに入れているマクロを紹介してます

# はじめに
職場によって、プロジェクトの計画書、設計書、各プロダクトのテスト仕様書、パラメータシート、手順書などなどの資料をWordやPowerPoint、Excelなどで作ると思います。

そんな自分も、前の職場ではほぼ全てExcelで資料を作成していたので**Wordは顛末書書くとき、PowerPointはエンドユーザに説明するとき**といった具合で、気づいたらExcelにステ全振りになってました。

そんな自分が、Excel資料作成するときにちょっと楽をするためのマクロや、楽をするためのコツが書けたらと思います。

# どんな人向け？

以下のような人向けです。

- Excelで資料作成することが多く、もう少し効率的に作成したい
- 簡単なマクロを作ったことがある
    - マクロ作ったこと無い場合、Google先生に聞きながらならなんとかなるかもしれないです
- マクロで効率化って言うけど何すればいいかわからない
- 個人用マクロブックって何？

# マクロって？
**Excelの操作を自動化してくれるプログラム**と思って頂いて大丈夫です。
マクロは**Visual Basic**というプログラミング言語で書きます。
一応**「マクロって何？」**って方でもわかるように記事を書いてますが、わからない点などがあればコメントください。

# 何をマクロ化すればいいのか

そもそも何をマクロ化すればいいかって話ですが、以下のような処理をマクロ化したいですね。
具体的に何があるのってこともそれぞれ補足してます。

1. 特定のタイミングで毎回行うこと
    - 保存前に全シートA1セルに合わせ、レイアウトや倍率を統一する
    - 前回の保存状態に戻るためにExcelファイルを開き直す
    - R1C1形式とA1形式の切り替え
2. 一連の処理が同じ流れ(または2,3パターン程度しかない)
    - 特定のフォーマットシートを作成する
    - 特定フォルダ内のテキストファイルをExcelに書き出す
3. ヒューマンエラーが出やすい単調な作業
    - 特定列同士の差分チェック
    - 文字数チェック
4. ショートカットキーにオリジナルの処理を入れたい
    - Ctrl+○で選択している行挿入、削除、特定色にセルや文字着色、、、etc
5. ~~F1キーをぶっ潰したい~~
    -  ~~F2キーと押し間違えるF1キーを引っ剥がしたい~~

早い話が、**考えなくても出来て、かつ面倒に感じる作業**をどんどんマクロ化していくべきです。
おまけ程度の5番目についてですが、**全く使わないキーをよく押し間違えるので無効化する**ということもマクロで対処することが出来たりします。

なお、当記事のマクロはあくまで自分自身の仕事効率を上げることが目的です。
お客様への納品で参考にするにはガバガバな内容なのでご注意ください。

自分好みにサクッと作って楽ができたり、ヒューマンエラーを減らせるのがいいところです。

# 個人用マクロブックの話

意外と知らない方多いので解説します。

## 個人用マクロブックとは

検索すればいくらでも出てくるのでザックリと解説しますが、「Excelを起動すると自動的に開いてくれるマクロ格納用Excelファイル」と思って頂いて問題ないです。
拡張子が**PERSONAL.XLSB**といつも(**xlsx,xlsm**)と違いますが、普通のExcelファイルとして使えます。
なので自分用メモやショートカット、ToDoとして使うこともできます。

ウチの場合、こんな感じでカラーインデックス入れてたりします。
![19.メモ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/c821b6cd-de9b-344a-b5c6-2bb0481cfe6e.jpeg)

作ったマクロはいつでも使えるようにしたいので、
個人用マクロブックを作成し、その中にマクロを入れていきます。

## 個人用マクロブックの作成(＋マクロ関連の設定)

とりあえずExcel起動します。
今までマクロ触ったことない方だと、上段タブに**開発**がないと思いますので「開発」タブを追加するところから始まります。

### 開発タブの追加

**ファイル** → **オプション** → **リボンのユーザー設定**を開きます。
メインタブ内の**開発**のチェックボックスにチェックを入れ、**OK**します。
![リボンのオプション画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/84117a55-5833-5d03-b7b6-7fd1e6825124.jpeg)

すると、上段タブに**開発**が出てくると思います。

![開発タブ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/eaee07a5-e092-5790-42a4-4969c3e2c84d.jpeg)


さらに、左下に**マクロの記録ボタン**(準備完了の右のマーク)が出現すれば、準備完了です。

![03_マクロの記録ボタン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/b520429e-5ecb-3745-fc34-7111567fb971.jpeg)

### 適当なマクロ作成

適当なマクロを作れば個人用マクロブックが出来るのでサクッと作ります。
左下の**マクロの記録ボタン**をクリックすると、**マクロの記録**画面が表示されます。
マクロの保存先に「個人用マクロブック」を選択し、**OK**します。

![04.マクロの記録画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/ec385965-0376-780d-45ea-ecc556e4b4bd.jpeg)

すると**マクロの記録ボタン**が■(停止ボタン)になり、この直後からExcelで行われた操作が全て記録されることになります。

![05.マクロの停止ボタン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/e4a11d8c-e6b3-9dbd-f4fb-dc0bc661cb24.jpeg)

すぐ停止ボタン押してもマクロは出来ますが、どうせなら適当なセルを選択したり、拡大縮小、スクロール、セル入力してみてから停止ボタンを押してみましょう。

停止ボタン押すと元のボタンに戻ります。
**開発タブ**から**マクロ**(ショートカットならAlt+F8)するとマクロ画面が開かれ、先程記録したマクロが一覧にはいっています。

![06.マクロ一覧.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/8763daf5-566c-d75a-ab9c-df27611b03e8.jpeg)

ここで**実行**を押すと、前項で記録した操作が超高速で処理されます。
しかし、**編集**を押すと、以下のエラーが出てきます。

![07.編集時のエラー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/f645b2f3-4872-3813-624b-82f2d128046f.jpeg)

マクロが保存されたことにより、個人用マクロブックが生成されたのはいいものの、**初期状態では個人用マクロブックが非表示**になっているためです。

### マクロの編集画面表示

**表示**タブより、**再表示**を選択すると、**ウィンドウの再表示**が開き、表示するブックに**PERSONAL.XLSB**が入っています。

![08.再表示するブック.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/9962645a-7f49-287d-bc5a-cb90e645a910.jpeg)

**PERSONAL.XLSB**が選択されていることを確認し**OK**すると何も書かれていない**PERSONAL.XLSB**が開かれます。

![09.再表示された個人ブック.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/cc6f2391-547e-e19d-f767-ab1073237aed.jpeg)

これでようやく、先程保存したマクロの編集画面に行くことが出来ます。
なお、エディタ画面へは**Alt+F11**を押せばブックが非表示でもいけます。

![10.VBエディタ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/90854b7a-576f-5f51-eaa8-cb4a13352f7e.jpeg)

### 個人用マクロブックの保存

最後に個人用マクロブックを保存します。
**表示タブ**より**表示しない**を選択すると非表示されるので、そのままExcelを終了します。

すると表示されているExcelファイル以外に、**個人用マクロブックの変更を保存しますか？**とメッセージボックスが出力するので**保存**をクリックして終了します。

なお、表示されている状態であればいつものExcelファイルと同様**Ctrl+S**で保存はできますが、**次回起動時は表示されて開かれるので注意してください。**

![11.保存のメッセージボックス.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/a660bce8-2e6a-763a-576d-355fb26adee8.jpeg)

もう一度Excelを起動すると、新規Excelファイルと**非表示になっている個人用マクロブック**が同時に開かれるので、これで個人マクロブックの設定完了です。

## 個人用マクロブックにマクロを作成

マクロの記録だけでは限界があるので手動で作成する方法をサクッと紹介します。

### エディタを開く

Alt+F11でエディタをサクッと開きます。

左側に**VBAProject**のウィンドウが無い場合、**表示** → **プロジェクトエクスプローラー**を選択すると開かれます。

![12.プロジェクトエクスプローラ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/7e33d5c5-53c3-65f7-618a-e1824a2911a7.jpeg)

基本は、どのシートでも使えるようにしたいので**VBAProject** → **標準モジュール**内にモジュール(≒マクロ)を作成します。
**Microsoft Excel Objects**の説明は省きますが、当該シート内でのみ処理をしたい場合はそのシート内にマクロを作成することも可能です。

ここでは**標準モジュール**内の**Module1**を開きます。

### マクロの作成(手書き)

**Module1**には先程記録されたマクロがあると思います。

```vb:Macro1
Sub Macro1()
'
' Macro1 Macro
'

'
    Range("D7:L15").Select
    ActiveWindow.ScrollRow = 2
    '～以下てきとーな処理～

End Sub
```

上記のコードの`End Sub`以下に以下のコードを書き足してみましょう。

```vb:テストプログラム
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内の行)にある状態で標準ツールバー内の**緑三角ボタン**をクリックすると実行されます。

![13.実行ボタン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/87cb1046-e685-0eee-9a55-62d46198cb54.jpeg)

もしもコード外にカーソルがある状態で実行すると、実行できるマクロの一覧が表示されるので、該当のマクロを選択して実行しましょう。
※実行するとき、なんでも良いのでExcelファイルが表示されている状態で実行してください。

![14.マクロ一覧.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/04b67930-09bd-68a8-e57d-6bad302f296d.jpeg)


実行すると以下のポップアップが出力します。
コードで言うところの`msgbox "hello world!"`による結果です。
メッセージボックスを出力したいときは`msgbox`を利用するので、覚えておきましょう。

![15.ポップアップ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/93310442-7173-ab94-5ac3-82eb68ee9915.jpeg)

次に、開いているExcelファイルのA1セルを見ると**hello world**と入力されていると思います。
このように、Excelファイルに書き込み、または値を参照することが出来ます。

![16.セル.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/a988b0d8-76b7-c859-98b5-72acddb9744c.jpeg)

### イミディエイトウィンドウについて(デバッグ)
先程のコードの`Debug.Print "hello world ?"`は**イミディエイトウィンドウ**というデバッグ用に使用するウィンドウ上にしか表示されませんので、ウィンドウを出したいと思います。

エディタより**表示タブ** → **イミディエイトウィンドウ**を開くと、イミディエイトウィンドウが開かれます。
開くと、おそらく**hello world ?**と出力されているのではないかと思います。

![17.イミディエイトウィンドウ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/f09db81f-2f25-9051-33bc-c332f232525f.jpeg)

イミディエイトウィンドウは処理中に`debug.print xxxx`を挟み込むことで、その時のxxxxの値を取得することが出来ます。

マクロを作り込んでいて想定の挙動にならない、というときは間に`debug.print`を入れて値の遷移を確認すると良いかもしれません。

## 知っておくとマクロ作成が楽になること

併せてココらへん知っておくと作成楽になるよってことも補足します。

### 少しずつ実行したい場合はF5の代わりにF8

F5キーだと一気に実行するので、1行ごとにどう処理されているのか分かりづらいです。
なので1行ずつ実行したい場合、F8で1行ごとに実行することが可能です。

### 途中まで一気に実行したい場合はブレークポイント

「F8で1行ずつ処理できても途中までのクソ長い処理は一気に進めたい！」という場合は目的の行にブレークポイントをつけましょう。

該当行の左側をクリックすると茶色の丸がつきます。

![18.ブレークポイント.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392066/e290f002-b024-f6ff-d6c8-4a15d5eaa408.jpeg)

この状態でF5キーを押すとブレークポイント直前まで一気に実行され、中断されます。

# おわりに
ここまで読んだらとりあえず個人用マクロブックが使えるようになっているのではないかと思います。
使い方は様々あるので、**「この作業面倒だなぁ決まったこと延々とやるだけだし」**とか思った作業はどんどんマクロ化しちゃいましょう。

とはいえ、**んじゃ具体的に何ができるの？**という疑問に答えるべく、ウチが実際に使っているマクロを以下の記事で紹介してますので活用いただけたらと思います。

[個人用マクロブックのすすめ～実践編～](https://qiita.com/iguru/items/b504e0446c3080635b80)