Excel: ウィンドウ分割がおっそろしくぶざまなマイクロソフト | Scenes From A Night's Dream

Scenes From A Night's Dream

Japanese code progression sucks

エクセルで画面分割するときに人間が無意識でやっている作業というのは、

1.エクセルがアクティブウィンドウになっている

2.分割したいウィンドウがアクティブになっている

3.人間が見て分かりやすいように画面をスクロール

4.分割したいセルをハイライトしている

5.メニューから分割を選択

完了

 

 

たったこれだけのことをVBAでやろうとすると、ありとあらゆる問題に遭遇する。まず、エクセルが最小化されていたらアウト。分割したいシートがVisible = Falseならアウト。そのシートが手前になっていたとしても、全く違う部分が表示されていたらアウト。Range("A1").Selectしてもアウト。Application.ScreenUpdating = Falseになっていたらアウト。すでに分割状態の場合もアウト。つまり、人間がやる作業と全く同じ画面状況になっていないと画面分割が失敗する。

 

.FreezePanesプロパティの対象オブジェクトはActiveWindowのみ! もうこれだけで卒倒ものなんだが、画面分割状態だとRange("A1").Selectしても画面がスクロールしない。Activeなオブジェクトに依存するコードって最低なんだが、そういう仕様なんだからあきらめるしかない。どうしたビル・ゲーツ、バカ丸出しだぞw

 

 

一応、動いているサンプルを載せておくが、xSheetのセットの仕方は自由にどうぞ。あと、.Range("A5")とかハードコードしてるのは分かりやすさのためだけなので、プロはこんなことしないように。

 

    Dim xSheet  As Excel.Worksheet
    
    Application.ScreenUpdating = True
    
    For Each xSheet In ThisWorkbook.Worksheets

        xSheet.Visible = True
        xSheet.Select
        ActiveWindow.FreezePanes = False
        xSheet.Range("A1").Select            '画面をスクロールさせる
        xSheet.Range("A5").Select            '分割したいセル選択
        ActiveWindow.FreezePanes = True

    Next

    Application.ScreenUpdating = False