ウィンドウ設定を引き継いで新規ウィンドウを作成するVBA
「新しいウィンドウを開く」で作成したウィンドは初期状態のウィンドウになります。

元のウィンドで設定していた以下の設定を引き継ぐVBAです。
・ズーム率
・ウィンドウ枠の固定
・ウィンドウの分割
・目盛線
・見出し
新規ウィンドウを作成するVBA
Option Explicit
Sub CreateNewWindowSettings()
'現在アクティブなウィンドウを取得
Dim srcWindow As Window
Set srcWindow = ActiveWindow
'元のウィンドウの設定を変数に保存
Dim srcActiveCell As Range
Dim srcZoom As Long
Dim srcDisplayGridlines As Boolean
Dim srcDisplayHeadings As Boolean
Set srcActiveCell = srcWindow.ActiveCell
srcZoom = srcWindow.Zoom
srcDisplayGridlines = srcWindow.DisplayGridlines
srcDisplayHeadings = srcWindow.DisplayHeadings
'新しいウィンドウを作成
Dim newWindow As Window
Set newWindow = srcWindow.newWindow
newWindow.Activate
'ズーム率を設定 (他の設定より先に適用することが推奨されます)
ActiveWindow.Zoom = srcZoom
'ウィンドウ枠の固定 または ウィンドウ分割をコピー
If srcWindow.FreezePanes Then
'ウィンドウ枠の固定位置を特定
Dim freezeRow As Long
Dim freezeCol As Long
freezeRow = srcWindow.SplitRow + 1
freezeCol = srcWindow.SplitColumn + 1
'基準となるセルをアクティブにしてから固定を適用
ActiveSheet.Cells(freezeRow, freezeCol).Activate
ActiveWindow.FreezePanes = True
ElseIf srcWindow.Split Then
'元のウィンドウが分割されている場合
ActiveWindow.SplitColumn = srcWindow.SplitColumn
ActiveWindow.SplitRow = srcWindow.SplitRow
ActiveWindow.Split = True
End If
'目盛線と見出しの設定をコピー
ActiveWindow.DisplayGridlines = srcDisplayGridlines
ActiveWindow.DisplayHeadings = srcDisplayHeadings
'最後に、元のウィンドウで記憶しておいたセルを新しいウィンドウでアクティブにする
srcActiveCell.Activate
End Sub
新規ウィンドウを作成するVBAの説明
取得・設定しているプロパティのリスト
| 設定しているプロパティのリスト | ||
| プロパティ名 | 種類 | 説明 |
| ActiveCell | Range | マクロ実行時にユーザーが選択していたセルを制御します。 |
| Zoom | Long | ウィンドウの拡大・縮小率(例:100%)を制御します。 |
| DisplayGridlines | Boolean | シートの目盛線(グリッド線)の表示・非表示を制御します。 |
| DisplayHeadings | Boolean | 行番号(1, 2, 3...)と列番号(A, B, C...)の見出しの表示・非表示を制御します。 |
| FreezePanes | Boolean | ウィンドウ枠の固定の状態を制御します。Trueに設定することで、特定の行や列をスクロールしても常に表示されるようにします。 |
| Split | Boolean | ウィンドウが分割されているかどうかを制御します。Trueに設定することで、複数のペインでシートを表示します。 |
| SplitColumn | Long | ウィンドウが分割されている場合、垂直方向の分割線の位置を制御します。 |
| SplitRow | Long | ウィンドウが分割されている場合、水平方向の分割線の位置を制御します。 |
| Cells | Range | 指定した行と列のセルを返すプロパティです。ここではウィンドウ枠を固定する基準となるセルを特定するために使用されています。 |
プロパティの取得
- ActiveCell: Set srcActiveCell = srcWindow.ActiveCell
現在選択されているセル(Rangeオブジェクト)を取得し、変数srcActiveCellに格納します。
- Zoom: srcZoom = srcWindow.Zoom
ウィンドウのズーム率を取得し、変数srcZoomに格納します。
- DisplayGridlines, DisplayHeadings: srcDisplayGridlines = srcWindow.DisplayGridlines、srcDisplayHeadings = srcWindow.DisplayHeadings
目盛線と見出しの表示状態(True/False)を取得し、それぞれの変数に格納します。
- FreezePanes, Split: If srcWindow.FreezePanes Then、ElseIf srcWindow.Split Then
これらのプロパティは、直接代入するのではなく、If文で現在の状態をチェックしています。これにより、ウィンドウ枠の固定か分割のどちらか一方の設定を判別します。
- SplitRow, SplitColumn: freezeRow = srcWindow.SplitRow、freezeCol = srcWindow.SplitColumn
ウィンドウが固定または分割されている場合、その位置を行と列の番号で取得します。
プロパティの設定
- Zoom: ActiveWindow.Zoom = srcZoom
保存したズーム率の値を、新しいウィンドウに設定します。
- FreezePanes: ActiveWindow.FreezePanes = True
固定したいセルをActiveSheet.Cells(freezeRow, freezeCol)で指定し、そのセルをActivateでアクティブにした後、Trueを設定してウィンドウ枠を固定します。
- Split, SplitColumn, SplitRow: ActiveWindow.SplitColumn = srcWindow.SplitColumn、ActiveWindow.SplitRow = srcWindow.SplitRow、ActiveWindow.Split = True
元のウィンドウの分割位置を新しいウィンドウに設定し、Split = Trueを設定してウィンドウを分割します。
- DisplayGridlines, DisplayHeadings: ActiveWindow.DisplayGridlines = srcDisplayGridlines、ActiveWindow.DisplayHeadings = srcDisplayHeadings
保存したTrue/Falseの値を、新しいウィンドウにそのまま設定します。
- ActiveCell: srcActiveCell.Activate
保存した元のActiveCellを再アクティブ化することで、新しいウィンドウの選択セルを元の位置に設定します。
同じテーマ「マクロVBA技術解説」の記事
印刷範囲の設定・印刷範囲のクリア
VBAの省略可能な記述について
VBAのVariant型について
VBAのインデントについて
VBAの演算子まとめ(演算子の優先順位)
列幅不足による###表示や指数表示を判定する
VBA10大躓きポイント(初心者が躓きやすいポイント)
Excel VBAとは?マクロとの違いやメリット・デメリットを初心者向けに解説
『演算子 + オペランド』から始めるVBA学習
PCの固有情報の取得(ユーザー名、コンピューター名等々)
ウィンドウ設定を引き継いで新規ウィンドウを作成するVBA
新着記事NEW ・・・新着記事一覧を見る
最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- ウィンドウ設定を引き継いで新規ウィンドウを作成するVBA
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
