配列を返さずに他のセルを変更する UDF を作成する
現在、New_years という関数を含む Excel アドインがあります。指定した 2 つの年の間の元旦の配列。ただし、複数のセルを選択し、Ctrl Shift Enter を使用して配列を作成する必要があります。
配列の作成を回避することは可能ですか?
はい、可能です。配列を返さずに、UDF から他のセルを直接変更します。 Excel では UDF がセルのプロパティを変更することを禁止していますが、Windows タイマーと Application.OnTime タイマーを組み合わせて使用する複雑なソリューションがあります。
ソリューションの概要
コードの実装
次のコードを配置する必要があります通常のモジュール:
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.
重要な注意事項
以上がExcel で配列を返さずに UDF のセルを変更できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。