ExcelのVBAアドインを活用しよう | 気分良く前向きに生きよう & テクニカルを楽しむ

気分良く前向きに生きよう & テクニカルを楽しむ

日常感じた心の世界に通じることや脳の働きに関することを書きながら、PCや携帯やプログラミングなどの技術的なことなども書いていこうと思います。

現在のビジネスにおいて、Excelは必携ツールといえるかと思います。

もちろん、Excelは単なるツールですので、「仕事ができる」ということと「Excelを隅々まで使いこなせる」ということとは直接は関係ないと思いますが、それでもやはり、Excelを使いこなせるが仕事の大きな助けになることは間違いないと思います。


Excelを日行業務で使用して、頻繁に編集していると、「行の入れ替え(行のカット・コピー)」と「列の入れ替え(列のカット・コピー)」が手間がかかることが気になる場合があるかと思います。

テキストエディタやWordなどで行単位で移動するのは非常に簡単で、またマウスを使う必要はほとんどないと思います。
行の先頭にカーソルがある状態でシフトを押しながら下矢印キーで移動対象行を選択し、CTRL+XもしくはCでカット・コピーし、移動対象先でCTRL+Vを押すだけですので、その操作で思考が止まることはあまりないと思います。

ところがExcelで行単位の移動をする場合、まず行を選択するために通常マウスで対象行を選択すると思います。マウスで選択後、CTRL+XもしくはCでカット・コピーし、また、移動先でまたマウスを使って「コピーしたセルを挿入」みたいなメニューを選んで挿入する必要があるかと思います。
一応、行選択にも、コピーしたセル挿入の操作にも、ショートカットキーは存在するのでキーボードだけで完結することはできるのですが、押すキーの数がテキストエディタなどに比べて多くなってしまい、時間もかかりますし、本来考えるべきコンテンツのことから思考が途切れてしまいやすいと思います。


そこで考えられる対策の一つは、マクロを使うことでした。
例えば以下のマクロを使うと、簡単に複数行の選択・コピーができます。
具体的には、例えばC2,C3,C4のセルを選択してこのマクロを実行すると、2行目~4行目が行単位でコピーできます。
つまり、「行単位の選択」を意識しなくても、選択したい行が 現在選択しているセルに含まれていれば、それらの行を行単位で選択・コピーできるので、複数行コピーのスピードが速くなります。

Sub myrowcopy()
   Dim RowCnt As Integer
   Dim RowMax As Integer
   Dim SelectArea As Range
   Set SelectArea = Selection
   RowCnt = Selection.Row
   RowMax = SelectArea.Cells(SelectArea.Count).Row
   Range(RowCnt & ":" & RowMax).Copy
End Sub

これをショートカットキーにアサインしておけば、効率が上がると思います。
ちなみにCTRL+SHIFT+Cにこのマクロをアサインするためのコマンドは

Call Application.OnKey("^+C", "myrowcopy")

です。
同様にして、行単位のカット・ペースト、列単位のカット・コピー・ペーストのマクロを作ってショートカットキーにアサインすれば、Excel上であたかもテキストエディタを使っているような手軽さで編集ができると思います。


しかし、普通のマクロは一つのWorkbookのファイルと一緒に保存されるため、別のWorkbookでこのマクロを使うためにはいちいちその新しいWorkbookにマクロをコピーしたり、そのWorkbookをマクロが有効な形で保存しなおしたりしなければならないので面倒です。

できれば、どんなWorkbookファイルを開いたときでもこれらのマクロが最初から使える状態になっていてほしいものです。

それを実現するためにはExcelのアドインを作って、そのアドインがExcel起動時にロードされるようにします。

アドインを作るには、Visual Studioを使ってコンポーネントを作成する方法もありますが、それだと敷居が高くなってしまう(個人的にはそっちの方が好きなのですが。。)ので、もっと簡単な方法として、上記のVBAマクロをアドイン化する方法があります。

実はVBAマクロをアドインとして登録するのは簡単です。
先のマクロができている状態で、ファイルの保存で、ファイル形式を「Excel add-ins (*.xlam)」を選ぶと、アドインを保存するべき場所が自動的に開かれるので、そこに何か名前を付けて(拡張子は変えないで)保存します。
そして、開発者タブの「アドイン」を選んで、今保存したアドインのチェックをオンにすれば、有効になります。

なお、ショートカットキーのアサインを自動化するには、Workbookがロードされた時に 起動されるメソッド「Workbook_Open」の中に、先に紹介した Application.OnKey を呼び出す部分を書いておけばOKです。


このVBAのアドインは結構便利です。
ちょっとした修正もVBE上ですぐできますし、他のマシンで同じアドインを使用する場合も単純にそのxlamファイルを必要な場所にコピーして、上記のようにアドインメニューでチェックを入れるだけなのですぐできます。

便利な割には意外と使われていない気がするVBAアドインですが、もっと活用されてもいいような気がします。