こめきちdiary

日々の仕事、生活でぶち当たった問題の解決策を書き残しています。あなたのお役に立てれば幸いです。

【Excel】エクセルVBAで図形の書式設定、規定の図形に設定を自動化する


この記事では、マクロとアドインを組み合わせて、瞬時に図形の書式を設定する方法を紹介します。

はじめに

エクセルの図形(オートシェイプ)は、デフォルトの状態では「青地」に「白文字」で、ちょっと使いずらい配色です。
初期設定で変えられると良いのですが、残念ながらエクセルにそのような機能は無いようです。
皆さんも自分の好みの書式に変更してから、「規定の図形に設定」を行っていることでしょう。

でも、この作業は異なるファイルを開く度に、毎回行う必要があるのです。正直なところ面倒くさいです。
この記事では、VBAマクロとアドイン機能を使って、瞬時に図形の書式を設定する方法を紹介します。

まずは、簡単だけどイマイチな方法を紹介します。そのあとで、本命のやり方を説明します。

目次

イマイチな方法

 やらないよりは、やったほうが良いけれど。
 もっと楽な方法はないの? と思ってしまうやり方を2つ紹介します。

方法1:右クリックして規定の図形に設定する

 「はじめに」で触れたように「規定の図形に設定」を使うやり方です。
 図形を目的の書式に変更した後、右クリックして「規定の図形に設定」を選びます。
 これ以降、図形を挿入すると設定した書式で図形が作成できます。

 お手軽かつ実用的な方法です。
 ですが、設定を保存したファイルにのみ有効なので、新たにファイルを開くたびに設定しなければなりません。
 よって、時短の効果は低いと言わざるを得ません。

方法2:テンプレートファイルを作る

 新規に作成したファイルで、規定の図形に設定を行い、すべての図形を削除しておきます。
 「名前をつけて保存」で、エクセルテンプレートを選択し保存します。xltxファイルとして保存されます。

 このファイルに「Book.xltx」と名前をつけて下記に配置します。

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

 新しくファイルを作成する際に、保存したファイルが使用されるため、規定の図形が保存時のものとなります。
 ですが、作成済のファイルに対しては適用されないため、やはり効果は低いと言わざるを得ません。


マクロを作ってアドインに登録して使う

 本命の方法です。
 図形の書式設定を行うマクロを作成し、そのマクロをアドインとして登録します。
 アドインは設定を行ったPC上のエクセルで有効となるため、いちど設定を行いさえすればその後は恒久的に利用できます。

マクロを作る(.xlsm)

 エクセルマクロファイル(.xlsm)を新規作成し、下記のサンプルコードをVBAの標準モジュールに貼り付けてください。

Sub ローカル設定_書式の設定()
'
' Macro1 Macro
'
    On Error Resume Next
    'オートシェイプ本体の色→ 白色塗り潰しにする
    With Selection.ShapeRange.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorBackground1
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
        .Solid
    End With
    '枠線の設定(色)→ 赤色にする
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
    End With
    '枠線の設定(太さ)→ 0.75にする
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .Weight = 0.75
    End With
    '文字色の設定→ 赤色にする
    With Selection.ShapeRange.TextFrame2.TextRange.Font.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    
    '上記設定を既定値として保持する
    Selection.ShapeRange.SetShapesDefaultProperties
End Sub
標準モジュールに登録する

 サンプルでは設定項目が足りない! という方は、「マクロの記録」を使って、独自の項目設定コードを作成して差し替えてください。
komekichix.hatenablog.com

動作確認

 適当なオートシェイプを挿入します。
 オートシェイプを選択してから、マクロを実行します。なお、動作確認の際には on error resume の行をコメントアウトしておくと、問題箇所でエラーで処理が中断するため間違い箇所を見つけやすいです。
 エラーが発生しなくなって下記の条件をクリアできればマクロの作成は完了です。

1.選択した図形が目的の書式に変わっていること。
2.新しく図形を挿入した際に、目的の書式で作成されること。

マクロを実行すると、規定の書式を含めて変更される。
アドインファイルで保存する (.xlam)

 マクロが正しく動作することが確認出来たら、アドインファイルとして保存を行います。
 「名前をつけて保存」で、ファイルの種類を「Excelアドイン(*.xlam)」として保存します。ここでは、「ローカル設定_書式の設定.xlam」として保存しています。
 Excelアドインファイルは、通常のエクセルファイルとは異なり、そのPCで定められている場所に保存されます。
 デフォルトの保存先は以下です。次項のアドイン一覧で確認できます。

C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\AddIns

Excelアドイン(*.xlam)として保存する。
アドインの確認、有効化

 アドインが正しく保存されているかを確認します。まずは、エクセルを起動します。
 「ファイル」-「アドイン」を選択します。
 一覧に、前項で保存したファイルが登録されていることを確認します。

アドイン一覧に保存したファイルが表示される。

 管理:Excelアドインの横の設定ボタンを押します。そして、「ローカル設定_書式の設定」チェックボックスをオンにします。

「ローカル設定_書式の設定」チェックをつける。

 「ローカル設定_書式の設定」が「アクティブなアプリケーション アドイン」へ移動します。これで、アドインの有効化は完了です。

アクティブへ移動する。
リボン(ツールバー)に登録する

 作ったアドインを実行するためのボタンをリボンに登録します。
 「ファイル」-「リボンのユーザー設定」を選択します。
 「新しいタブ」ボタンでタブが作られます。▲▼で好きな位置に移動しましょう。

アドイン用にリボンのタブを作成する

 「新しいグループ(ユーザー設定)」を選択します。
 左側の枠で、「コマンドの選択」からマクロを選びます。→マクロ名が表示されます。
 マクロ名を選択して、「追加」ボタンを押します。

登録したアドインを選択して追加する。

 OKボタンを押します。
 これで登録完了です。

新しいリボンのタブが追加された。
完成

 正しく動作するか、試してみましょう。
 図形を挿入します。
 図形を選択して、「新しいタブ」-「ローカル設定_書式の設定」を選択します。

図形を選択後、「書式の設定」ボタンを押す。

 書式が変わりました。

選択した図形の書式が変わった。

 そして、新たに挿入した図形も目的の書式になっています。

挿入する図形も書式が変わっている。


おわりに

これまで、何年間も図形の書式変更をやり続けて来ました。
どれだけの時間的リソースを消費したことでしょうか。
書式設定1回につき20秒かかり、1日3ファイルを開くとすれば、1日につき60秒です。
1週間で5分、1ヶ月にして20分、年間では240分、すなわち4時間。
なんと、1年間で半日も思考を停止し、書式の設定だけに時間を費やしていたことになります。
このアドインを使えば、そんな思考停止状態ともおさらばです。
無駄を無くして、限られた時間を有意義なことに使おうではありませんか。

なお、この仕組みの実現に当たっては、こちらのサイトにお世話になりました。ありがとうございます。
VBAでオートシェイプの既定設定を行う】
https://vbabeginner.net/make-default-settings-for-autoshape/
【自作したVBAをアドインにして使う方法】
https://qiita.com/comugi/items/21dfc8baf1666e239536

以上です。