Excel VBA共通関数ライブラリの作り方!別ブックやシートで使い回す方法
生徒
「先生、別のエクセルファイルで作った便利な計算プログラムを、新しいファイルでも使いたいんです。毎回コピーして貼り付けるのは面倒なのですが、何か良い方法はありますか?」
先生
「それは素晴らしい気づきですね!VBAでは『共通関数ライブラリ』という仕組みを作れば、一度書いたコードをどのブックからでも呼び出せるようになるんですよ。」
生徒
「ライブラリ……図書館みたいに、いつでも借りに行けるイメージですか?」
先生
「まさにその通りです。プログラムの部品を整理して、いつでも取り出せるように準備する方法を一緒に学んでいきましょう!」
1. 共通関数ライブラリとは?
エクセルVBAにおける共通関数ライブラリとは、複数のエクセルブック(ファイル)やシートで繰り返し使う「便利なプログラムの詰め合わせ」のことです。例えば、消費税の計算、複雑な住所の分割、特定の色がついたセルの集計など、よく使う処理を一つの場所にまとめておきます。
これを作っておくと、新しい業務で同じような処理が必要になったとき、わざわざ最初からコードを書き直したり、古いファイルを探してコピーしたりする必要がなくなります。自分専用の「魔法の道具箱」をパソコンの中に作るようなものだと考えてください。プログラミングの効率が上がるだけでなく、一箇所を直せば全てのファイルに反映されるため、間違いも少なくなります。
2. アドイン形式で保存するメリット
共通関数をどこでも使えるようにする最も一般的な方法が「エクセルアドイン(.xlam)」として保存することです。通常のエクセルファイル(.xlsxや.xlsm)とは違い、アドインとして保存したファイルは、エクセルを開いている間、裏側で常にスタンバイしてくれます。
アドインにすることで、見た目にはシートが見えない状態で機能だけを提供できるようになります。これにより、作業中のシートを汚すことなく、自作の関数をまるでエクセルに最初から備わっている SUM 関数のなどのように呼び出すことが可能になります。パソコン初心者の方でも、一度設定してしまえば、あとは意識せずにその便利さを享受できるのが最大の特徴です。
3. 共通利用したい「計算関数」を作成する
まずは、ライブラリの核となる「関数」を作ってみましょう。関数とは、何かデータを入れると、計算結果を返してくれる仕組みのことです。ここでは例として、税込み価格を計算するシンプルな関数を作ります。このコードを新しいブックの「標準モジュール」という場所に書き込みます。
' 税込み金額を計算する共通関数
' Publicを付けることで、他の場所からも見えるようになります
Public Function GetTaxPrice(ByVal price As Long) As Long
' 0.1は消費税10%のことです
GetTaxPrice = Int(price * 1.1)
End Function
この関数の名前は GetTaxPrice です。カッコの中の price が、計算してほしい元の金額です。このように Public と宣言することで、他のブックからこの関数を見つけられるようになります。これはライブラリ作りの基本中の基本です。
4. 文字列を整える「便利関数」を追加する
ライブラリには計算だけでなく、文字の見た目を整える処理も入れておくと重宝します。例えば、入力された文字の前後の余分なスペースを消して、全て全角にするような処理です。事務作業ではデータの揺れを直す作業が多いので、こうした関数が手元にあると非常に助かります。
' 文字列を綺麗に整える共通関数
Public Function CleanText(ByVal targetText As String) As String
' 余分な空白を消して、全角に変換します
Dim temp As String
temp = Trim(targetText)
CleanText = StrConv(temp, vbWide)
End Function
関数を分けることで、メインのプログラムは「文字を綺麗にしろ」と命令を出すだけで良くなります。中身がどうなっているか詳しく知らなくても、名前を見ただけで使い方がわかるようにするのが、良いライブラリの条件です。パソコン操作に慣れていない人でも、名前さえ知っていれば使いこなせるようになります。
5. 作成したブックをアドインとして保存する方法
コードが書けたら、いよいよライブラリ化します。エクセルの「ファイル」メニューから「名前を付けて保存」を選び、ファイルの種類を「Excelアドイン (*.xlam)」に変更して保存してください。保存場所は通常、自動的にアドイン専用のフォルダが選ばれます。
保存したら、エクセルの設定画面からそのアドインを「有効」にするチェックを入れます。これで、あなたが書いたプログラムはエクセルというソフトの一部として組み込まれました。新しい空のブックを開いても、先ほど作った GetTaxPrice 関数をセルの中で使えるようになっているはずです。まるでエクセルが進化したかのような感覚を味わえるでしょう。
6. 他のブックからライブラリを呼び出す実践
アドインに保存した関数は、セルの数式としてだけでなく、他のマクロプログラムの中から呼び出すこともできます。これが「プロシージャ設計」の高度なテクニックです。別のブックに書いたメインのプログラムから、ライブラリの関数を呼び出してみましょう。
' メインの作業用ブックで実行するプログラム
Sub ExecuteProcess()
Dim unitPrice As Long
unitPrice = 2000
' アドイン内の関数を使って税込み価格を取得
' セルに書くのと同じ感覚でVBA内でも使えます
Dim finalPrice As Long
finalPrice = GetTaxPrice(unitPrice)
MsgBox "ライブラリで計算した結果は " & finalPrice & " 円です。"
End Sub
もし名前が重なっていてエラーが出る場合は、Run という命令を使ったり、参照設定という高度な設定を行ったりすることで解決できます。しかし、まずはこのように直接名前を呼んで動くことを確認するのが、ライブラリ活用の第一歩です。
7. シート操作を自動化する部品の登録
数値の計算以外にも、「特定の名前のシートを一番最後に作る」といった、操作そのものを部品にすることもできます。これは Sub(サブ)プロシージャとして作成します。戻り値(答え)は必要ないけれど、特定の作業を代行してほしいときに使います。
' 指定した名前のシートを末尾に追加する共通部品
Public Sub AddLastSheet(ByVal sheetName As String)
Dim ws As Worksheet
' 新しいシートを追加して一番後ろに移動
Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = sheetName
End Sub
こうした定型的な操作をライブラリに入れておくと、複数のブックで同じような資料作成を行う際に、マクロの記述量が大幅に減ります。プログラムが短くなるということは、それだけ読みやすく、間違いにくい、質の高いプログラムになるということです。
8. ライブラリをメンテナンスする際の注意点
共通関数ライブラリは作って終わりではありません。消費税率が変わったり、業務ルールが変更になったりしたときには、ライブラリの方を修正する必要があります。ここで注意したいのは、「関数の使い勝手を変えない」ことです。
例えば、今まで「金額」だけを受け取っていた関数を、急に「日付と金額」の両方が必要、という形に変えてしまうと、その関数を使っていた他の全てのブックが動かなくなってしまいます。中身の計算式を最新にするのは良いですが、呼び出し方(引数の数や種類)は変えないように注意しましょう。これが、長く使い続けられる「強いライブラリ」を作るコツです。パソコンの中を整理整頓するのと同じように、プログラムも丁寧に手入れしてあげましょう。
9. チームで共有するためのエクスポート機能
自分一人だけでなく、職場の仲間にもこの便利なライブラリを配りたいときは、作成したモジュールを「エクスポート(書き出し)」しましょう。VBAの編集画面でモジュールを右クリックし、「ファイルのエクスポート」を選ぶと、.bas という拡張子のファイルが保存されます。
このファイルを仲間に渡して、相手のエクセルで「インポート(取り込み)」してもらえば、同じ機能が使えるようになります。あなたの作った便利なツールが、チーム全体の残業を減らすきっかけになるかもしれません。プログラミングは自分のためにやるのも楽しいですが、誰かの役に立ったときの喜びは格別です。共通関数ライブラリをきっかけに、VBAの奥深い世界をさらに探求してみてください。