Excel UDF: 配列を返さずにセルを変更する
Excel のユーザー定義関数 (UDF) の制限の 1 つは、次のことができないことです。セルまたはワークブックのプロパティを直接変更します。ただし、複雑ではありますが、UDF でセルを変更できる回避策が存在します。
Windows とアプリケーション タイマーを使用して UDF の制限を回避する
内部からセルを変更するにはWindows タイマーと Application.OnTime タイマーを巧みに組み合わせた UDF が採用されています。 Windows タイマーは、Excel でセルの変更が許可されている場合にコードを安全に実行する Application.OnTime タイマーを開始します。
実装
UDF は Windows タイマー ルーチンを呼び出し、特定の時間パラメータを持つ Application.OnTime タイマー。次に、Application.OnTime ルーチンは、UDF 自体内では実行できないコードを実行します。
サンプル コード
次のコードは、この回避策がどのように実装されるかを示しています。
Public Function AddTwoNumbers(ByVal Value1 As Double, ByVal Value2 As Double) As Double AddTwoNumbers = Value1 + Value2 ' Schedule the Windows timer mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1) End Function Public Sub AfterUDFRoutine1() ' Schedule the Application.OnTime timer mApplicationTimerTime = Now Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2" End Sub Public Sub AfterUDFRoutine2() ' Perform modifications outside the UDF '... End Sub
注意事項
これ回避策には制限がないわけではありません。これを使用する UDF は、揮発性であってはならず、揮発性関数を渡したり、揮発性の数式/関数を含むセルを参照したりしてはいけません。さらに、セルの変更は、安全な環境 (開いているダイアログやセルの編集がない) でタイマーがトリガーされた場合にのみ行われます。
以上がExcel UDF は配列を返さずにセルを変更できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。