Excelカスタム関数ツールチップの探求


100

この質問はされてい尋ねた 前に、しかし、それぞれの時間は受け入れ答えは単純に使用して関数の説明を提供するための辞任であるApplication.MacroOptionsVBA6)(VBA7を)、それは私の問題を解決していませんので、この情報は実際には、ツールチップとして表示されません。

目標

私たちすべてが望むのは、何らかの方法(VBA、VSTO、またはCOMアドイン)でカスタム関数を定義でき、ユーザーに関数とそのパラメーターのポップアップ/ツールチップの説明を提供できることです。すべての組み込みのExcel関数に対して、インラインまたは数式バーに表示されます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

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

問題

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

必要なパラメーターを正しく提供する機会がありません。(もちろん、ドキュメントを読んでいない限り、ユーザーはこれを行いません。)

これで、パワーユーザーはCtrl+ Shift+ Aと入力することで、次のような関数パラメーターのオートコンプリートリストが付与されることを知っているかもしれません。

ここに画像の説明を入力してください

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

この時点で、これで十分ではなく、すべての組み込み関数に必要なもの、つまりユーザーに関数の使用方法を教えるインラインツールチップが必要であることは明らかです。

いじめる

最初は、ネイティブのExcelアプリケーション関数を除いて、これは単に不可能であると私は確信していたかもしれません。アドインとVBAは拡張機能であり、このツールチップは単に拡張できない場合があります。しかし、その理論は、Analysis Toolpakアドインの存在によって挑戦されます。確かに、これはMicrosoftに組み込まれていますが、ANALYS32.xllは、VB、C、C ++、およびC#で作成できるものと同様に、スタンドアロンのXLLアドインです。案の定、このXLLがアプリケーションにロードされたときに機能し、それを利用できるようにすることをネイティブExcel関数の同じツールチップを持っています。

ここに画像の説明を入力してください

この情報が何らかの形でこのXLLファイルにエンコードされてExcelに渡された場合、独自のアドインでそれを複製する方法はありますか?ここで、逆コンパイルについて少し学び始め、分析ツールパックで行われていることをリバースエンジニアリングできるかどうかを確認します。

あなたが助けることができる方法

この問題について公開されているすべての情報を調査したことはほぼ間違いありません。誰かがこれを助けるかもしれない私が知らない何かを知っているなら、遠慮なくご相談ください。私はリバースエンジニアリングされたコンパイル済みのdll / xllに非常に慣れていないので、誰かがAnalysis32.xllのローカルコピーをポップオープンしたいと感じた場合、カスタム関数の定義で何が起こっているのかを理解するために、私は多くの義務を負うことになります。それ以外の場合は、行き止まりをすべて突き止めて、見つけたものを報告するまで、自分でこれを掘り下げていきます。


4
使用可能なテクノロジーを使用して、現在のExcelバージョンでUDF引数のツールチップを作成または表示することはできません。MVPによる出典:answers.microsoft.com/en-us/office/forum/office_2007-customize/...
silkfire

.NET ReflectorはANALYS32.xllを開くことができなかったため、.NETアセンブリではないと結論付けました。これには驚きました。それをアセンブリ言語に逆コンパイルしようとする必要があるように見えますか?
アラン

5
面白そうに聞こえますが、私は過去(Office 97)でwinapiを使用してツールチップを作成しました。そしてそのようにしてあなたはそれを行うことができます。それが面白いなら、私は情報を掘り下げてそれから回答を作ろうとすることができます。
Archlight

1
私もそれを手に入れます、これを掘り起こすのにはしばらく時間がかかります。しかし、他のユーザーが使用できるように、ここに表示されます。winapi / vba /のローダウンと邪悪なコンボ、そして私はvb.dllとして作成したと思いますが、.netに引き上げる問題はありません
Archlight

1
どうやらExcelの開発チームは、ここでは、この機能のために票を取っている:excel.uservoice.com/forums/...を
アラン・

回答:


40

これを実装したExcel-DNA IntelliSenseプロジェクトとして、概念実証プロジェクトをGitHubに投稿しました。

