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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-16 18:05:05357ブラウズ

Can You Modify Cells from a UDF Without Returning an Array in Excel?

配列を返さずに他のセルを変更する UDF を作成する

現在、New_years という関数を含む Excel アドインがあります。指定した 2 つの年の間の元旦の配列。ただし、複数のセルを選択し、Ctrl Shift Enter を使用して配列を作成する必要があります。

配列の作成を回避することは可能ですか?

はい、可能です。配列を返さずに、UDF から他のセルを直接変更します。 Excel では UDF がセルのプロパティを変更することを禁止していますが、Windows タイマーと Application.OnTime タイマーを組み合わせて使用​​する複雑なソリューションがあります。

ソリューションの概要

  1. UDF 内に Windows タイマーを作成します。
  2. Windows タイマーは Application.OnTime をスケジュールします。 timer.
  3. Application.OnTime タイマーは、UDF の外でコードを安全に実行します。

コードの実装

次のコードを配置する必要があります通常のモジュール:

Private Declare Function SetTimer Lib "user32" ( _
      ByVal HWnd As Long, _
      ByVal nIDEvent As Long, _
      ByVal uElapse As Long, _
      ByVal lpTimerFunc As Long _
   ) As Long

Private Declare Function KillTimer Lib "user32" ( _
      ByVal HWnd As Long, _
      ByVal nIDEvent As Long _
   ) As Long

Private mCalculatedCells As Collection
Private mWindowsTimerID As Long
Private mApplicationTimerTime As Date

Public Function AddTwoNumbers( _
      ByVal Value1 As Double, _
      ByVal Value2 As Double _
   ) As Double

   AddTwoNumbers = Value1 + Value2

   ' Cache the caller's reference for later use in a non-UDF routine
   If mCalculatedCells Is Nothing Then Set mCalculatedCells = New Collection
   On Error Resume Next
   mCalculatedCells.Add Application.Caller, Application.Caller.Address
   On Error GoTo 0

   ' Set the Windows timer
   If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID
   mWindowsTimerID = SetTimer(0&, 0&, 1, AddressOf AfterUDFRoutine1)

End Function

タイマールーチン

AfterUDFRoutine1 と AfterUDFRoutine2 という 2 つのタイマー ルーチンが定義されています。これらは、UDF の外部でコードのスケジュールと実行を処理します。

使用例

Excel ワークシートのセルに AddTwoNumbers 関数を入力します。 =AddTwoNumbers(A1, B1)

これによりタイマーが開始されますprocess.

重要な注意事項

  • 制御されないループを避けるために、UDF を揮発性にしたり、揮発性の関数/セルを UDF に渡したりしないでください。
  • このソリューションは複雑なので、すべてのアプリケーションに適しているとは限りません。

以上がExcel で配列を返さずに UDF のセルを変更できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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