ホームページ  >  記事  >  バックエンド開発  >  Excel UDF は配列を返さずにセルを変更できますか?

Excel UDF は配列を返さずにセルを変更できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-24 21:48:47877ブラウズ

Can Excel UDFs Modify Cells Without Returning Arrays?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。