定時で帰ろう!Excel VBA効率化

仕事で身に着けたVBAのお役立ち情報を発信します

【ExcelVBA】XLSTARTフォルダの活用法

 前回は個人用マクロブックを複数配置したらどうなるのかというお話をしました。今回はXLSTARTフォルダの活用法や挙動をお話ししていきます。

1. XLSTARTフォルダとは

 個人用マクロブックの配置先として知られるこのフォルダは、名前の通り「ExcelがStartするときに読み込まれるフォルダ」です。そのため、個人用マクロブックのためだけに存在するわけではなく、Excel起動時に自動で起動したいものを格納しておくフォルダです。

2. 色々格納してみた

 XLSTARTフォルダに色々格納してみました。今回格納したファイルはこちらです。 f:id:TenTon:20210402080146p:plain

 さっそくエクセルを起動してみましょう。ワークシートは「XLSBファイル」以外全て開きましたね。「XLSBファイル」もVBE(Visual Basic Editor)を確認すると、読み込まれていることが分かります。ただし、未保存の新しいブックは表示されていません。

3.ファイル名の異なる個人用マクロブックの挙動解説

 前回、ファイル名の異なるブック(PERSONAL.XLSB)が存在すると、 自動でマクロが読み込まれるが、新規ブックが自動で開かないということをお話ししました。

  過去記事はこちら! tentonmacro.hatenablog.jp

 実はファイル名が異なる個人用マクロブックは、個人用マクロブックとして読み込まれず、単なる1つのファイルとして読み込まれます。このとき、以下2点が要因となりワークシートが何も表示されない状態になります。

  • 「XLSBファイル」のワークシートは、デフォルトで非表示に設定されている
  • 「XLSTART」フォルダに個人用マクロブック以外のファイルを格納すると、未保存の新しいブックは表示されない

 ちなみに、[表示タブ]-[再表示]で表示したい「XLSBファイル」をを選択すると、ワークシートを表示できます。

f:id:TenTon:20210405084527p:plain

4. まとめ

 今回は「XLSTART」フォルダに焦点をあて、活用方法や複数の個人用マクロブックを配置した際の挙動の解説をしました。頻繁に使うファイルはXLSTARTフォルダを活用すると便利ですよね。

 ただし、起動のたびにすべてのファイルを開くので、それだけ時間がかかります。ここまで説明してきてあれですが、よく開くファイルはデスクトップにショートカットでも置いておけば十分ではと思ってしまいます笑。

【ExcelVBA】個人用マクロブックを複数ファイル使用するとどうなるの?

 Excelの立ち上げと同時に読み込まれる便利な個人用マクロブック。このマクロブックは、ファイル名が「PERSONAL.XLSB」と決められており、1ファイルのみ存在できると聞いたことがある方が多いかと思います。では2つ以上配置したらどうなるのか、検証してみようと思います。

1. 検証条件

 こちらの表は、どのように個人用マクロブックを配置するのかを示しています。PERSONAL.XLSBは通常の個人用マクロブックです。PERSONAL.XLSBは個人用マクロブックを作成後に名前を変更したものです。

# PERSONAL.XLSB PERSONAL2.XLSB
1 配置 -
2 - 配置
3 配置 配置

画像付きで確認したい方は、 こちらを展開してください

3. 検証結果

 さて検証結果です。結論からすると、先ほどの表の2,3ともに、ファイル名の異なるブック(PERSONAL.XLSB)が存在すると、 自動でマクロが読み込まれるが、新規ブックが自動で開かないという挙動をとりました。

3-1. Excel起動時(新しいブック)

 Excelを何も開いていない状態で、Excelを起動してみました。その結果ファイル名の異なるブックが存在する場合、ワークシートは表示されませんでした。代わりに新規から新しいブックを表示できました。

通常の個人用マクロブックのみ存在 ファイル名の異なるブック存在時
Excel起動 f:id:TenTon:20210320111654p:plain f:id:TenTon:20210320111748p:plain

3-2. Excel起動時(保存済みブック)

 過去に保存したことのあるExcelファイルを起動した場合の挙動も確かめてみました。これはどちらも変わらず、保存済みブックのみが開きました。

3-3. マクロの読み込み・実行

 VBE(Visual Basic Editor)を確認すると、どちらも読み込まれています。またマクロも実行できました。そのほか通常のExcelの機能など問題はありませんでした。

f:id:TenTon:20210320120122p:plain

