1. ホーム
  2. c#

[解決済み] Excelカスタム関数のツールチップの探求

2022-12-05 08:45:56

質問

この質問は 質問 以前 を使用した関数の説明を提供することを諦めるというものです。 Application.MacroOptions ( VBA6 ) ( VBA7 など)がありますが、この情報は実際にはツールチップとして表示されないので、私の問題の解決にはなりません。

ゴール

私たち全員が望むことは、あらゆる手段(VBA、VSTO、または COM アドイン)でカスタム関数を定義でき、インラインまたは数式バーにあるすべての Excel 組み込み関数のように、関数とそのパラメーターのポップアップ/ツールチップの説明をユーザーに提供することです。

このニーズに対する広く受け入れられている答えは、カスタム関数では不可能だということですが、私はその信念に異議を唱えたいと思います。

問題点

現在、私が見た最善の方法は、関数ダイアログ (数式バーの fx ボタン) を表示するときに、その関数とパラメータの説明が以下のように表示されるように、関数 (多くの場合、上記の MacroOptions 呼び出しを使用します) を定義することです。

ご覧のように、これは多くのパラメータを持つ複雑な関数です。ユーザーがこの "関数引数" ダイアログとその表示方法を知らず、代わりに Excel の標準ツールチップにのみ精通している場合、数式名だけが表示され、追加のヘルプは表示されないでしょう。

これでは、必要なパラメータを正しく提供するチャンスはないでしょう。(ドキュメントを読まずに。もちろん、そんなことをするユーザはいないのですが。)

さて、パワーユーザーであれば、次のように入力することで Ctrl + シフト + A のように、関数パラメータの自動補完リストが付与されます。

しかし、もちろん、標準的なExcelユーザーは最初の画像からデフォルトの動作にしか慣れず、おそらくその機能を学ぶことはないだろうという、上記と同じ問題があります。

この時点で、なぜこれが十分ではなく、すべてのビルトイン関数が持っているもの、つまり、関数の使用方法をユーザーに伝えるインライン ツール ヒントが必要なのかが明らかになるはずです。

いじわる

最初は、これは単に Excel のネイティブ アプリケーションの関数以外では不可能だと確信していたかもしれません。アドインと VBA は拡張機能であり、このツールチップは単に拡張できないだけなのかもしれません。しかし、分析ツールパックというアドインの存在によって、その説は覆されました。確かにMicrosoftで作られているが、ANALYS32.xllはVB、C、C++、C#で作成できるものと同じようにスタンドアロンのXLLアドインである。案の定、このXLLをアプリケーションに読み込むと 関数 を利用できるようにすると、ネイティブの Excel 関数と同じツールチップが表示されます。

この情報が何らかの方法でこの XLL ファイルにエンコードされて Excel に渡されるのであれば、独自のアドインでそれを再現する方法があるのではないでしょうか。私は今、逆コンパイルについて独学で学び始め、分析ツールパックで何が起こっているかをリバース エンジニアリングできるかどうかを見ているところです。

お手伝いできること

私はこの問題に関して、公開されているすべての情報を調査したとほぼ確信しています。もし、私が知らないことを誰かが知っていて、それがこの問題の助けになるかもしれないならば、遠慮なく申し出てください。私はコンパイルされたDLL/xllのリバースエンジニアリングに非常に不慣れなので、もし誰かがローカルのAnalysis32.xllを開いて、カスタム関数定義で何が起こっているのかを調べたいなら、私は大いに感謝するでしょう。そうでなければ、私はすべての行き止まりに行き当たるまでこれを自分で掘り続け、見つけたものを報告するつもりです。

どのように解決するのですか?

GitHub に概念実証のためのプロジェクトを Excel-DNA IntelliSense プロジェクトとして、実装しています。

UI Automation クラスを使用して適切な Excel ユーザーインターフェイスイベントを監視し、適切なときにフォームが表示されます。

このコードは Excel-DNA アドインとしてラップされており、私の Excel 2013 / Windows 8 マシン上で動作します。他の 1 つの構成 (Windows Server 2008 上の 64 ビット Excel 2010) でテストしましたが、深刻な問題が発生しました。

このように Excel-DNA の属性で定義された C# 関数の場合。

[ExcelFunction(Description = 
    "A useful test function that adds two numbers, and returns the sum.")]
public static double AddThem(
    [ExcelArgument(Name = "Augend", 
                   Description = "is the first number, to which will be added")] 
    double v1,
    [ExcelArgument(Name = "Addend", 
                   Description = "is the second number that will be added")]     
    double v2)
{
    return v1 + v2;
}

関数の説明と

で、関数を選択すると、引数のヘルプが表示されます。

見た目はいいのですが、すべてがまだ非常に不安定で、私のマシンでしか動作せず、時々 Excel がクラッシュします。しかし、これは手始めかもしれません...。


2014年5月9日更新です。

古い Excel と Windows のバージョンで引数ヘルプを動作させる方法について、いくらか進展がありました。しかし、すべてを信頼できるようにするには、まだかなり多くの作業が必要です。これを手伝いたい人は、私に直接連絡してください。


2016年6月18日に更新しました。

Excel-DNAアドインとVBA関数の両方に対するExcel UDF IntelliSenseのサポートは現在テスト中です。以下を参照してください。 入門編 のページをご覧ください。