Walterは、特定のExcelブックを画面上の同じ場所で、特定のウィンドウサイズで常に開く必要があります。彼は、ブックを閉じたときにExcelにこの場所とサイズの情報を記憶させて、同じブックを次に開いたときに使用する方法があるかどうか疑問に思います。

比較的簡単な解決策の1つは、ワークブック(または多くの場合ワークブック)を画面上で必要な位置に配置してから、ワークブックをワークスペースとして保存することです。これを行うには、リボンの[表示]タブを表示し、[ワークスペースの保存]ツールをクリックします。ただし、このアプローチはExcel2007とExcel2010でのみ機能することに注意してください。ワークスペースを作成する機能はExcel2013から削除されましたが、開くことはできます。

最新バージョンのExcelのすべてで機能するソリューションの場合、マクロを使用する必要があります。ブックを閉じると自動的に実行されるマクロと、ブックを開くと実行されるマクロを設定できます。閉じたときに実行されるものは位置情報を保存でき、開いたときに実行されるものはその情報を取得し、それを使用してブックを表示する場所を見つけることができます。

ただし、問題は、位置情報をどこに保存するかです。 1つの解決策は、ブックが保存されているのと同じフォルダー内のテキストファイルに単に書き込むことです。これが、次のマクロのペアで採用されているアプローチです。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim fileName As String     Dim myWindow As Window

Set myWindow = ActiveWindow     fileName = "config.txt"

Open fileName For Output As #1     With myWindow         Write #1, .Top         Write #1, .Left         Write #1, .Height         Write #1, .Width     End With     Close #1 End Sub
Private Sub Workbook_Open()

Dim inputStr As String     Dim fileName As String     Dim myWindow As Window

Set myWindow = ActiveWindow     fileName = "config.txt"

If Dir(fileName) <> "" Then         Open fileName For Input As #1         With myWindow             .WindowState = xlNormal             Line Input #1, inputStr             .Top = inputStr             Line Input #1, inputStr             .Left = inputStr             Line Input #1, inputStr             .Height = inputStr             Line Input #1, inputStr             .Width = inputStr         End With         Close #1     End If End Sub

ブックが閉じられたときに実行されるマクロは、4つの配置位置(.Top、.Left、.Height、および.Width)をconfig.txtというファイルに保存します。このファイルは、ワークブックが次に開かれ、ワークブックウィンドウの適切なプロパティが設定されたときに読み取られます。

何らかの理由でconfig.txtファイルが欠落している場合、ブックはデフォルトの場所で開きます。

このアプローチは、位置情報を使用するフォルダーに単一のワークブックがある場合に最適です。複数のブックがある場合、それぞれがconfig.txtファイルを上書きし、ブックが目的の場所で開かれなくなる可能性があります。

一部の人々にとって、より良いアプローチは、名前付き参照で、ワークブック自体に配置場所を保存することかもしれません。これが、次のマクロで採用されているアプローチです。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error Resume Next     With ThisWorkbook         With .Names             .Add Name:="WinTop", RefersToR1C1:="=1"

.Add Name:="WinLeft", RefersToR1C1:="=1"

.Add Name:="WinWidth", RefersToR1C1:="=1"

.Add Name:="WinHeight", RefersToR1C1:="=1"

End With         On Error GoTo 0         .Names("WinTop").RefersTo = ActiveWindow.Top         .Names("WinLeft").RefersTo = ActiveWindow.Left         .Names("WinWidth").RefersTo = ActiveWindow.Width         .Names("WinHeight").RefersTo = ActiveWindow.Height     End With End Sub
Private Sub Workbook_Open()

With ThisWorkbook         ActiveWindow.Top = Val(Mid(.Names("WinTop").RefersTo, 2))

ActiveWindow.Left = Val(Mid(.Names("WinLeft").RefersTo, 2))

ActiveWindow.Width = Val(Mid(.Names("WinWidth").RefersTo, 2))

ActiveWindow.Height = Val(Mid(.Names("WinHeight").RefersTo, 2))

End With End Sub

このアプローチを使用すると、ワークブックを好きな場所に簡単に転送でき、マクロがワークブックウィンドウの位置情報の保存と再利用を処理します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(10091)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。