4. まとめ

 今回は個人用マクロブック(XLSBファイル)が複数存在する場合、どのような挙動をとるのか確認しました。結論としてはファイル起動時に挙動は変わるが、マクロ実行も含め問題なく使用できるということが分かりました。  例えば、他者からもらった個人用マクロブックを一時的に使用したいのであれば、名前を変更して格納すればよさそうですね。  次回は、なぜこのような挙動になったのかということを書いていきます。ご興味のある方はまた読んでください。

【ExcelVBA】個人用マクロブック無効化/削除方法

 個人用マクロブックはExcelの立ち上げと同時に読み込まれるため、便利ですよね。ただ状況によっては読み込みさせたくない、もう使わないから削除したいなどあるかと思います。今回は一時的に無効化したい、削除したい場合を解説していきます。

1. 個人用マクロブックに保存されたマクロの無効化

 無効化する方法を紹介と書きましたが、個人用マクロを無効化する一般的な方法はないです。ここでは私ならどう対応するのかという観点で記載していきます。

1-1. 一部マクロの無効化

 マクロの起動をショートカットキーで制御しているのであれば、一時的にショートカットキーの登録を削除すれば無効化できます。

 またソースコードの編集をして無効化する例として、(A)マクロ全体をコメントアウトする (B)Subプロシージャの宣言(Sub マクロ名()のところ)の直下に「Exit Sub」を書き込むという選択肢もあります。しかしどちらも時間がかかり、かつバグを埋め込む危険性もあるのでお勧めはできないです。

1-2. 全てのマクロの無効化

 これが一番簡単です。個人用マクロブックを一度別のフォルダに移動すればよいです。個人用マクロブックは以下フォルダに格納されています。個人用マクロブックは以下フォルダに保存されます。[ユーザー名]はPC環境によって異なります。

C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Excel\XLSTART

[Windowsキー] + [R] を同時に押し、以下パスを入力することで簡単にフォルダを表示できます。

%APPDATA%\Microsoft\Excel\XLSTART

 注意点は名前の変更ではなく、必ずフォルダ移動するようにしましょう。名前を変更しても読み込まれてしまいます。

2. 個人用マクロブックに保存されたマクロの削除

2-1. 一部マクロの削除

 Alt + F11キーでVisual Basic Editor起動し、対象のマクロを削除します。直接コードを削除してもいいし、Module単位で削除する場合はModuleの解放をしてもいいですね。

2-2. 全てのマクロの削除

 全てのマクロが不要であれば、個人用マクロブックを削除してしまえばよいです。個人用マクロブックの保存場所は1-2-全てのマクロの無効化に記載しています。

3. まとめ

 今回は個人用マクロブックに作成したマクロの無効化/削除方法を見てきました。無効化するにしても削除するにしても、基本はフォルダー移動が簡単です。ぜひご参考にしてもらえればと思います。

【ExcelVBA】個人用マクロブック作成方法

 マクロを実行するためには、マクロを保存しているブックを読み込んでいる(≒ファイルを開いている)状態にする必要があります。個人用マクロブックはExcelを立ち上げると同時に読み込まれるので、常にマクロを実行できる状態になります。今回はこの便利な個人用マクロブックを作成する方法を見ていきましょう。

 個人用マクロブックとマクロ有効ブック、アドインの比較を詳しく知りたい方はこちらの記事をご覧ください。 tentonmacro.hatenablog.jp

1. 個人用マクロブックの作成

 個人用マクロブックは[マクロの記録]によって作成します。図のように、①[開発]タブから[マクロの記録]を選択し、②表示された画面で[個人用マクロブック]を選択、③[OK]を押下 、④[開発]タブの[記録終了]を選択します。これだけで個人用マクロブックが作成されます。

f:id:TenTon:20210314110104p:plain
個人用マクロブックの作成

