【VBA】Excelマクロを利用して作業効率を上げたい③
はじめに
皆様。Excelは業務で活用しているでしょうか?
本日は久しぶりにあったら便利かもしれないマクロを作成してみました。
実装3-1:文字列揃えマクル
こちらでは、Ctrl + Shift + 3を押下するたびに「左→中央→右→左→...」といったように文字列の整列方法を切り替えます。
こちらのマクロは、セルだけではなく、図形を選択した際は図形の整列方向が変わります。
' モジュール内の先頭(全体で有効な変数)に配置
Public CycleAlignmentState As LongSub 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 LongSub 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
