[Excel VBA] 個人的に作業がはかどった自作Excelショートカット

概要

この記事について

Excelから文章を別のファイルや文書に移したり、
Excelのシート上で四角形や矢印などの図形の切り貼りや、図形でフローチャート、模式図を作成する機会はわりと多いかと思う。

そうした際に、
VBAを用いて、Excelにもともと備わっていないショートカットをいくつか登録しておくと、作業スピードが上がったため、
紹介したい。

ちなみに、クイックアクセスツールバーを用いて、
[Altキー + 数字] でいくつかのショートカットキーを拡張することはできるが、
個人的にAltキーからの数字キー押下はあまり押しやすいキーではないため、最小限でしか登録はしていない。
また、クイックアクセスツールバーで対応が難しいショートカットも存在する。

一覧

このようなショートカットを作成した。

機能 どんなときに使う? 割り当てたキー
対象のセルから
テキストのみコピーする
文字列両端の
ダブルクォーテーション無しで
セルの文章を取得したいとき
Ctrl + Shift + K
選択したオブジェクト(画像、図形等)の
最前面化・最背面化
入り組んだ模式図などを
作成するとき
Ctrl + Shift + B
Excelのイベント一時停止 マクロ有ブックで、
開くと自動的にフォームなどが開かれるExcelブックを、
それらの処理なしで開きたいとき
Ctrl + Shift + M

自作ショートカットのためのマクロ登録方法

こちらに分かりやすい記事がありました。
"エクセル初心者も出来る!マクロでショートカットキーを作成する方法"

①Alt + F11キーでVBEを開く。
②標準モジュールにプロシージャを記入する。
③ブックの画面に戻り、Alt + F8を押して、マクロの設定画面を開く。
④プロシージャを選択し、オプションボタンからマクロ呼出のショートカットキーを登録する。

どのキーにマクロを登録すべきか?

下記の記事に既存のショートカットが列挙されている。
"【2020年最新】Excelのショートカットキー全230個の一覧表! - Electrical Information"

このうち、まだ何も確保されていないキーを登録するとキーが競合せずにすむため都合が良い。
Ctrl + Shift + K、M、Nなどが良いかもしれない。

個別説明

対象のセルからテキストのみコピーするショートカット

エクセルでセルをコピーしてほかのアプリケーション(メモ帳とか)に張り付けしようとすると、 セル内容のほかに改行コード(LF)がついてくる。
これが結構タスクの際に邪魔になることがある(消すためにいちいちBSキーを打つのはめんどくさい)。

エクセルに、「値の貼り付け」機能は存在するのに「値のコピー」機能が存在しないことがこういう悩みを生むんだろう。

これについて対策をするショートカット。

コード

 1'******************************************************************************************
 2'*関数名    :copyCellValueToCB
 3'*機能      :アクティブセル内容をクリップボードにコピー
 4'*引数(1)   :無し
 5'******************************************************************************************
 6Public Sub copyCellValueToCB()
 7
 8    '定数
 9    Const FUNC_NAME As String = "copyCellValueToCB"
10
11    '変数
12
13    On Error GoTo ErrorHandler
14    '---以下に処理を記述---
15
16
17    'クリップボードに文字列を格納
18    With CreateObject("Forms.TextBox.1")
19        .MultiLine = True
20        .Text = CStr(ActiveCell.Value)
21        .SelStart = 0
22        .SelLength = .TextLength
23        .Copy
24    End With
25
26ExitHandler:
27
28    Exit Sub
29
30ErrorHandler:
31
32        MsgBox "エラーが発生しましたので終了します" & _
33                vbLf & _
34                "関数名:" & FUNC_NAME & _
35                vbLf & _
36                "エラー番号" & Err.Number & Chr(13) & Err.Description, vbCritical
37
38        GoTo ExitHandler
39
40End Sub

これでキー押下だけで改行コード無しの値のコピーが可能になった。

選択したオブジェクト(画像、図形等)の最前面化・最背面化

フローチャートや模式図、組織図などをExcelで作成するときに、
矢印線をテキストボックスや画像の背面に(あるいは画像などを他の図形の前面に)移動させて
被っている部分を調整したい機会があるかと思う。

その際に最前面に移動の処理を右クリックから呼び出すのは遅いので、
作業時間を大幅に削減する。

コード(最前面の場合)

 1'******************************************************************************************
 2'*関数名    :ZOrderToFront
 3'*機能      :
 4'*引数(1)   :
 5'******************************************************************************************
 6Public Sub ZOrderToFront()
 7    
 8    '定数
 9    Const FUNC_NAME As String = "ZOrderToFront"
10    
11    '変数
12    
13    On Error GoTo ErrorHandler
14    
15    Selection.ShapeRange.ZOrder msoBringToFront
16
17ExitHandler:
18
19    Exit Sub
20    
21ErrorHandler:
22    
23    If Err.Number = 438 Then
24        MsgBox "オブジェクトを選択してから実行してください。", vbExclamation, "警告"
25    Else
26        MsgBox "エラーが発生したため、マクロを終了します。" & _
27               vbLf & _
28               "関数名:" & FUNC_NAME & _
29               vbLf & _
30               "エラー番号:" & Err.Number & vbNewLine & _
31               Err.Description, vbCritical, "エラー"
32    End If
33    GoTo ExitHandler
34        
35End Sub
36

最背面の移動のショートカットの場合は、
次のように置き換える。

1Selection.ShapeRange.ZOrder msoSendToBack

Excelのイベント一時停止

こんなケースを想定。
《マクロ付エクセルブックを編集するとき、起動時に実行するイベントプロシージャを働かせないで起動したい》
《その他、シートアクティブ時のイベント等の「実行してほしくないプロシージャ」を一旦中断したい》

コード

下記のQiita記事で紹介したとおり。
"【Excel VBA】起動時に実行するマクロが鬱陶しいブックを編集したいときのツールの作成 - Qiita"

終わりに

何か他に便利そうなショートカットを見つけたら順次更新したい。

関連記事

comments powered by Disqus

Translations: