• ベストアンサー

Excel VBA でFunctionプロシジャがどのセルから呼び出されたか知る方法

Excel VBA で御教授いただきたいのですが、 ExcelのセルからFunctionプロシジャを呼び出し、その戻り値を呼び出しもとのセルに返す。 この時その戻り値によって、セルの属性を変化(例えば色替えなど)を、行いたいものです。 セル属性の変更の方法はわかるのですが、Functionプロシジャがどのセルから呼ばれたかが不明のため、どのセルに対して属性変更を行ってよいかがわからず困っています。 Functionプロシジャ中で、Functionプロシジャがどのセルから呼ばれたか知る方法をご存知の方がいらっしゃいましたら御教授御願いします。 OS:Windows2000 Excel:2000 です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

Application.Callerの.Row、.Column、.Worksheet.Nameで取得できます。

yanyan1024
質問者

お礼

必要な情報が取得できました。 ありがとうございました。 また、何か有りましたら御願いします。

その他の回答 (2)

noname#5168
noname#5168
回答No.3

#1のものです。ユーザ定義関数のことですね。 言われてみれば、まさにその通りで失礼しました。 #2の方の方法でできるようです。わたしも勉強になりました。

yanyan1024
質問者

お礼

回答いただき、ありがとうございました。 また、何か有りましたらおねがいします。

noname#5168
noname#5168
回答No.1

セルから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プロシージャを呼び出して、戻り値を使いたい場合は、このプロシージャから呼び出してください。

yanyan1024
質問者

補足

早速の回答、有難うございます。 セルから呼び出すというのは、セルに =関数名(引数1、引数2)   と記述し、 VBAの標準モジュールに Function 関数名(引数1、引数2)  (色々な計算処理)  関数名=計算結果 End Function と、記述する方法を示したつもりです。 (言葉足らずですみません) 上記方法で関数を呼び出した時に、その計算結果に応じてセルの色を変えたいというものです。 関数が、どのセルから呼び出されたものかわからないものですから・・・ 御教授頂いた、イベントで呼び出す方法でも実現できるとは思いますが、セルから関数を呼び出せば、計算に必要な引数を渡す事ができるので都合がよかったものです。 と言う事なんですが、ご理解頂けますかね??

関連するQ&A

  • エクセルVBAでpublic functionを使っているのですが・・・

    エクセルVBAでpublic functionを使っているのですがmicrosoft excel objectsで作成してもフォームからは使えないしフォームで作成してもmicrosoft excel objectsから使えないので困っています、両方から使えるようにできませんか?お願いします。

  • Excel セルが完全に一致することを調べるには

    Excel2010 VBAで、2つのExcelファイルが、セルに設定されている属性(*1)も含めて、完全に一致していることを確認したいのですが、属性(*1)を1つずつ比較して確認していたのでは膨大な時間がかかります。2つのセルが完全に一致することを簡単に調べる方法はないでしょうか。 完全に一致するとは、セルの値だけでなく、セルに設定されている属性(*1)のすべて(*2)が一致しているという意味です。これらのどれが異なっているかは分からなくても、属性(*1)のすべて(*2)が一致していることが分かればいいです。 (*1) 属性とは、書式設定、文字飾り、塗り潰し、罫線などセルに付加するもので、具体的には、フォント、サイズ、太字、文字色、背景色、配置、上罫線、外枠などのことです。 (*2) すべてといっても、あるセルをコピーして複製したセルのように、両者のセルが一致しているのであればその範囲の属性でいいです。 よろしくお願いします。(Windows7,Excel2010)

  • Excelを2つ起動してセルを参照する方法

    ご質問させていただきます。 Excel2007を2つ起動して、他方のシートのセルを参照したいのです。 具体的に説明いたしますと、1つ目のExcel2007をExcel(1)と呼び、2つ目のExcel2007をExcel(2)と呼ぶことにします。Excel(2)のsheet1のA1セル~A48セルまでcalculateイベントでリアルタイムに変化する値が入っています。それらの値をExcel(1)のsheet2のB1セル~B48セルで参照したいのです。 できるのでしょうか? どなたか教えていただけないでしょうか? よろしくお願いいたします。 もしVBAを使わなくてもできるようでしたら、そちらの方法も教えてください。 よろしくお願いいたします。

  • 関数が書かれているセル位置を知りたいのですが、、、

    実行環境は Excel 2000 新規ブックに、 標準モジュールを追加し、 Function Test()   Test = 2 End Function という関数を追加します。 Sheet1 の、 セル「A1」に「10」を入れます。 セル「A2」に「=Test() + A1」 セル「A1」を変更すると、 関数「Test()」が呼び出されます。 このとき、ActiveCell は「A1」を指しますが、 関数「Test()」の位置を知りたいのです。 「No.720361 質問:Excel VBA でFunctionプロシジャがどのセルから呼び出されたか知る方法」では Application.Caller で出来ているようですが、Test() 内で「TypeName(Application.Caller)」とすると、「Double」や「Error」が返ってきます。 (この「Double」の値も気になりますが、、、) 位置の取得方法を教えて下さい、よろしくお願いします。

  • VBAのマクロをシート内の式で使いたい

    VBAで、マクロの関数をエクセルの式で使うことは可能でしょうか? 引数や戻り値の制約も知りたいです。 引数はExcel側ではセル値B1とかになりますが、VBA側では何か対策でもあるのでしょうか? 'VBA public function test(byval a as integer, byval b as integer) as integer test = a + b end function 'エクセル側 C1セルに以下の式 =test(A1, B1)

  • VBAにてエクセルのセルを結合するには?

    VBAにて、エクセルのセルを結合したいのですが? やっていることは、Access97よりVBAで、 Excel97へファイルを落とし込んでいるのですが 罫線を引いたり、列幅等をかえることはできたのですが セルを結合する方法がわかりません。 よろしくおねがいします。

  • VBAでまとめてセルから読み込む方法

    Excel2007のVBAでセルを一セル一セルずつ読み込む方法はわかりました。 ですが、縦と横に複数あるセルをまとめて読み込みデータベースに書き込む方法がわかりません。 例えば、 (1)縦4、横4あるセルをまとめてコピーしてデータベースに書き込む方法 (2)データベースからまとめて読み込んで縦4、横4にまとめて出力する方法 などです。 以上、お手数ですがよろしくお願いします。

  • エクセルVBAで未使用のSUBやFunction

    エクセルVBA内で未使用のSUBやFunctionを洗い出したい。 例えばSUB_Aを読んでいる箇所についてソース内を検索すれば 解りますが、subやfunctionの量が多いので、 何か簡単に調べる方法はありますか?

  • VBAからファイルをセル入力から開く方法

    VBAからファイルをセル入力から開く方法 だれかご教授頂けませんでしょうか?VBAからエクセルファイルを開こうとしています。 そこでシート1のA1セルにファイル名を記述してあり、そのファイル名からファイルを開く事は出来ますでしょうか? 何か良い方法がありましたら教えて頂きたいのですが。

  • Excel2003のVBAで、セルの幅・高さをピクセル単位で取得するには?

    Excel2003のVBAで、セルの幅・高さをピクセル単位で取得するにはどのようにすればよいのでしょうか? Excel2002とExcel2003では違いがあるのでしょうか? 良書などございましたら、ご教授ください。

専門家に質問してみよう