図1●安達 恒司氏が開発したフリーのヘルプ作成ソフト「HelpDesigner」の画面
図1●安達 恒司氏が開発したフリーのヘルプ作成ソフト「HelpDesigner」の画面
[画像のクリックで拡大表示]
リスト1●ユーザー定義関数にヘルプを組み込むSetHelpプロシジャ
リスト1●ユーザー定義関数にヘルプを組み込むSetHelpプロシジャ
[画像のクリックで拡大表示]
図2●ユーザー定義関数を利用するときに表示される[関数の引数]ダイアログボックス
図2●ユーザー定義関数を利用するときに表示される[関数の引数]ダイアログボックス
[画像のクリックで拡大表示]
表1●Excelに用意されているマクロの分類(Categoryオプション)とその番号
表1●Excelに用意されているマクロの分類(Categoryオプション)とその番号
[画像のクリックで拡大表示]
リスト2●ユーザー定義関数に組み込んだヘルプを解除するマクロ
リスト2●ユーザー定義関数に組み込んだヘルプを解除するマクロ
[画像のクリックで拡大表示]
図3●ヘルプ・ファイルが見つからないときに表示されるメッセージ
図3●ヘルプ・ファイルが見つからないときに表示されるメッセージ
[画像のクリックで拡大表示]

 まだまだ寒い日が続いていますが,みなさん風邪などひいていませんか? さて,今月の悩める子羊はどなたでしょうか。

今月の相談

「同僚のOLに頼まれて,ユーザー定義関数(自作のワークシート関数)を作ってあげたのですが,『ヘルプが出ない』と言われました。そんなこと考えもしなかったのですが,ユーザー定義関数用ヘルプってできるんでしょうか?」

 ふむふむ,なるほど。あなたそのOLさんに惚れてますね? せつない男心ってやつですか。えっ,余計な詮索はするな? ああ失礼。えーと,肝心のご相談についてですが,「できるのか?」と問われれば「できる!」とお答えします。

 この治療には二つの処方が必要です。まずはヘルプ・ファイルを作ること,次にそのヘルプ・ファイルをExcelに組み込むことです。

 ユーザー定義関数は,Excelに標準で用意されていない計算式を作成できるとても便利な機能です。しかし,VBAの知識を持たない人に使ってもらう場合には,やはりその使い方や注意点などを記述したヘルプが必要です。また,自分が作成したユーザー定義関数であっても,時間が経つと自分でも使い方(引数の指定方法など)を忘れることがあります。ヘルプを作成しておくと,使い方が一目でわかって便利です。

ヘルプ・ファイル作成には
専用ツールが便利

 ヘルプ・ファイルを作成するには,専用のツールを使うのが便利です。市販の製品もありますが,自作のユーザー定義関数程度のヘルプであれば,フリーソフトでも十分でしょう。

 私は安達 恒司氏(http://www.koji27.com/)の「HelpDesigner」というフリーソフトを愛用しています(図1[拡大表示])。テキスト・エディタに近い感覚でサクサクと文章を入力でき,リンク,ジャンプ,ポップアップなどもボタン一つで設定できます。最後に[ヘルプ・ファイルの作成]ボタンをクリックすれば出来上がり。WYSIWYGエディタではないので文字の修飾などは作成したヘルプ・ファイルで確認しなければなりませんが,そのぶん軽くできていて快適です。

MacroOptionsメソッドで
ヘルプ・ファイルを組み込む

 ヘルプ・ファイルができたらExcelに組み込みます。難しいプログラミングを想像するかもしれませんが,拍子抜けするほど簡単です。ほんの数行のコードを記述するだけです。

 リスト1[拡大表示を見てください。これはユーザー定義関数にヘルプを組み込む処理です。事実上,(1)のMacroOptionsメソッドを実行するだけです。リスト1[拡大表示では(1)を複数行に分けて記述していますが,これは一つのステートメントです。

リスト1●ユーザー定義関数にヘルプを組み込むSetHelpプロシジャ

Sub SetHelp()
    Dim myFileName As String
    myFileName = "STEPSUM関数.HLP"

    Application.MacroOptions Macro:="StepSUM", _
        Description:=
            "指定されたデータ範囲内で飛ばし計算をします。", _
        Category:=14, _
        HelpFile:=myFileName
End Sub

 MacroOptionsメソッドはその名の通り,マクロのオプションを指定するものです。実に10個の引数があります。もちろんすべてを指定する必要はありません。ここでは四つの引数を指定しています。第1引数(Macro)にはマクロ名を,第2引数(Description)にはマクロの説明を文字列で指定します。ここで指定した文字列は,[関数の挿入]ダイアログボックスや[関数の引数]ダイアログボックス(図2[拡大表示])に表示されます。

 第7引数(Category)はマクロの分類を指定します。表1[拡大表示]はあらかじめ決められている分類とその番号を示したものす。Excel 2003では,分類番号の15~32がユーザーに開放され,自由に指定できるようになりました。
 Category:=”オリジナル集計関数”
といった具合に,数値の代わりに文字列を指定することも可能です。その際,指定した分類が存在しない場合,未使用の番号が自動的に割り当てられます。

 第10引数(HelpFile)に,作成したヘルプ・ファイルを指定します。ヘルプ・ファイルが,Excelファイル(ヘルプ・ファイルを登録するマクロを記述したもの)と同じフォルダにある場合は,ファイル名だけでOKです。そうでない(例えばヘルプ・ファイル専用のフォルダを作成している)場合は,相対パスまたは絶対パスとファイル名を組み合わせて指定します。

 ついでに組み込んだヘルプを解除する方法も紹介しておきましょう(リスト2[拡大表示])。第2引数と第10引数に,文字数0の文字列を指定してMacroOptionsメソッドを実行するだけです。

リスト2●ユーザー定義関数に組み込んだヘルプを解除するマクロ

Sub RemoveHelp()
    Dim myFileName As String

    Application.MacroOptions Macro:="StepSUM", _
        Description:="", _
        HelpFile:=""
End Sub

 ユーザー定義関数にヘルプを組み込むマクロを一度実行すると,その設定はExcelを終了しても保持されます。その後,ヘルプ・ファイルの名前を変更したり,移動したりすると,ヘルプを呼び出したときに図3[拡大表示]のようなメッセージが表示されます。[はい]ボタンをクリックして,表示されるダイアログボックスで変更したヘルプ・ファイルを選択すると,そのファイルがヘルプ・ファイルとして新たに登録されます。

マクロのオプションは
そのブック限定

 ただし,ヘルプの設定は,あくまでもマクロのオプションとして設定されますので,そのマクロを記述したブックだけで有効です。他のブックにマクロをコピーしても,ヘルプの設定はコピーされません。不特定多数のブックでこの関数(マクロ)を利用し,ヘルプを表示したいのであれば,ユーザー定義関数を個人用マクロブック(PERSONAL.XLS)に保存し,その関数にヘルプを設定するマクロを実行します。この場合,登録するマクロ名は,「PERSONAL.XLS!StepSUM」のようにブック名を含む名前を指定しなければなりません*1

 さて,悩める子羊君,これで同僚のハートをゲットできるかな?

古庄 潤