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 ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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