ウィンドウ設定を引き継いで新規ウィンドウを作成する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技術解説」の記事
文字列のプロパティ名でオブジェクトを操作する方法
OneDrive使用時のThisWorkbook.Pathの扱い方
セル個数を返すRange.CountLargeプロパティとは
画像「セルに配置」のVBAについて(365の新機能)
VBAでクリップボードへ文字列を送信・取得する3つの方法
テキストの内容によって図形を削除する
PCの固有情報の取得(ユーザー名、コンピューター名等々)
ウィンドウ設定を引き継いで新規ウィンドウを作成するVBA
レーベンシュタイン距離を求めるVBA(スピル対応)とセル数式
WorksheetFunction使用時のパフォーマンスへの影響について
Dirは限界!FSOは遅い!VBAファイル検索をWindows APIで爆速化
新着記事NEW ・・・新着記事一覧を見る
生成AIが暴いた「VBAオワコン説」の盲点|問われるのは言語ではなく評価軸|エクセル雑感(2026-07-04)
【ITとは何か】Excel・VBAを学ぶ前に知っておきたい「4つの本質」|エクセル雑感(2026-06-24)
2つのシート名を交換するVBAをGeminiに作らせてみた。|VBA技術解説(2026-05-22)
ヘッダーに合わせて列をソートして値貼り付けするスマートな方法|VBAサンプル集(2026-05-20)
4大分岐関数の使い分け(IF/IFS/SWITCH/CHOOSE)|エクセル入門(2026-05-19)
Excel主要関数 習得難易度 10段階(文字列・日付除く)|エクセル雑感(2026-04-27)
Excelのシート5分類|エクセル雑感(2026-03-27)
グループ別に全員共通の重複期間を算出|エクセル練習問題(2026-03-12)
ハイフン区切り文字列の『最初』と『最後』を抽出・結合|エクセル練習問題(2026-02-23)
AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.変数宣言のDimとデータ型|VBA入門
3.日本の祝日一覧|Excelリファレンス
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.Excelショートカットキー一覧|Excelリファレンス
6.繰り返し処理(For Next)|VBA入門
7.RangeとCellsの使い方|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- ウィンドウ設定を引き継いで新規ウィンドウを作成する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.