2. 個人用マクロブックの保存 

 次に作成した個人用マクロブックを保存しましょう。⑤[開発タブ]の[Visual Basic]を選択し、⑥表示された画面で[VBAProject(PERSONAL.XLSB)を選択、⑦[ファイルタブ]から[PERSONAL.XLSBの上書き保存]を選択します。(初めて保存する場合も上書き保存です。ファイル名は「PERSONAL.XLSB」で固定なので、上書き保存と表示されているのでしょう)。

 個人用マクロブックは以下フォルダに保存されます。[ユーザー名]はPC環境によって異なります。

C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Excel\XLSTART

[Windowsキー] + [R] を同時に押し、以下パスを入力することで簡単にフォルダを表示できます。

%APPDATA%\Microsoft\Excel\XLSTART

保存されているのを確認できました。 f:id:TenTon:20210319212258p:plain

3. まとめ

 今回は個人用マクロブックの作成方法を解説しました。今後は個人用マクロブックの活用方法も紹介していきます。

【ExcelVBA】変数宣言は必須?

 皆さんはマクロを書くとき、ちゃんと変数宣言(Dim ~ってやつ)をしていますか?書かなくても動くし、変数宣言したらエラーがでたし、よくわからないから書かなくなったという人も多いのではないでしょうか?結論から申し上げますと、変数宣言は「①処理の高速化」「②バグの見つけやすさ」の2つの観点で記載すべきです。それぞれ解説していきます。

1. 変数宣言とは

 変数宣言とはプログラム内で使用する変数を宣言することです。ここでは以降の話につなげるために少しだけ詳しく書きます。

Sub 変数宣言()
    'Dim 変数名 As 型名 で変数を定義します。
    Dim i As Integer '変数iをInteger型で定義
    Dim j As Variant '変数jをVariant型で定義
    Dim k            '型宣言をしないとVariant型になる
    
    i = 100         '変数iに100を代入
    j = "文字列1"  '変数jに文字列1を代入
    k = "文字列2"  '変数kに文字列2を代入
    l = "文字列3"  '変数lに文字列3を代入
                    '変数lはVariant型
End Sub

説明はコメントで書いてしまいましたが、改めてポイントだけ。Variant型は数値、文字列、ワークブックなどのオブジェクトでもなんでも格納できる型です。また変数宣言時に型名を省略、または変数宣言自体を省略した場合は、自動でVariant型になります。良いことばかりのVariant型ですが、次にVariant型の欠点をお話ししていきます。

2. 変数宣言すべき理由~その① 処理の高速化~

 便利なVariant型ですが、実は処理速度が遅いという問題があります。実験をしてみましょう。以下のプログラムは変数counterと変数sumをLong型で宣言し、1から1億までの合計を算出しています。以下例は「(A)Long型で宣言」で宣言していますが、その他「(B)Variant型で宣言」「(C)型名省略」「(D)宣言なし」の場合に分け、それぞれ実行時間を算出してみます。

(A)Long型で宣言

Sub SpeedTest()
    Dim startTimer As Double
    Dim endTimer As Double
    startTimer = Timer
    
    '### 1~1億までの合計値を計算ここから ###
    Dim counter As Long
    Dim sum As Long
    For counter = 1 To 100000000
        sum = counter + 1
    Next
    '### 1~1億までの合計値を計算ここまで ###

    endTimer = Timer
    result = endTimer - startTimer '実行時間を計算
    Debug.Print result
End Sub

 さっそく実行してみました。私のPCの環境ではありますが、5回実行した結果はこちらです。

(A)Long型で宣言 (B)Variant型で宣言 (C)型名省略 (D)宣言なし
1回目 1.070 2.906 2.734 2.875
2回目 1.063 2.734 2.750 2.867
3回目 1.109 2.789 2.742 2.891
4回目 1.047 2.758 2.844 2.891
5回目 1.063 2.742 2.750 2.906
平均 1.070 2.786 2.764 2.886

 「(A)Long型で宣言」が約3倍速いですね。実はVariant型は多くのメモリを消費します。プログラム内ではそこまで大きな容量がいらないのに、不必要にメモリを食っている状態ですね。対して(B)~(D)は記載方法が異なるだけで、全てVariant型で宣言していることと同意のため、実行時間は変化ないです。

 このように、適した型宣言を使うことで、マクロの処理速度を向上させることができます。

3. 変数宣言すべき理由~その② バグの見つけやすさ~

 続いて別の例を見てみます。このプログラムは1~10までの数値を足し、メッセージボックスに合計値を表示するプログラムです。実行してみましょう。

Sub Test()
    Dim counter As Integer
    For counter = 1 To 100
        sum = conter + 1
    Next
    MsgBox sum
End Sub

実行結果

f:id:TenTon:20210313223844p:plain
実行結果(変数宣言なし)

 あれ?0と表示されてしまいました。そうです、実はこのコードにはバグが埋め込まれていました。counterのスペルミスがありますね。今回は簡単なプログラムのため、簡単にバグをみつけ修正できます。しかし規模の大きなプログラムの場合、バグ要因を見つけるのに一苦労ですよね。また結果が表示されているので、バグだと気が付けない可能性もあります。

 ここで、変数宣言を強制するように設定を変更します。設定の方法は簡単です。1行目に「Option Explicit」と記載するだけです。1行追加し、実行してみましょう。

実行した結果がこちらです。

f:id:TenTon:20210313225019p:plain
実行結果(変数宣言強制)
変数conterが定義されていないとエラーが表示されています。バグが埋め込まれている箇所が明確にわかるので、修正が簡単ですね。

4. 結論

 今回は、なぜ変数宣言をしたほうがよいのかを「処理速度」「バグの見つけやすさ」の2つの観点からお話ししました。私も初心者の頃は、型がよくわからない、宣言したらエラーがでたという理由で、変数宣言を避けていました。ですが慣れれば変数宣言をしたほうが楽になりました。なぜならどこにバグがあるのかを教えてくれるからです。また一番怖いのはバグがあることに気が付かずに利用してしまうことです。変数宣言を強制化がこれらを解決してくれます。  今回の情報が皆さんの役に立てば幸いです。今後もこのようなVBA、マクロに関する情報をお届けします。よろしくお願いします!!!

【ExcelVBA】マクロはどこに保存すればいい?

 皆さんは作成したマクロをどこに保存していますか?「マクロ有効ブック」「個人用マクロブック」「アドイン」と3つの方法があります。ここでは、それぞれの特徴の違いをまとめ、どの使用方法が最もご自身の作業にあっているのか考えていきましょう。

1. マクロ有効ブックの特徴

 通常のブックファイル(.xlsx)にマクロを保存できるように拡張したものが、マクロ有効ブック(拡張子「.xlsm」)です。他の2種との違いは、ファイルはどこに格納してもよく、マクロを実行したいときにファイルを開く必要があります。また複数のファイルに分けることができるので、シートも自由に使えます。

2. 個人用マクロブックの特徴

 イメージで言うと、マクロ有効ブックを「常時自動起動化」したものです。ファイル名、保存場所ともあらかじめ決められており、使用できるのは1ファイルのみです。また設定次第でシートを表示することも可能です。

3. アドインの特徴

 個人用マクロブックから、シートを完全に奪い去ったものが、アドインです。シートとの依存関係がなくなるため、コーディングは難しいです。しかしデータと切り離されているためバージョンアップは容易です。(マクロブックの場合、マクロを保存しているブックにユーザが書き込みをしている場合、データ移行などの手間が発生する)。保存場所はあらかじめ決められていますが、ファイル名は自由です。

4. 比較

これまで記載した内容をざっとまとめてみました。

観点 マクロ有効ブック 個人用マクロブック アドイン
ファイル名/拡張子 ~.xlsm PERSONAL.xlsb ~.xlsa
保存ディレクト 任意のフォルダ %APPDATA%\Microsoft\Excel\XLSTART\ %APPDATA%\Microsoft\AddIns\
シート表示 可能 設定次第で可能 不可
有効範囲 開いている時のみ 常時 常時
作成難易度

5. 私のおすすめ

 私が一番使うのは、「マクロ有効ブック」です。理由は作成が簡単だからです。  簡単な理由として、シートを自由に使えるということがあります。シートにはマクロを動かすための設定値を入力できるようにしておきます。例えば、「A1セルに入力したフォルダ内のファイル名を取得」「A1セルに名前を入力して対象のファイルに名前を入力」のようなマクロを書くことができます。これを個人用マクロブックやアドインで再現しようとすると、「ポップアップを表示させ、設定値を入力」や「コードに直接書き込む」くらいしかないです。ポップアップで入力した内容は実行のたびに書かなくてはいけませんし、コードに書き込むのはバグを埋め込む危険性が高いですね。「マクロ有効ブック」であれば、シートに入力されているので、設定値の保存もできますね。

 またマクロは実行後に「元に戻す操作(Ctrl + Z)」が使用不可となります。マクロを実行した時点で過去の履歴は全て削除され、マクロの実行結果だけが残ります。激しくタイピングする私は常にマクロが使えるような状態はリスクが高いです(笑)   

6. 結論

 「マクロ有効ブック」「個人用マクロブック」「アドイン」とも開発者、使用者の目線から一長一短があります。ですが、どの保存方法でも実現不可能な機能はないです。ここまでのお話をもとに、どの形式で保存するのが自身に適しているのか参考になれば幸いです。

ご挨拶

自己紹介

 こんにちは、てんとんと申します。 私はIT企業に勤めるサラリーマンです。 職業柄、Javaなどのプログラミングはよくやっています。 ExcelVBA(マクロ)は完全独学です。仕事の業務が嫌すぎて、自動化できる業務を自動化するために、独学で勉強しました笑

 このブログでは主に、ExcelVBA(マクロ)のお役立ち情報を届けます。業務活用している身として、即使えるコードや考え方、独学で学んだ身として、最短でマクロを使えるようになる必要最低限の知識などお届けします。 その他、私の失敗事例などからマクロを作成する際の注意事項などもお届けできればと思います。

 皆さんもぜひExcelVBA(マクロ)を活用し、楽しく業務を効率化していきましょう。