UIオートメーションクラスを使用して適切な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サポートは現在テスト中です。手順については、GitHubの「はじめに」ページ参照してください。


悲しいことに、引数ヘルプが使用するUIオートメーションのTextRangeサポートには、Excel 2013またはWindows 8またはその両方が必要であるようです。Windows UIオートメーションの経験をお持ちの方からの連絡をお待ちしています...
2013

古いマシンにコンパイルする前に、古いExcelアセンブリを参照しようとしましたか?
DanielMöller2013

1
Excelオブジェクトモデルへの参照は、これには実際には関与していません。しかし、物事に影響を与える可能性のあるUIオートメーションのバージョンは確かに異なる...
Govert

1
これは、これまでの何よりも先にある通りです。あなたは私の賞金に投票します。近いうちにこのソリューションに貢献できるかどうかを確認するつもりなので、プルリクエストに注意してください!
アラン

@Alain Govertに良い仕事を!&Alainこれをマスターしてほしいです。
CodeCamper 2013

1

いかがですか

  1. セルのキー押下イベントで入力テキストをキャプチャします。このような
  2. テキストがカスタム関数と一致するかどうかを確認します。
  3. 一致する場合は、ラベルや形状などをツールチップのふりをして表示します。このような

これは受け入れられますか?

少し見苦しいですが簡単です。


これは私が検討した興味深い出発点ですが、数式を編集するより高度な形式(中央のどこかをクリックして文字を削除/追加したり、数式の一部を強調表示して上書きしたり、または他のいくつかの数式の途中にあるカスタム数式。)これらには、キーを押すことを確認する以上のものが必要です。編集中の数式バーまたはセルの現在の内容を確認する必要があります。これもいくつかのインポートされたdllライブラリで達成され、ハッカーの取得を処理する可能性があります。確かに探索する価値があります。
アラン

-1

XLLとは

XLLは、ExcelまたはExcelアドインマネージャーによって呼び出されるいくつかのプロシージャをエクスポートするDLLです。http://msdn.microsoft.com/en-us/library/office/bb687861.aspx

XLLをどのように開発しますか?

Visual C ++を備えたExcel XLL SDK(またはDLLをコンパイルしてSDKプロシージャを呼び出すことができるもの)

簡単なXLLを作成するためのクイックガイドはどこにありますか?

http://support.microsoft.com/kb/178474

ツールチップを取得するにはどうすればよいですか?

  1. 関数をプロシージャとして実装してエクスポートする
  2. 実装し、エクスポート手順xlAutoOpen(無効) - http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpenは、xlfRegisterを呼び出すだけです-http : //msdn.microsoft.com/en-us/library/office/bb687900.aspx
  4. ツールチップについては、次の点に特に注意してください。 pxArgumentText, pxFunctionHelp, pxArgumentHelp1

残念なことに、Analysis Toolpakアドインにもツールチップはありません。

私の解決策は間違っていましたが、元のポスターから間違った情報が投稿されていました。彼のリンクがこれがANALYS32.xllの機能ではないことを明確に示している場合、BINOMDISTで画像を表示します。

これは私が不可能な質問を解決しようとしていたことを意味します。それは、ポスターが要求したことを実行できるXLLがないためです。XLLのツールチップを表示するバージョンのExcelを見つけた場合は、お知らせください。

XLLの動作を模倣しようとするポスターの質問について、ANALYS32.xllが何をするかに関して私の答えが最も正しかったと確信しています。


3
悲しいことに、xlfRegisterでUDFを登録して、Excelはその情報をシート内のインテリセンスツールチップとして表示しませ。そこに登録されている説明などは、fxボタンを押すとポップアップする関数引数ダイアログボックスにのみ表示されます。しかし、それは元のポスターが求めていることではありません。
2013

@Govertそれは今でもこのように2016年ですか?
beppe9000 2016年

@ beppe9000はい。Excel-DNA IntelliSense拡張機能を使用して、UDF(XLLまたはVBAで定義)のインシートIntelliSenseツールチップを取得できます:github.com/Excel-DNA/IntelliSense
Govert
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.