m-eye blog

ノンプログラマによるVBAとPythonの学習記録

VBAでマクロをショートカットに登録すると便利な件

f:id:m-eye:20181006130806p:plain

 

短くて簡単に書けて役に立つマクロ

VBAを始めた頃に書いて、今でも役に立っているマクロをご紹介します。マクロの第一の利点は、他人のためではなく、自分の作業を楽にしてくれることですね。マウスをクリックしたりボタンを押したりする代わりに、マクロをキーボードショートカットに登録すれば、ホームポジションから手を離さずにExcelを操作できます。

  • 動作は無保証です。
  • ソースコードは自由に使っていただいてかまいません。
  • 動作確認は、Windows 10 + Excel 2016(Office 365 Solo)でおこなっています。

 

保存系マクロ

ファイルを保存するとき、Ctrl + Sというショートカットで上書き保存することができますが、それ以外のいろいろな条件の下でのファイル保存には適切なショートカットがありません。

そこで、マクロを自作しショートカットに登録します。

ファイルが保存されていない場合だけ、ファイルを保存するマクロ

このマクロの特長は、ファイルが保存されていないときだけ上書き保存コマンドが実行され、ファイルが保存されているときは上書き保存コマンドが実行されないことです。

Sub S_SaveWorkbook()
    With ActiveWorkbook
        If (.Path = "") Or (.Saved = False) Then
            .Save
        End If
    End with
End Sub

Pathプロパティは、ブックが作成されてから一度も保存されていない場合に長さ0の文字列""を返し、また、Savedプロパティは、ブックが最後に保存されてから変更が加えられていないかどうかの値をTrueまたはFalseの値で返します。Trueの場合は、ブックが最後に保存されてから変更されていないことを表し、Falseの場合は、ブックが最後に保存されてから変更された部分があることを表します。

アクティブなワークブックに関して、PathプロパティとSavedプロパティを用いてIf文で条件判断して、ファイルが保存されていない場合だけ、ファイルを保存します。

「名前を付けて保存」ダイアログを表示するマクロ

「ファイル名を付けて保存」ダイアログボックスの初期値を設定して表示するには、Showメソッドの引数を使用します。

Sub S_ShowSaveAs()
    Application.Dialogs(xlDialogSaveAs).Show _
        ActiveWorkbook.Name
End Sub

Showの後に半角スペースを挿入して、ActiveWorkbook.Nameと記述することによって、ファイル名がダイアログボックスに設定された状態で「名前を付けて保存」ダイアログを表示できます。

わたしはこれをCtrl + Shift + Sに設定しています。

ショートカットキーを設定することで、いちいちメニューを開く手間を省くことができます。

ブックを保存して閉じるマクロ

Sub S_SaveCloseWorkbook()
    With ActiveWorkbook
        .Save
        .Close
    End With
End Sub

このマクロは、ブックを保存して、次の終了するという2つの作業を1つにまとめたいので作りました。

保存と終了は常に発生する作業なので、1つにまとめたほうが絶対に便利です。

わたしはこれはCtrl + Wに設定しています。

ブックを保存せずに閉じるマクロ

Sub S_CloseWorkbookWithoutSaving()
    With ActiveWorkbook
        .Saved = True
        .Close
    End With
End Sub

マクロをテストしているときなどは、頻繁にブックを保存せずに閉じるということが発生します。そのとき、ブックを保存せずに閉じたいときに確認ダイアログが出てきて、「OK」をいちいち押すのが面倒なので、「OK」を押さなくてもいいように、このマクロを作りました。

まだ保存していないブックのSavedプロパティにTrueを設定することで、マクロは「このブックはすでに保存されている」と判断して、確認ダイアログを表示せずにブックを閉じることができます。

エクセルを終了するマクロ

Sub S_QuitApp()
    Application.Quit
End Sub

エクセルを終了するショートカットコマンドはAlt + F4ですが、とても押しにくいので、自分の好きなショートカットでエクセルを終了したいので作ったマクロです。

 

印刷系マクロ

印刷もCtrl + Pで簡単に印刷できますが、印刷プレビューやページ設定ダイアログには適切なショートカットがありません。

また、エクセルはもともと画面を高速に表示させるために(今のPCではそんな必要はありませんが)、ディスプレイに表示される画面と印刷される画面とでは、微妙な違いがあります。

