04 Excelで独自のショートカットキー
Excelは、Ctrl+なんとかとかAlt+なんとかとか押すと、メニューからあーだのこーだの選択したのと同じ動作をするキーの組み合わせがあります。この、めんどくさい操作を一発で行ってしまうキーの組み合わせを、
と呼びます。
いゃ、別にそんなエラそぅにいぅほどのことでもなく、大抵のアプリケーションにはある程度実装されてる機能なんですけど。本サイトの文章を読むよぅな方は大なり小なり私とこだわりの方向に近似性がおありだと思っておりますので、まぁご存じではないかとは思ぅんですが。話の流れとして一応説明文を入れてみたり。
しかしこのショートカットキー、とても全部の機能をキーに割り当てることなんか、大抵のアプリケーションでは機能数が多すぎてできません。ので、多数派の方が一般的に使うだろぅ機能に絞って初期実装しておくのがふつーです。そーでないショートカットキーを使いたいなら、自分でカスタマイズせいよ、と。
たとえば、秀丸。
私、インストール時にデフォルトで表示されるツールバーもファンクションキー表示もOffにしています。なんかテキストエディタをマウスで操作するのが邪道なとくな気がしまして。
ところがBOX選択(矩形選択→カット&ペーストできる機能)はツールバーに登録されている(らしい)ので、ショートカットキーには登録されていません。
この機能は便利で多用していますので、独自のショートカットキーShift+F5に自分で割り振って使っています。
ところが。
Excelは、ショートカットキーのカスタマイズができないんです。
もぅ、あくまでもデフォルト値で使えと。変更は許さんぞと。マニュアルにも固定でがっちり書いてあるぞと。
ここまでがっちり固定されているのではやむを得ません。あとは自分の方をExcelの操作性に近づけるしかないんですけど…セルを結合するたびに右クリック→[セルの書式設定(F)...]-[配置]タブの「セルを結合する(M)」チェックボックスをいちいちOn/Offしなければならんのはなんとかなりませんか。手をキーボードとマウスの間でひっきりなしにひらひらさせて、どこに出てくるかいまいちわからないダイアログボックスに目を光らせるのがどんどん苦痛になっていくんですけど。
あぁWordならばキーカスタマイズができるのにできるのに。だから私はやはりWordに。
などと日々苦しみ悶えていた私に、福音のようなサイトが降臨しました。
玉蔵さんが運営されているEXCEL生産性向上委員会。
詳しくは[personal.xls 強化講座]-[ショートカット機能の追加]のあたりをご覧いただくとして。
ざっくり言ってしまえば、起動時マクロ([PERSONAL.xls]-[Auto_Open()]プロシージャ)にショートカットキーの割り当てを書いてしまえと。でそのキーを押した時にどーいぅ動作をしてほしいかもVBAで組んでしまえと。
さらにこのページではむちゃくちゃ実用的なショートカットキー割当て用プロシージャもどっさり公開されています。
自分にフィットする機能をいくつか取り込んで、ワンタッチでセルを結合したり文字配置を右揃えにしたりして日々さくさくと設計書を書けるよぅに。う、嬉しいよぅ。
さて。
実はもぅひとつ、Excelの操作性について前々から大不満に思っていたことがあります。
一応Excelでは、Shift+Spaceで行選択、Ctrl+Spaceで列選択ができるよぅになっています。キーボードだけでこの機能が使えるのであれば、Shift+[↓]連打で不要な行のセルをてきとーに複数選択しておいてからShift+Spaceで行選択、ショートカットキーでショートカットメニューを表示させてから[D]で一発行削除。なんてことができます。逆に[I]で、ほしいだけの行を一発挿入なんてこともできます。
Excel上で文章を推敲するにはどうしても必要なんです、これ。今この文章のここに着目しているのに行が足りなくて文章が足せない、なんて時に行番号表示領域に目を移す心の余裕があるわけもなく。
ところがこのShift+Space、
反対のスペース(全角スペースがデフォルトになっている時には半角の、半角スペースがデフォルトになっている時には全角のスペース)が入力されてアクティブセルが入力モードに入っちゃうんですね。
いゃ確かに元祖英語版Windowsには全角スペースなんて概念はありませんけど。おこぼれで対応いただいている日本語版ですけど。IMEとの相性なんてアメリカの皆さんは考えたことないんでしょうけど。
どちらかといぅと、この場合IMEは悪くないと思ぅんですよ。ATOKでも同様の動作しちゃいますし。ので、これはもぅShift+SpaceをIMEがかっぱらわないと思い込んだデザインのExcelが悪い。
しかし。どーしてもキーボードからの行選択機能を使いたいんです。私にとっては、一日に仕様書を3本書けるか2.5本しか書けないかくらいの作業効率のせとぎわなんです。
行選択する際にIMEをOffにする。
これであれば確かにShift+SpaceはExcelがフックするよぅになりま却下。
文章を編み出している最中にAlt+[半角/全角]なんかそぅそぅ連打してられません。それでなくても複数のアプリケーション立ち上げてAlt+TabやCtrl+Tabで切り替えまくりながら、DBのカラム(フィールド)設計なんかしている時にはShift+CapsLockまで押したり押したりしながら作業しているのに。似たよぅな位置にひんぱんに使うキーありまくり。で誤操作しまくり。
おもに左手の中指方面が軽くパニックになりました。
IME側の反対のスペースキー割当てを変更する。
Shift+SpaceをExcelでしか使わないショートカットに位置づけてしまえば却下。
もぅ何年もShift+Spaceで全角と半角のスペースを使い分けてきたんです。テキストエディタやメーラでこれを自由に入力し分けられないとこれはこれで作業効率落ちまくりです。
ので。
EXCEL生産性向上委員会を本歌にいただいて、行選択ショートカットキーを自作してしまいました。
やり方は簡単。まず、次のようなプロシージャをPERSONAL.xlsに記述します。
Sub RowsSelect()PERSONAL.xls内なら特に記述場所はいーよぅな感じです。まぁ標準モジュールをこしらえて、その中に入れるのが筋ですが。
Dim intSttRow As Integer
Dim intEndRow As Integer
Dim strRows As String
Dim i As Integer
'*** 対象行バッファの初期化
strRows = ""
'*** 全ての選択領域の取得→対象行バッファへ格納
' (複数選択領域に対応)
For i = 1 To Selection.Areas.Count
If (strRows <> "") Then strRows = strRows & ","
intSttRow = Selection.Areas(i).Row
intEndRow = intSttRow + Selection.Areas(i).Rows.Count - 1
strRows = strRows & CStr(intSttRow) & ":" & CStr(intEndRow)
Next
'*** 選択領域の行選択
Range(strRows).Select
End Sub
あとはこのプロシージャをShift+Ctrl+Spaceで呼び出せるよぅ、同じくPERSONAL.xlsのAuto_Openプロシージャ(こちらは標準モジュール内に書くのが当たり前ですね)に、以下の記述を追加しときます。
Sub auto_open()いかがでしょぅ。私、ものすっごく使いやすくなったんですが…わ、私だけ?
'*** Shift + Ctrl + △ 行選択
Application.OnKey "+^ ", "RowsSelect"
End Sub
おまけ。
ヘルプを見ていると、Ctrl+Shift+:で、アクティブセルに時刻が挿入できるといぅことになっています。が、実際に操作してみると、時刻が挿入されるショートカットはCtrl+「:」(コロン)です。
ちなみに日付挿入はCtrl+「;」(セミコロン)。
これはどーいぅことなのか。
実は、Microsoft製品のヘルプ群は、そのほとんどが英語版の直訳です。日本語訳スタッフはいちいちその記述が正しいかどぅかのウラをとっているわけではないらしい証拠がさまざまなヘルプやmsdn Libraryなんかで散見されます。
どぅも英語版Excelの操作では正しくCtrl+Shift+:で時刻挿入の動作をするみたいですなんですよね。
私たち日本人(あるいは主に日本で生活している方)がふつー使っているのは、日本語対応の106/109キーボードといぅ仕様の奴です。それに対して英語圏の方々は、英語用の通常101/102キーボードを使っています。
101/102と106/109キーボードは、記号のキー割付が違うんです。106/109キーボードでは「;」(セミコロン)と「:」(コロン)は別々のキーで隣り合っているんですが、101/102キーボードではこの2つは同じキーに割り付けられているんですね。そのまま押すと「;」、Shift+で「:」となります。
つまりヘルプが言いたいのは、
ってことなんでしょう。
でも106/109キーボードでは「;」と「:」は別のキー。Shift+なしで「:」は入力できてしまいます。Ctrlを押した状態で「:」が入力できれば時刻挿入の動作はするわけですから、
時刻挿入にShift+は不要
といぅことになるわけです。