配列を返さずに Excel UDF のセルを変更するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-14 16:59:02
オリジナル
808 人が閲覧しました

How to Modify Cells in Excel UDFs Without Returning an Array?

Excel UDF: 配列を返さずにセルを変更する

Excel では、ユーザー定義関数 (UDF) は通常、値または配列を返します。ただし、UDF が配列を返さずに他のセルを変更する必要があるシナリオもあります。これは、Windows タイマーと Application.OnTime イベントを含む複雑な手法によって実現できます。

問題:

入力として 2 年かかる New_years という名前の UDF を考えてみましょう。そして、それらの年の間の元旦の日付の配列を返します。ただし、Excel で配列に値を設定するには、ユーザーが手動でセルを選択し、数式を入力して、Ctrl Shift Enter を押す必要があります。この制限により、UDF は日付を自動的に入力できなくなります。

解決策:

セルを直接変更する UDF に対する Excel の制限にもかかわらず、Windows タイマーとアプリケーションを使用する回避策です。 OnTime イベントがそれを可能にします。 UDF 内から Windows タイマーを開始することで、後続の Application.OnTime タイマーをスケジュールして、UDF で禁止されるアクションを実行できます。

コード例:

次のコードは、UDF が呼び出されるセルの参照を保存するコレクションを使用してこの手法を実装する方法を示しています。 2 つのタイマー ルーチン、AfterUDFRoutine1 と AfterUDFRoutine2 は、タイマー イベントの処理に使用されます。

Public Sub AfterUDFRoutine1()
  ' Stop the Windows timer
  If mWindowsTimerID <> 0 Then KillTimer 0&, mWindowsTimerID

  ' Cancel any previous OnTime timers
  If mApplicationTimerTime <> 0 Then
    Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2", , False
  End If

  ' Schedule timer
  mApplicationTimerTime = Now
  Application.OnTime mApplicationTimerTime, "AfterUDFRoutine2"
End Sub

Public Sub AfterUDFRoutine2()
  Dim Cell As Range
  ' ... Do tasks not allowed in a UDF ...
End Sub
ログイン後にコピー

使用法:

この手法を適用するには、UDF (例: AddTwoNumbers) ) は通常のモジュール内で作成できます。 UDF 内でタイマー ルーチンが開始され、呼び出し元のセルのセル参照がコレクションに格納されます。その後、タイマー ルーチンは、UDF のスコープ外で必要なセルを変更します。

Windows タイマーと Application.OnTime イベントを活用することで、配列を返さずにセルを変更する UDF を作成することが可能になります。この手法により、自動化の向上が可能になり、ユーザーが手動で配列を埋める必要がなくなりました。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート