【VBA】Excelマクロを利用して作業効率を上げたい③

はじめに

皆様。Excelは業務で活用しているでしょうか?
本日は久しぶりにあったら便利かもしれないマクロを作成してみました。

実装3-1:文字列揃えマクル

こちらでは、Ctrl + Shift + 3を押下するたびに「左→中央→右→左→...」といったように文字列の整列方法を切り替えます。

こちらのマクロは、セルだけではなく、図形を選択した際は図形の整列方向が変わります。

' モジュール内の先頭(全体で有効な変数)に配置
Public CycleAlignmentState As Long
Sub CycleAlignment()
    ' もし状態が不正(初回実行など)なら、初期状態を左揃え(1)にセット
    If CycleAlignmentState < 1 Or CycleAlignmentState > 3 Then
        CycleAlignmentState = 1
    Else
        CycleAlignmentState = CycleAlignmentState + 1
        If CycleAlignmentState > 3 Then CycleAlignmentState = 1
    End If

    Dim 新整列方法 As Long
    Select Case CycleAlignmentState
        Case 1
            新整列方法 = xlLeft   ' 左揃え
        Case 2
            新整列方法 = xlCenter ' 中央揃え
        Case 3
            新整列方法 = xlRight  ' 右揃え
    End Select

    Dim 処理済み As Boolean
    処理済み = False

    ' セルの処理(Rangeの場合)
    Dim rng As Range
    On Error Resume Next
    Set rng = Selection
    On Error GoTo 0
    If Not rng Is Nothing Then
        ' セルに対して水平整列を設定
        rng.HorizontalAlignment = 新整列方法
        処理済み = True
    End If

    ' シェイプの処理(ShapeRangeの場合)
    Dim shpRange As Object
    On Error Resume Next
    Set shpRange = ActiveWindow.Selection.ShapeRange
    On Error GoTo 0
    If Not shpRange Is Nothing Then
        Dim shp As Shape
        For Each shp In shpRange
            ' テキストを持つシェイプの場合のみ
            If shp.TextFrame.HasText Then
                shp.TextFrame.HorizontalAlignment = 新整列方法
                処理済み = True
            End If
        Next shp
    End If

    ' どちらも処理されなかった場合
    If Not 処理済み Then
        MsgBox "セルまたはシェイプが選択されていません。", vbExclamation
    End If
End Sub

キー定義をするために、以下のコードをpersonal.xlsbへ追加します。
参考

Private Sub Workbook_Open()
    Application.OnKey "^+3", "CycleAlignment"
End Sub

実装3-2:垂直方向の整列

続いて水平方向です。
私は、Ctrl + Shift + 4を押下すると「上揃え→水平中央揃え→下揃え→上揃え→...」となるようなマクロです。
押し間違え防止のため、こちらのマクロでは、「垂直整列の切り替えを実行してもよろしいですか?」というメッセージを表示するようにしてます。

' モジュール内の先頭(全体で有効な変数)に配置
Public CycleVerticalAlignmentState As Long

Sub CycleVerticalAlignment()
    Dim ユーザー応答 As VbMsgBoxResult
    ' 確認メッセージを表示(OKの場合は実行、Cancel/ESCの場合は中止)
    ユーザー応答 = MsgBox("垂直整列の切り替えを実行してもよろしいですか?", vbOKCancel + vbQuestion, "確認")
    If ユーザー応答 <> vbOK Then Exit Sub

    ' 状態の初期化(1~3の状態を循環)
    If CycleVerticalAlignmentState < 1 Or CycleVerticalAlignmentState > 3 Then
        CycleVerticalAlignmentState = 1
    Else
        CycleVerticalAlignmentState = CycleVerticalAlignmentState + 1
        If CycleVerticalAlignmentState > 3 Then CycleVerticalAlignmentState = 1
    End If

    Dim 新整列方法 As Long
    Select Case CycleVerticalAlignmentState
        Case 1
            新整列方法 = xlTop      ' 上揃え
        Case 2
            新整列方法 = xlVCenter  ' 垂直中央揃え
        Case 3
            新整列方法 = xlBottom   ' 下揃え
    End Select

    Dim 処理済み As Boolean
    処理済み = False

    ' セルの処理(Rangeの場合)
    Dim rng As Range
    On Error Resume Next
    Set rng = Selection
    On Error GoTo 0
    If Not rng Is Nothing Then
        rng.VerticalAlignment = 新整列方法
        処理済み = True
    End If

    ' シェイプの処理(ShapeRangeの場合)
    Dim shpRange As Object
    On Error Resume Next
    Set shpRange = ActiveWindow.Selection.ShapeRange
    On Error GoTo 0
    If Not shpRange Is Nothing Then
        Dim shp As Shape
        For Each shp In shpRange
            ' テキストを持つシェイプの場合のみ
            If shp.TextFrame.HasText Then
                shp.TextFrame.VerticalAlignment = 新整列方法
                処理済み = True
            End If
        Next shp
    End If

    If Not 処理済み Then
        MsgBox "セルまたはシェイプが選択されていません。", vbExclamation
    End If
End Sub

最後にキーを追加するたキー定義をするために、以下のコードをpersonal.xlsbへ追加します。
参考

Private Sub Workbook_Open()
    Application.OnKey "^+4", "CycleVerticalAlignment"
End Sub

続く。。。
【VBA】Excelマクロを利用して作業効率を上げたい④