だから、印刷を前提としたVBA開発をおこなう場合、頻繁に印刷プレビューとページ設定を確認します。そのためにも、印刷プレビューとページ設定はショートカット一発で表示できたほうがいいと思います。  

印刷プレビューを表示するマクロ

Sub S_ShowPrintPreview()
    ActiveSheet.PrintPreview
End Sub

エクセルがリボンを採用してから、印刷プレビューだけを表示することが面倒くさくなりました。そこで、このマクロをショートカットに登録すれば、ショートカット一発で印刷プレビューだけを表示することができます。

ページ設定を表示するマクロ

Sub S_ShowPageSetup()
    Application.Dialogs(xlDialogPageSetup).Show
End Sub

ページ設定のダイアログも印刷プレビューと同じく、エクセルのリボン採用後、表示することが面倒くさくなりましたので、このマクロをショートカットに登録して使っています。

 

貼り付け系マクロ

標準の貼り付けコマンドにはCtrl + Vというれっきとしたショートカットがありますが、値のみ・数式のみ・書式のみ貼り付けるコマンドには適切なショートカットはありません。

Excel 2010以降、右クリックすると、右クリックメニューが出て、そこに貼り付け系ショートカットが出るようになりましたが、一発でショートカットが使えれば、それに越したことはありません。

値のみを貼り付けるマクロ

Sub S_PasteValues()
    Selection.PasteSpecial Paste:=xlValues
End Sub

このマクロはCtrl + Shift + Vに登録しており、わたしが一番使うマクロです。

この機能を使うと、通常のエクセル操作で、貼り付け先のシートの書式を崩さずに値のみ貼り付けられるので、大変重宝しています。

数式のみを貼り付けるマクロ

Sub S_PasteFormulas()
    Selection.PasteSpecial Paste:=xlFormulas
End Sub

この機能も、貼り付け先のシートの書式を崩さずに数式のみ貼り付けられます。

書式のみを貼り付けるマクロ

Sub S_PasteFormats()
    Selection.PasteSpecial Paste:=xlFormats
End Sub

このマクロはあまり使うことはありませんが、例えばシート上に書式を設定せずに先にデータを入力してしまい、後から書式を設定したい場合に使います。

右クリックメニューでもあまり困ることはないので、出番はすくないでしょう。

値・数式のみをクリアするマクロ

Sub S_ClearContents()
    Selection.ClearContents
End Sub

このマクロはDELETEキーを押さずに(ホームポジションから手を離さずに)、値・数式のみをクリアできるので、2番目に重宝しています。

 

セル操作系マクロ

セルの結合・解除にもショートカットはありません(Altを併用した、複数キー使用のショートカットは除く)。

Ctrl + 1のショートカットで「セルの書式設定」->「配置」->「セルの結合」を使うか、リボンからボタンを押すしかありません。

セルを結合するマクロ

Sub S_MergeCells_True()
    Selection.MergeCells = True
End Sub

セルの結合を解除するマクロ

Sub S_MergeCells_False()
    Selection.MergeCells = False
End Sub

列幅を特定のセル範囲のデータの幅に合わせるマクロ

Sub S_ColumnsAutoFit()
    Selection.Columns.AutoFit
End Sub

通常、特定のセルの列幅の自動調整はリボンから選択しなければなりませんが、このマクロを使えば(ショートカットに登録すれば)、ホームポジションから手を離さずに調整することができます。

 

うまく使うにはショートカットを登録しましょう。

紹介したマクロはボタンに登録しても、Alt + F8から起動しても、きちんと動作します。

しかし、そうせずに、同じ画面でショートカットを登録しましょう。

ショートカットを登録するマクロを選択して、「オプション」ボタンを押します。
f:id:m-eye:20181007170648p:plain:w400

「OK」を押して、ショートカットを登録します。この画像の場合は、Ctrl + Mを登録することになります。
f:id:m-eye:20181007170715p:plain:w400

このようにしてショートカットに登録すれば、キーボードのホームポジションから手を離さずにエクセルを操作することができて、飛躍的に効率がアップします。

みなさんもぜひお試しください。

 

Copyright 2018 m-eye blog All Rights Reserved.