マクロの記録を料理する3

中級VBA

マクロの記録を利用してプログラムを作成

 書式設定を変更したいようなマクロを組む時、マクロの記録を使うと余計なプロパティの設定まで記録されています。
 例えば、「取り消し線を引く」「取り消し線を消す」というような正反対のマクロを記録すれば、互いに共通する部分は不要と言えますのでカットしてOKという事になります。
 
 さらに、Select、Selection の部分は統合できますので、一行で書く事もできます。
 実際のプログラムで解説します。

マクロの記録でプログラムを書かせる

 今回は、図のように B2からC4 部分に取り消し線を引いたり、消したりするマクロを作ってみたいと思います。

マクロの記録を実行(1回目)

 今回のマクロの記録では、該当部分のセルを選択するところから記録させたいので、まだ選択しない状態で「マクロの記録」を実行します。
 メニューの「開発」から「マクロの記録」をクリックして始めます。
 1.B2からC4のセルをドラッグして選択状態にします。

 2.右クリックで「セルの書式設定」を選択します。

 3.取り消し線にチェックを入れます。

4.取り消し線が付きましたので、メニューの「開発」から「記録停止」をクリックして記録を終えます。

マクロの記録を実行(2回目)

 今度は逆動作(取り消し線を消す)をマクロを記録します。
 該当部分のセルを選択するところから記録させたいので、関係ないセルを選択した状態で「マクロの記録」を実行します。

 1、2の手順は前と同じです。3のところで取り消し線のチェックを外します。
 4、メニューの「開発」から「記録停止」をクリックして記録を終えます。

マクロの記録で書かれたマクロを確認する

 記録されたマクロは以下のようになります。
 よく見ると殆ど同じ内容です。
 違うのは、 .Strikethrough の部分だけですね。
 なので、WithEnd With で囲まれた部分で同じものはカットして構いません。

'取り消し線を引く
Sub Macro1()
'
' Macro1 Macro
'

'
    Range("B2:C4").Select
    With Selection.Font
        .Name = "MS Pゴシック"
        .FontStyle = "標準"
        .Size = 11
        .Strikethrough = True
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
End Sub

'取り消し線を外す
Sub Macro2()
'
' Macro2 Macro
'

'
    Range("B2:C4").Select
    With Selection.Font
        .Name = "MS Pゴシック"
        .FontStyle = "標準"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
End Sub

 書き変えると以下のようになります。

'取り消し線を引く
Sub Macro1()
    Range("B2:C4").Select
    With Selection.Font
        .Strikethrough = True
    End With
End Sub

'取り消し線を外す
Sub Macro2()
    Range("B2:C4").Select
    With Selection.Font
        .Strikethrough = False
    End With
End Sub

 更に、

Range("B2:C4").Select
With Selection.Font

 のRange(“B2:C4”).SelectSelection 部分は統合できるので、以下のように書けます。
 
 With Range(“B2:C4”).Font

 書き変えると以下のようになります。

'取り消し線を引く
Sub Macro1()
    With Range("B2:C4").Font
        .Strikethrough = True
    End With
End Sub

'取り消し線を外す
Sub Macro2()
    With Range("B2:C4").Font
        .Strikethrough = False
    End With
End Sub

 更に、With の書き方やめれば1行で書く事もできますが、後で他のプロパティ値も変更したくなった時のためにここで終わりにしておきます。

 このように2つの正反対の操作をマクロの記録にすると、差分から必要な処理を見極める事ができるようになります。

まとめ

 改造の手順としては、以下のような感じで正反対の動作に必要な処理を見つける事ができます。
・Macro1 と Macro2 で被っているところを削除
・Range(“B2:C4”).Select と Selection は統合する

 必要なプロパティ値を探さなくて良いので便利だと思います。是非活用してみてください。

コメント

タイトルとURLをコピーしました