【VBA】Excelマクロを利用して作業効率を上げたい④
こちらの記事は【VBA】Excelマクロを利用して作業効率を上げたい③の続きです。
実装4-1 選択範囲のグループ化またはインデント追加
続いて、選択行(列)をグループ化または、選択範囲のインデントを追加するマクロです。
行(列)ごと選択されている場合は、グループ化することができます。(Alt + Shift + → と同様の操作)
2025年5月2日追記:
結合セルでインデントを増やすとレイアウトが崩れるので、結合範囲の左上のセルのみのIndentLebelが更新されるようにしています。
Sub グループまたはインデント増やす()
Dim selRange As Range, cell As Range
On Error Resume Next
Set selRange = Selection
On Error GoTo 0
If selRange Is Nothing Then Exit Sub
' 行全体選択ならグループ化
If selRange.Address = selRange.EntireRow.Address Then
On Error Resume Next: selRange.EntireRow.Group: On Error GoTo 0
Exit Sub
End If
' 列全体選択ならグループ化
If selRange.Address = selRange.EntireColumn.Address Then
On Error Resume Next: selRange.EntireColumn.Group: On Error GoTo 0
Exit Sub
End If
' それ以外は“各 cell”のIndentLevel を更新
For Each cell In selRange.Cells
If cell.MergeCells Then
If cell.Address = cell.MergeArea.Cells(1, 1).Address Then
If cell.IndentLevel < 15 Then cell.InsertIndent 1
End If
Else
If cell.IndentLevel < 15 Then cell.InsertIndent 1
End If
Next cell
End Sub以下が、キー登録マクロです。
Application.OnKey "^.", "グループまたはインデント増やす"実装4-2 選択範囲のグループ解除またはインデントを減らす
実装4-1とは逆の動作をするものです。
行(列)ごと選択されている場合は、グループ化解除することができます。(Alt + Shift + ← と同様の操作)
2025年5月2日追記:
結合セルでインデントを減らすとレイアウトが崩れるので、結合範囲の左上のセルのみのIndentLebelが更新されるようにしています。
Sub グループ解除またはインデント減らす()
Dim selRange As Range, cell As Range
On Error Resume Next
Set selRange = Selection
On Error GoTo 0
If selRange Is Nothing Then Exit Sub
' 行全体選択ならグループ解除
If selRange.Address = selRange.EntireRow.Address Then
On Error Resume Next: selRange.EntireRow.Ungroup: On Error GoTo 0
Exit Sub
End If
' 列全体選択ならグループ解除
If selRange.Address = selRange.EntireColumn.Address Then
On Error Resume Next: selRange.EntireColumn.Ungroup: On Error GoTo 0
Exit Sub
End If
' それ以外は“各 cell”のIndentLevel を更新
For Each cell In selRange.Cells
If cell.MergeCells Then
If cell.Address = cell.MergeArea.Cells(1, 1).Address Then
If cell.IndentLevel > 0 Then cell.InsertIndent -1
End If
Else
If cell.IndentLevel > 0 Then cell.InsertIndent -1
End If
Next cell
End Sub続いて、キー登録用マクロです。
Application.OnKey "^,", "グループ解除またはインデント減らす"実装4-3 選択行(列)の非表示・再表示を切り替える
こちらは、選択行(列)を非表示・再表示を切り替えるマクロです。
Ctrl + Shift + ピリオドを押下することにより実行されます。
Sub 選択行列表示を設定()
Dim selRange As Range
On Error Resume Next
Set selRange = Selection
On Error GoTo 0
If selRange Is Nothing Then
Exit Sub
End If
' 選択が行全体の場合
If selRange.Address = selRange.EntireRow.Address Then
selRange.EntireRow.Hidden = Not selRange.EntireRow.Hidden
Exit Sub
End If
' 選択が列全体の場合
If selRange.Address = selRange.EntireColumn.Address Then
selRange.EntireColumn.Hidden = Not selRange.EntireColumn.Hidden
Exit Sub
End If
' 上記以外の場合は、選択セルの「行全体」を対象とする(必要に応じて調整)
selRange.EntireRow.Hidden = Not selRange.EntireRow.Hidden
End Sub
下記がキー登録マクロです。
Application.OnKey "^+.", "選択行列表示を設定"おわりに
【VBA】Excelマクロを利用して作業効率を上げたい③ に引き続き、いくつか作成してみました。
いずれも私が普段の業務でよく使用しているものです。
キーボード入力のみでなるべく操作できるよう今後も特に便利なものがあれば、追加していきます。
参考:
