Excel: 開くたびにウィンドウサイズ変えるの苦痛じゃないですか? | Scenes From A Night's Dream

Scenes From A Night's Dream

Japanese code progression sucks

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