VBA練習問題
VBA100本ノック 47本目:Window操作

VBAを100本の練習問題で鍛えます
公開日:2020-12-15 最終更新日:2021-01-13

VBA100本ノック 47本目:Window操作


WorkbookのWindowオブジェクトを操作する問題です。
リボンの「表示」タブにある設定項目になります。


ツイッター連動企画です。
ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。

VBAテスト用のサンプルデータはご自身でご用意ください。


出題

出題ツイートへのリンク

#VBA100本ノック 47本目
ブックの全ウィンドウの全シートに対して以下の処理を行ってください。
・A1セルを選択しA1セルが見える状態にする
・ズームを85%
・枠線を非表示
・表示を標準
・印刷の向き「横」
※全ウィンドウという点を忘れずに
※ブックは任意


「枠線」と書いてしまったのが良くなかったです。
罫線ではなく、表示の「目盛り線」のつもりで書いてしまいました。
これは、シートごとではなくウィンドウごとに存在します。


VBA作成タイム

この下に頂いた回答へのリンクと解説を掲載しています。
途中まででも良いので、できるだけ自分でVBAを書いてみましょう。


他の人の回答および解説を見て、書いたVBAを見直してみましょう。


頂いた回答

解説

Windowオブジェクトを操作する機会は少ないと思いますが、VBAで必要になる場合もあります。
リボンの「表示」タブの設定です。
Windowは階層が複雑で理解しづらいと思います。
ApplicationにもWorkbookにもWindowsがありますが、今回はWorkbookの扱いです。
順にオブジェクトを辿ってみます。

Sub VBA100_47_01()
  Dim wb As Workbook: Set wb = ThisWorkbook
  Dim ws As Worksheet
  Dim win As Window
  Dim sv As Object
  
  Application.ScreenUpdating = False
  
  Application.PrintCommunication = False
  For Each ws In wb.Worksheets
    ws.PageSetup.Orientation = xlLandscape
  Next
  Application.PrintCommunication = True
  
  For Each win In wb.Windows
    win.Activate
    For Each sv In win.SheetViews
      If TypeName(sv) = "WorksheetView" Then
        sv.Sheet.Activate
        Application.Goto sv.Sheet.Range("A1"), True
        sv.DisplayGridlines = False
        win.View = xlNormalView
        win.Zoom = 85
      End If
    Next
  Next
  
  Application.ScreenUpdating = True
End Sub


ページ設定はWindowに関係ないので先に処理しています。
あまり使う事のない、SheetViews、WorksheetView、これらに行き当たります。
使い慣れないオブジェクトは階層を辿る時にも迷ってしまいますね。
使い慣れたWorksheetをActivateしたほうが扱いやすいかもしれません。

Sub VBA100_47_02()
  Dim wb As Workbook: Set wb = ThisWorkbook
  Dim ws As Worksheet
  Dim win As Window
  
  Application.ScreenUpdating = False
  
  Application.PrintCommunication = False
  For Each ws In wb.Worksheets
    ws.PageSetup.Orientation = xlLandscape
  Next
  Application.PrintCommunication = True
  
  For Each win In wb.Windows
    win.Activate
    For Each ws In wb.Worksheets
      ws.Activate
      Application.Goto ws.Range("A1"), True
      With win
        .DisplayGridlines = False
        .View = xlNormalView
        .Zoom = 85
      End With
    Next
  Next
  
  Application.ScreenUpdating = True
End Sub

A1選択にはApplication.Gotoを使いました。
スクロールはされますが非表示はそのままになります。
Windowは使用頻度が低い分はまりやすい気がします。
1度はVBAを書いて経験しておくと良いと思います。
補足はありません、VBAと参考ページを掲載しました。


補足

補足はありません。


サイト内関連ページ

第54回.Windowオブジェクト|VBA入門
・Windowの指定方法 ・Windowオブジェクトデータ型 ・Windowオブジェクトのプロパティとメソッド ・Windowオブジェクトの解説 ・Windowオブジェクトの使用例 ・アクティブシート以外のWindowの設定
第73回.ページ設定(PageSetup)|VBA入門
・PageSetupオブジェクト ・PrintCommunicationプロパティ ・ヘッダー・フッターのプロパテの設定方法 ・余白の設定方法 ・印刷範囲の設定/クリア:PrintArea ・総ページ数:Pages.Count ・改ページの位置を設定:PageBreak ・最後に
アクティブシート以外のWindowを設定できるWorksheetView
・Windowオブジェクトのメソッドとプロパティ ・アクティブシート以外の表示(Window)に関する設定 ・アクティブシート以外の表示(Window)を設定するVBA ・全ウィンドウの全シートのWorksheetViewを設定するVBA




同じテーマ「VBA100本ノック」の記事

44本目:全テーブル一覧作成
45本目:テーブルに列追加
46本目:名前定義に使える文字
47本目:Window操作
48本目:配列と数値型
49本目:条件付き書式の判定
50本目:トリボナッチ数列
51本目:シート一覧と印刷ページ数
52本目:複数シートの一括印刷
53本目:テーブルの扱いと年齢計算
54本目:シートのChangeイベント


新着記事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」をお願いいたします。
本文下部へ