- ベストアンサー
Excel VBA でFunctionプロシジャがどのセルから呼び出されたか知る方法
Excel VBA で御教授いただきたいのですが、 ExcelのセルからFunctionプロシジャを呼び出し、その戻り値を呼び出しもとのセルに返す。 この時その戻り値によって、セルの属性を変化(例えば色替えなど)を、行いたいものです。 セル属性の変更の方法はわかるのですが、Functionプロシジャがどのセルから呼ばれたかが不明のため、どのセルに対して属性変更を行ってよいかがわからず困っています。 Functionプロシジャ中で、Functionプロシジャがどのセルから呼ばれたか知る方法をご存知の方がいらっしゃいましたら御教授御願いします。 OS:Windows2000 Excel:2000 です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Application.Callerの.Row、.Column、.Worksheet.Nameで取得できます。
その他の回答 (2)
#1のものです。ユーザ定義関数のことですね。 言われてみれば、まさにその通りで失礼しました。 #2の方の方法でできるようです。わたしも勉強になりました。
お礼
回答いただき、ありがとうございました。 また、何か有りましたらおねがいします。
セルからFunctionプロシジャを呼び出すという表現がわかりにくいです。セルに対して何かを操作した時にプロシジャを呼び出すという方法はわかります。 例えば、セルを右クリックした時、ダブルクリックした時、データの入力した時、選択しているセル範囲が変わったときには、それぞれ次のイベントプロシージャが呼び出されます。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Private Sub Worksheet_Change(ByVal Target As Range) Private Sub Worksheet_SelectionChange(ByVal Target As Range) これらのプロシジャは、Sheetオブジェクトに最初から備わっているというのはご存知ですよね。 引数は ByVal Target As Range ですから、このTargetを参照すれば、どのセルを操作している時にイベントが発生したのか知ることができます。 例えば、ダブルクリックしたセルの背景をブルーにしてみます。ダブルクリックした時のセル範囲がTargetなので、ここの書式プロパティを変更しています。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Target.Interior.ColorIndex = 5 End Sub Functionプロシージャを呼び出して、戻り値を使いたい場合は、このプロシージャから呼び出してください。
補足
早速の回答、有難うございます。 セルから呼び出すというのは、セルに =関数名(引数1、引数2) と記述し、 VBAの標準モジュールに Function 関数名(引数1、引数2) (色々な計算処理) 関数名=計算結果 End Function と、記述する方法を示したつもりです。 (言葉足らずですみません) 上記方法で関数を呼び出した時に、その計算結果に応じてセルの色を変えたいというものです。 関数が、どのセルから呼び出されたものかわからないものですから・・・ 御教授頂いた、イベントで呼び出す方法でも実現できるとは思いますが、セルから関数を呼び出せば、計算に必要な引数を渡す事ができるので都合がよかったものです。 と言う事なんですが、ご理解頂けますかね??
お礼
必要な情報が取得できました。 ありがとうございました。 また、何か有りましたら御願いします。