スポンサーリンク
はじめに:複数Excelブックを順序良く切り替えたい
今回の記事は主に、Excel2013以降のユーザーを対象としています。
今回は、Excel2013以降において、複数のブックを相互にスムーズに切り替えられるマクロを作成してみた。
なんのことか、ちょっと説明から。
個人差はあるだろうが、Excelのファイル(ブック)ってものは、幾つも一度に開いて作業することが多い。
そういうとき、ブックを順番に切り替えることはスムーズにやりたいということが多いのだ。
つまり、
ブック01の次は、ブック04、次はブック02、ブック05、ブック03、ブック01、・・・
なんて不規則な切り替えまではできなくとも、
の順に順序よく切り替える。または逆順に
ブック05→ブック04→ブック03→ブック02→ブック01
の順に切り替える。
そんなの普通に簡単にできるだろ、と思うだろうか?
いやそれが、Excel2013以降のExcelでは、ひどく難しくなってしまっているのだ。
マクロのソースコード
では、今回のマクロのソースコードを下に示す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
Sub moveEachBooks(n As Integer) 'ブックを順に移動する Dim booksCollection As New Collection Dim newBook As Workbook Dim i As Long Dim activeBookIndex As Long Dim booksCount As Long Dim newBookName As String booksCount = Workbooks.Count If booksCount = 1 Then Exit Sub For i = 1 To booksCount 'ブック名のコレクションを作成する booksCollection.Add Key:=Workbooks(i).Name, Item:=i Next i '現在のアクティブブックのインデックス番号を、ブック名から逆に割り出す activeBookIndex = booksCollection(ActiveWorkbook.Name) Debug.Print activeBookIndex Do Select Case n Case 1 'ブックを昇順に移動する If activeBookIndex = booksCount Then activeBookIndex = 1 Else activeBookIndex = activeBookIndex + 1 End If Case 2 'ブックを降順に移動する If activeBookIndex = 1 Then activeBookIndex = booksCount Else activeBookIndex = activeBookIndex - 1 End If End Select Set newBook = Workbooks(activeBookIndex) '次の移動先のブック newBookName = newBook.Name With Windows(newBookName) If .Visible Then '個人用マクロブックなど、非表示ブックは無視 If .WindowState = xlMinimized Then .WindowState = xlNormal '最小化されていたら通常の大きさに戻す newBook.Activate Exit Do End If End With Loop End Sub Sub moveEachBooksAscend() 'ブックを昇順に移動する Call moveEachBooks(1) End Sub Sub moveEachBooksDescend() 'ブックを降順に移動する Call moveEachBooks(2) End Sub |
最後にある「moveEachBooksAscend」「moveEachBooksDescend」マクロを、個人用マクロブックに入れて使うと良い。
複数同時に立ち上げているExcelブックを、順序正しく切り替えていくことができる。
私はこれらを、オリジナルのショートカットキー「Ctrl + Shift + Q」「Ctrl + Shift + W」に割り振っている。
QキーとWキーが左右隣接しているので、これらを押し分けることで、ブックを左順・右順に切り替えていくイメージだ。
次に、このマクロを作成した背景をば。
MDIからSDIへ
Excel2010までは、MDI(Multiple Document Interface)というユーザーインターフェースが採用されていた。
Excel2013以降はそれが、SDI(Single Document Interface)というものに変わった。
うん、はっきり言って、百害あって一利無しだと思ってます。
SDIというのは、複数のウインドウ同士が完全に独立にぶった切られているもの。
ということだけど、親ウインドウだの言われても難しいかと思う。
大雑把な図で恐縮だが、Excel2010までは上図のように、親となる1つの大きなウインドウ(青枠)があって、その枠内に①②のブックが内包される(オレンジ枠)というようなレイアウトが当たり前だった。
それに対して、Windowsの「メモ帳」ソフトなんかは、明らかにそういう風に行かない。
メモ帳を複数回立ち上げたら、それらは完全に独立して別々に動く。
Ctrl+Tabが不便になった
結局、そういうMDIとかSDIとかが、どうExcelの使い勝手に影響するのかって話だけど、要は、作業するウインドウの切り替えがやりにくくなるということ。
もっと露骨に言おう。Excel2003やExcel2010では私は、Excelの複数ブックを切り替えるのに「Ctrl+Tab」または「Ctrl+Shift+Tab」のショートカットキーを多用しており、それでブック切り替えがスイスイ出来ていた。
(ちなみに「Ctrl + F6」というショートカットキーで同様のことができるけど、これはCtrlキーとF6キーが離れた位置にあり押しにくいからほとんど使わない)
私はExcel2013以降でもつい、同様の感覚で「Ctrl+Tab」をやるのだけど、これは中々思い通りにいかない。
Excel2010までは「Ctrl+Tab」をやれば、Excelブック間だけに限定して切り替えして行けたのだが、Excel2013以降は、Excel以外のアプリケーションにも切り替わるようになってしまった。
これの仕様がどうにも詳しくは分からない。分かっても具体的な対策を打てる気がしない。
メモ帳とかで「Ctrl+Tab」キーをやったら、単にタブ文字が入力されるだけになるのだけど、Excel2013の「Ctrl+Tab」は明らかにそれと違う。
Excel2013で「Ctrl+Tab」をやったら、かなりのケースでExcelブック間のみでの切り替えを優先的にしてくれる。
でも、Excel以外のアプリケーションに切り替わってしまったり、理由はなんか分からないけど切り替え自体が作動しなかったりと、どうもこちらの意図どおりの動きはしてくれない。
Excel2010までのバージョンとの違和感を少なくしようという努力は伺われるけど。
Excelブック間に限定したアプリケーション切り替えがしたい・・・
アプリケーション切り替えのショートカットキーといったら代表は「Alt + Tab」や「Windows + Tab」だけど(Tabキーは押しっぱなしにせず一瞬で離す)、これは「Ctrl+Tab」よりもはっきりと、Excel以外のアプリケーションも広く対象にするショートカットキーだ。
だから、Excelブック間に限定した切り替えをするのにはどうしても不向きなのだ。
というわけでExcel2013以降は「Ctrl+Tab」キーがどうにも、非常に使い勝手が悪くなってしまった。
特に、Excelのブックを5個以上とか同時に立ち上げてる時に、「今は2番目と3番目のブックを交互に切り替えながらやりたいんだよ!」とかいう場合は、この不便さが明確になる。
Excel2010までだったら、「Ctrl+Tab」キーと「Ctrl+Shift+Tab」キーで、切り替え順序を順逆交互にやってれば、ブックの相互切り替えがスムーズにやれた。
Excel2013以降の挙動ではこれがどうしてもスムーズに行かない。
この問題の解決方法を八方調べてみたが、マクロを含めても決定的な解決方法は見付からなかった。
そこで、なんとか上記のマクロを組んでみた。
完全に自己流で、もっと改良の余地はあると思う。
そんでこのマクロは、Excelブックをインターネットから取得したりして読み取り専用状態で開いた場合は、イマイチ上手くいかないと思う。
スポンサーリンク