Excelのコマンド名を指定して実行 Command Palette

これはSpreadsheets/Excel Advent Calendar 2020 - Adventarの7日目の記事です。

こんな感じでコマンド名から操作を実行できるアドインを作りました。 (実際に作ったのはだいぶ前ですが)

f:id:kamocyc:20201207211055g:plain

機能

  • Ctrl + Shift + Pで、コマンド名を指定するコマンドパレットのダイアログを表示。
  • コマンド名を入力することで、部分一致するコマンドを絞り込み。
  • 絞り込み結果が複数ある場合、上下矢印キーでコマンドを選択。
  • Enterキーで選択したコマンドを実行。

Excelの標準コマンド名(英語)から検索して、コマンドを実行できます。

また、RelaxTools Addinのコマンド(日本語の説明あり)も同様に実行できます。

software.opensquare.net

ただし、とりあえず動けばいいという感じで作ったので、色々と雑なところはあります。

インストール方法

アドインファイル: https://github.com/kamocyc/excel-spreadsheet-example/raw/master/command_palette.xlam

  1. 上記のリンクからファイルをダウンロード
  2. C:\Users\<ユーザ名>\AppData\Roaming\Microsoft\AddInsフォルダに, ダウンロードしたファイルを置く。
  3. Excelを開き、「開発」 > 「Excelアドイン」 で、ダウンロードしたアドインを選択して有効化する。
  4. RelaxTools Addinをインストールする。

背景

以前ExcelVisual Studio Code (VSCode) をともに使っていたとき、ExcelでCommand Paletteの機能がないことが不便に感じました。

VSCodeのCommand Paletteとは、コマンド名をキーボードで入力することで、一致するコマンドを実行できるというものです。

f:id:kamocyc:20201207205307p:plain

すべてキーボードで操作が完結することや、GUIのメニューから欲しいものを探す手間がなくなるというメリットがあります。

特に、RelaxTools Addinは多くのコマンドがあるので、探すのが大変そうだと思い、作成しました。(すでに似た機能があったらすみません。。)

仕組み

アドインにコマンド名の一覧のシートを持たせていて、そこからコマンド名を検索しています。

Excel組み込みのコマンド名 (idMso というらしい) の一覧は、確かこことかから取得したような気がします。 (長いコマンド名完全一致とかでググると他のExcelのバージョンでのコマンド一覧も出ると思います。

コマンドの実行には、Application.CommandBars.ExecuteMso()を使っています。 (RelaxTools Addin内のコードを利用しています)

現状の問題点や改善したい点

たぶん、対応することは無いと思いますが。。

  • 色々と作りが雑。
  • 使用したコマンドの履歴を表示したい。
  • VSCodeのように、正確に部分一致しなくても文字列距離が近いコマンドを表示したい。