はじめに
初心者エンジニアです。
日々勉強して学んだこと、教わったことをメモ書きのように書き残す感じで書き残していきたいと思ってます。
本題
今回は、現在の上長から教えてもらった「めっちゃ便利!」と思ったVBAマクロです。
これは、日々の業務でドキュメントや一覧表などを作成、変更などをした場合に編集直後のままで保存していた際に教わった整頓マクロです。
次にそのExcelファイルを開いた人のためを思い、全シートのアクティブセルの位置を「A1」に移動させ、最初のシートに戻ってくるマクロです。
Sub SelectA1()
'エラーは無視
On Error Resume Next
Call BeforeSelectA1
Dim wb As Workbook
Dim ws As Worksheet
'選択中のブックが対象
Set wb = ActiveWorkbook
For Each ws In wb.Worksheets
ws.Activate
ws.Cells(1, 1).Activate
Next
Call AfterSelectA1
wb.Worksheets(1).Activate
End Sub
'----------------------------------------
Function BeforeSelectA1()
With Application
.EnableEvents = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
End With
End Function
'----------------------------------------
Function AfterSelectA1()
With Application
.EnableEvents = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
.CutCopyMode = False
End With
End Function
マクロ起動直後にエラーが起きても無視して最後まで処理を通すようにしています。
'エラーは無視
On Error Resume Next
また、処理を行う前に自動イベントや自動計算、メッセージの表示が発生しないようにしています。(処理後に戻します。)
他のマクロや計算を一時的に止めて処理を軽くする効果があるそうで。
エラーが発生しないようにしつつ、途中で止まらず最後まで処理がスムーズに通るようにしているそうです。
Function BeforeSelectA1()
With Application
.EnableEvents = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
End With
End Function
Function AfterSelectA1()
With Application
.EnableEvents = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
.CutCopyMode = False
End With
End Function
本処理としては簡単。
選択中のブックのシートをFor文で回して全シートのアクティブセルをA1に移動させているだけです。
おわりに
作成物を確認してもらうことや共有物を更新することもあり、多少なりともエクセルを開いた瞬間の見栄えは良い方がいいと思うし、次開くのが自分でも開いた瞬間が整っていた方がいいです。
実際に教えられてから大活躍してます。
マクロにショートカットキーを割り当てれば楽々です。
教えてくれた上長に感謝です。