Win11のエクスプローラーっていろいろ使い勝手が悪くなりましたが、それでも頑なに守っていることがあって、それは前回開いたウィンドウのサイズを記憶してくれてることです。同じマイクロソフト製品なのに同じようにできてないのがエクセルちゃんです。毎朝の儀式化してますが、エクセルを立ち上げたら、まずウィンドウサイズを変えて場所を調整して・・・・これが毎日のルーティーンです。
設定で「前回開いたウィンドウサイズと位置を記憶する」みたいなのがあればいいんですが、そんなものはありません。ないなら作っちゃおうというのが今回のお題です。
1.ALT+F11でVBAウィンドウを出す
2.左側のシート一覧の中にあるThisWorkbookをダブルクリック
3.からっぽの編集ウィンドウが開くので以下の関数をコピペ
4.ファイル保存する際に.xlsmにしろと言われるので.xlsmで保存
※これがどうしても無理な場合はあきらめてください。オフィス環境でうるさいところはダメかもしれませんね。
5.Sheet7とH1~H5を適当なシートとセルに変更
こいつのいいところは、開いたときにウィンドウの通常時のサイズ、場所、最大/最小/通常を戻してくれることです。
Option Explicit
Private Sub Workbook_Activate()
RestoreWinPosition
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SaveWinPosition
End Sub
Private Sub RestoreWinPosition()
Dim xCell As Excel.Range
Dim iTop As Long
Dim iLeft As Long
Dim iHeight As Long
Dim iWidth As Long
iTop = Sheet7.Range("H1")
iLeft = Sheet7.Range("H2")
iHeight = Sheet7.Range("H3")
iWidth = Sheet7.Range("H4")
iState = Sheet7.Range("H5")
If iTop + iLeft + iHeight + iWidth = 0 Then Exit Sub
Application.WindowState = xlNormal
Application.Top = iTop
Application.Left = iLeft
Application.Height = iHeight
Application.Width = iWidth
If iState > 0 Then Application.WindowState = iState
End Sub
Private Sub SaveWinPosition()
Dim iState As Long
iState = Application.WindowState
Application.WindowState = xlNormal
Sheet3.Range("H1") = Application.Top
Sheet3.Range("H2") = Application.Left
Sheet3.Range("H3") = Application.Height
Sheet3.Range("H4") = Application.Width
Sheet3.Range("H5") = iState
End Sub