dポイントプレゼントキャンペーン実施中!

VBA において、ユーザー定義関数を用いてセル A1 に直接
=test(B1)
のように書き込むとします。

この時に

Function test (a as double) as double
Range("B2").value = 3
Range("C1:C10") = range("A1:A10")
test = 2 * a
End Function

のようにして、A1 以外のセルに書き込みをしたいのですが、
そもそも規則として function は、当該セル以外への書き込みが禁止されているのか、
あるいは私が方法を知らないだけなのか、分かりませんでした。

教えて頂けないでしょうか。

A 回答 (3件)

>ユーザー定義関数を用いて


>そもそも規則として function は、当該セル以外への書き込みが禁止されているのか

そもそも論から言われると、私には、禁止されているのかどうかは分かりません。
あくまでも、VBAの範囲内でという制限の中だけなら、正しいとは思いますが、Excelの関数で、戻り値を他に出すものはみたことがありません。

話を元の質問のコード自体に戻すと、それは、コードの書き方が、まったく違います。
それは、単にイベント・ドリブン型マクロというもので、

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

とWorksheet_Change イベントにすればよいと思います。

#2様の方法は、一部の人たちには知られた方法で、名前をイベント・レイズ(EventRaise)と言うかと思いますか、かなり難しく、私の環境では、Excel自体も不安定でした。
    • good
    • 0
この回答へのお礼

丁寧な御回答ありがとうございました。
御紹介の機能を初めて知りました。
勉強してみます。

お礼日時:2018/01/30 08:18

見かけ上それを実現するとすれば、ユーザー関数はグローバル変数をセットするだけにとどめ、重くならない程度に例えば毎秒一度くらい、その変数をチェックするようにして、変化があった場合のみ、処理したかった実体を実行して、変数をクリアするなども考えられます。

    • good
    • 0
この回答へのお礼

御回答ありがとうございました。
ちょっと私には難しかったです。

お礼日時:2018/01/30 08:15

以下のようなことは禁止されているようです。


・スプレッドシートでのセルの挿入、削除、または書式の設定。
・別のセルの値の変更。
・ブックでのシートの移動、名前の変更、削除、または追加。
・計算方法や画面表示など、環境オプションの変更。
・ブックへの名前の追加。
・プロパティの設定およびほとんどのメソッドの実行。
https://support.microsoft.com/ja-jp/help/170787/ …
    • good
    • 1
この回答へのお礼

的確な御回答ありがとうございました。
調べ方が足りなかったです。
勉強になりました。

お礼日時:2018/01/30 08:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!