VBA技術解説
ウィンドウ設定を引き継いで新規ウィンドウを作成するVBA

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2025-09-21 最終更新日:2025-09-21

ウィンドウ設定を引き継いで新規ウィンドウを作成するVBA


「新しいウィンドウを開く」で作成したウィンドは初期状態のウィンドウになります。


現在のウィンドウ設定を引き継いで新規ウィンドウを作成する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入門




このサイトがお役に立ちましたら「シェア」「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.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