More Effective ExceL Tips

この記事はLL/ML Advent Calendarの16日目です。
遅くなってスミマセン。

前書き

皆さんExcelは好きですか?私は大嫌いです。
フツーにデータ集計するとかグラフ書くとかそういう使い方ならまだいいですが*1Excelで書かれているドキュメントを見ると吐き気を催す邪悪みたいなものを感じます。
正直、あれほどまでにドキュメント=Excelという思想が全く変わっていないのは、裏でそうさせている黒魔術的なものが働いてるんじゃないかと思うぐらいです。
とはいえ、それでもドキュメントはExcel指定とか社内政治とかその他大人の事情とかなんやらで仕方なくExcel方眼紙にドキュメント書いたりするしかないんですがね。黒魔術かどうかはともかく。
身の上話をすると、大体4ヶ月ぐらいコードも書かずDBも触らず、Excelのオートシェイプと格闘し続ける作業を続けたこともありました。
精神的に滅入りました。というか精神やられました。


とまぁ、前置きというか長い愚痴はともかくとして、結果的に少しではありますがExcel力がついてしまったので、備忘録もかねて覚えたTipsとしてつらつら書いていくことにしました。
タイトルはMかLがもう1つほしかったのでMoreつけました。なんでもかんでもMoreつければいいってもんじゃないけど。

移動系ショートカットキー

セルやシート移動の際、上下左右キーやマウスを使うとどうしてもホームポジションから手を離す必要がありますが、セルやシートの移動について上下左右キーやマウスを使わずとも他のキー操作である程度カバーできます。

キー 動作
Tab 右へ移動
Enter 下へ移動。Tabキーで右へ移動していた場合、Tabを押し始めた位置のすぐ下のセルへ移動する
Shift+Tab 左へ移動
Shift+Enter 上へ移動
Ctrl+PgDn 右のシートへ移動
Ctrl+PgUp 左のシートへ移動

シート移動ショートカットキーはマウスに手を伸ばすことがなくなるためかなり重宝します。

太字、斜体のショートカットキー

文字を太字にしたいときのショートカットキーはCtrl+Bが有名ですが、実はExcelだと他のキーでも文字を太字にできます。
それは…Ctrl+2。これでも文字を太字にできます。
さらに、Ctrl+3でイタリック、Ctrl+4で下線、Ctrl+5で打ち消し線を追加できます。
つまり簡易的なフォント編集であれば左手のみでカバーできます。地味に便利ですね。実に地味ですが。
まとめると以下のような感じ。

機能 キー
太字 Ctrl+2
イタリック(斜体) Ctrl+3
下線 Ctrl+4
打ち消し線 Ctrl+5

なぜこういう配置になっているかはわかりませんが、Excelの書式編集コントロールボックスを見ると、左から「太字」「イタリック」「下線」「打ち消し線」の順番で並んでいるため、これになぞったキーにしたのかもしれません。
ちなみにCtrl+1は書式設定、Ctrl+6はオートシェイプ系オブジェクトの表示・非表示切り替えです。

オートシェイプの位置調整

「オートシェイプのサイズと縦位置と横位置はきっちりそろえろよjk」とかExcel方眼紙と日々戦っているソルジャーの方々は一度は言われたことがあるかと思います。
確かに縦も横もきれいにそろっていたほうが見栄えはいいかもしれませんが、オートシェイプ1つ1つきっちり揃えるのはなかなか骨が折れます。
で、うっかり1ポイントでもずれていようものなら、「ここずれてる。やり直し」と言われかねません。やるせないですね。
方眼紙なExcelの場合、セルの境界線でそろえることができれば…と考える方も多いのかもしれませんが、これできます。


