午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

午後ツールその53、ウィンドウの整列、異なるブック(ウィンドウ)の整列

 
 
2016/12/31
午後ツールにボタン追加
新しいウィンドウを開いて垂直分割表示
新しいウィンドウを開いて水平分割表示
任意のウィンドウを縦横分割整列
イメージ 1
追加した4つのボタンは左から
横2分割整列
縦2分割整列
横分割整列
縦分割整列
これらは
 
エクセルにもとからあるウィンドウの整列とほとんど同じ
イメージ 2
表示→整列→ウィンドウの整列
これを使って
 
イメージ 3
こんなふうに同じブックを並べて表示したい場合の手数は
  1. 新しいウィンドウを開く
  2. 整列
  3. 上下に並べて表示
  4. 作業中のブックのウィンドウを整列にチェック
  5. OK
約5回クリックすることになる、めんどくさい
横2分割整列ボタンなら1回
縦2分割整列も1回でOK↓
イメージ 4
縦2分割整列
楽チン

 
 
異なるブックの整列
 
イメージ 6
こんなふうにたくさんのブックを開いていて
この中から選んだものだけ整列したいときに
エクセル2007の標準機能だと
イメージ 5
作業中のブックのウィンドウを整列するのチェックを外して
OK押せばいいようにみえるけど、これだと
開いているブックすべてが対象になってしまう
新しいエクセルならできるのかなあ
2007では無理っぽいのでVBAで解決
イメージ 7
分割整列ボタン押すと
イメージ 8
開いているウィンドウ一覧が出るので
 
並べたいのにチェックを入れて
イメージ 9
OK押すと
 
イメージ 10
選んだブックだけで整列表示される
これで異なるブックの整列ができた!
2つ以上の選択でもOK
イメージ 11
3つ選んでOK押すと
イメージ 12
3分割
 
 
並べられるウィンドウの順番
イメージ 13
このリストの上から順番に並べられる
横分割なら上から
縦分割なら左から
なのでこのリストだと気象観測記録ウィンドウは必ず一番上か1番左に表示される
このリストの順番はウィンドウを表示(アクティブに)した順番になっている
古いものが下になって一番上はアクティブウィンドウ
なのでここで一度キャンセルして
Book2:2をアクティブにしてからにすると
イメージ 14
Book2:2が一番上になる
 
 

 
 
 
横2分割整列のマクロ
'新しいウィンドウを開いて水平分割表示
Sub SplitWindowHorizontal()
'同じブックで複数ウィンドウじゃなければ新しいウィンドウを開く
    If ActiveWorkbook.Windows.Count = 1 Then
        ActiveWindow.NewWindow
    End If
'横分割整列
    ActiveWorkbook.Windows.Arrange xlArrangeStyleHorizontal
End Sub
これはマクロの記録できるから楽だった
縦分割はHorizontalがVerticalにかわるだけ
 
 
 
縦横分割整列のマクロ
'wNameはウィンドウ名の配列
'IsSplitHはTrueだと横分割、Falseで縦分割
Sub SplitWindowsSub(wName() As String, IsSplitH As Boolean)
    Dim wins As Windows
    Set wins = Application.Windows
    Dim wCount As Long
    wCount = UBound(wName)
    Dim i As Long
    Dim wh As Double, ww As Double
    wh = Application.UsableHeight    'エクセルウィンドウ内側の高さ
    ww = Application.UsableWidth     'エクセルウィンドウ内側の幅
    If IsSplitH Then
        wh = wh / (wCount + 1)
    Else
        ww = ww / (wCount + 1)
    End If
    
    Dim wLeft As Long, wTop As Long
    Dim win As Window
    For i = 0 To wCount
        Set win = wins(wName(i))
        win.WindowState = xlNormal
        With win
            .Height = wh
            .Width = ww
            .Top = 0 + wTop
            .Left = 0 + wLeft
            .Activate
        End With
        If IsSplitH Then
            wTop = wTop + win.Height
        Else
            wLeft = wLeft + win.Width
        End If
    Next
End Sub
 
 
Application.UsableHeight    'エクセルウィンドウ内側の高さ
Application.UsableWidth     'エクセルウィンドウ内側の幅
これがわかんなくて
参照したところ
助かりました
 

 
ダウンロード
 
 

関連記事
エクセルVBAチェックボックス付きのListBoxのInputBox?を作ってみた ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14652565.html#14652565
ウィンドウ一覧を選ぶダイアログの表示はこれが元
 
関連記事
前回
次回は5日後
午後ツールその54、ウィンドウ枠の固定を引き継いで新しいウィンドウを開く ( Windows ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14667685.html