方法はリボンの「ページ レイアウト」メニューから「配置」→「枠線に合わせる」を選択する。
2007以前のExcelでは、「図形の調整」→「位置合わせ」→「グリッド」を選択。
この状態でオートシェイプを移動すると、Excelのセル境界線の位置で図形の位置をそろえることが容易になります。
方眼紙なExcelだとセルの枠線が詰まった状態になっているので、位置調整が(少しは)楽になります。
また、「図形に位置を合わせる」も選択すると、セル境界線だけでなく、他の図形の位置とも合わせることができるようになります。
ただしExcelのセル境界あるいは他の図形の位置でそろえることしかできないなので、セルの真ん中にオートシェイプを配置するようにとかそういうのには対応できないです。
というか印刷とかレイアウトの都合か何かでそんな奇妙な場所に配置するぐらいならセルの幅や高さそのものを変えたほうがいいとは思いますが。

オートシェイプの種類

一度作成したオートシェイプの形状変更は「図形の変更」あるいは「オートシェイプの変更」から変えることができますが、VBA等のプログラムからでも変更することが可能です。
各オートシェイプの形状は、MsoAutoShapeType列挙型として値が定義されています。
MsoAutoShapeType Enum (Microsoft.Office.Core) | Microsoft Docs
たとえば、フローチャートの書類であれば、"MsoAutoShapeType.msoShapeFlowchartDocument"です。
以下のVBAコードは、画面上のオートシェイプ全てを二等辺三角形に変更するVBAコートです。

Sub changeAutoShape()
    Dim i As Integer
    i = 1
    Do Until i > ActiveSheet.Shapes.Count
        With ActiveSheet.Shapes(i)
            .AutoShapeType = MsoAutoShapeType.msoShapeIsoscelesTriangle
        End With
        i = i + 1
    Loop
End Sub


また、特定のオートシェイプ形状の時○○の処理をする…という時にも使えるので結構重宝します。
以下のVBAコードでは、アクティブシートの四角形オートシェイプの幅と高さを30ポイントに設定します。

Sub styleChange()
    Dim i As Integer
    i = 1
    Do Until i > ActiveSheet.Shapes.Count
        With ActiveSheet.Shapes(i)
            If .AutoShapeType = MsoAutoShapeType.msoShapeRectangle Then
                .Height = 30
                .Width = 30
            End If
            i = i + 1
        End With
    Loop
End Sub

リンク貼り付け(カメラ機能)

あるファイルのとあるシートで表を作っていて、その表をほかのシートにも載せたい場合、一番簡単で誰でも思いつく方法は、表をコピペしてそのまま貼り付ける方法。
ただ、この方法だと表の内容が変わった時には、コピペした全ての表を修正しないと整合性が保てません。
いちいち直すのは面倒すぎるので、コピー元の表を直せばあとは一気に修正できると便利ですよね。
そういう時に使えるのが「リンク貼り付け」。俗に「カメラ機能」とも呼ばれています。


使い方はExcel2007以降の場合、領域を選択しコピーしたあと、「ホーム」から「図のリンク貼り付け」を選択する。
あるいは「クイックアクセスツールバーのユーザ設定」から「カメラ」ボタンを表示させ、カメラボタンを使用して範囲選択し、任意の場所にリンク貼り付けをおこなう方法でもOKです。
見た目はコピーした範囲の図がそのまま表示されているように見えますが、コピー元を編集した場合、リンク貼り付けをしたものも同時に変更されます。
これで変更が1カ所で済むようになります。
このリンク貼り付け機能は、別のファイルのシートにも図をリンクとして貼り付けることができるので、あるファイルの表を別ファイルのシートに持ってきて参照したい、という場合にかなり重宝します。
ただし、リンクである以上ファイルパスが変わると参照できなくなってしまうので注意。

結論

ショートカットキーや独特の機能さえ覚えればそこそこは使えるようにはなるExcelさん。Excelと友達になるためには是非とも覚えた方がいいと思います。
まあ私はExcelと友達にはなりたくないですが。


とりあえずなんでもかんでもExcelでやるという風潮はなんとかならないんですかね。大人の事情?知らんがな。

*1:むしろこっちの使い方の方が正しい