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

初めて質問させていただきます
宜しくお願い致します

セルから呼び出したプロシージャ内からセルの塗りつぶしを
実行しても塗りつぶしが有効になりません

たとえば

A1のセルに10を入力
B1のセルに=TEST(A1) と入力

マクロのモジュール内に

Public Function TEST(tmp_No As Integer) As Integer

TEST = tmp_No * 25

'(1)ここから
If TEST = 250 Then
   'Msgbox "チェック用MSG"
   Cells(1, 1).Interior.ColorIndex = 38
End If
'(2)ここまで

End Function

というファンクションプロシージャがあるとします

引数で10を持って行ってるので10×25で
TESTが250になりB1には計算結果として
250と問題なく表示されています

しかし
(1)~(2)のセルの塗りつぶしは実行されません
仮にチェック用のメッセージボックスのコメント
を外すとキチンとメッセージボックスは
表示されます

また、塗りつぶしダケのマクロを作成し

Public Sub cell_paint()

   Cells(1, 1).Interior.ColorIndex = 38

End Sub

実行すると、これも問題なく動作しますので
EXCELの設定ではないと判断しています

セルから呼び出したプロシージャの時
だけ、動作しないようなのですが

なぜでしょうか?
他の方法で回避可能でしょうか?

※実際には塗りつぶしの判定方法が
 20個あり、条件付書式では対応出来ないので
 マクロで処理を試みてます

宜しくお願い致します

A 回答 (2件)

動かないことは確認しましたが、Functionは関数を作成するためのものなので値を返す以外の処理ができないのではないかと推測します。

対処方法としてはSubで塗りつぶし処理を記述してボタンのクリックイベントなどで実行させるか、条件付き書式を使われた方が良いと思います。塗りつぶしの判定方法が20通りあり条件付き書式を使えないとのことですが、20通りの判定を行い真偽を返すスクリプトをFunctionで作成すれば対応できるのではないでしょうか。
    • good
    • 0
この回答へのお礼

> Functionは関数を作成するためのものなので値を返す以外の処理ができないのではないかと推測します

なるほど、ありがとうございます
他のイベントで値をなめるような処理を
実行したほうがよさそうですね

ありがとうございます

お礼日時:2009/02/04 15:17

こんにちは。



>セルから呼び出したプロシージャ内からセルの塗りつぶしを実行しても塗りつぶしが有効になりません

関数プロシージャは、プロシージャから呼び出さないと、いくら、Public ステートメントをつけても、セルのプロパティは変更できません。セルを変更したり、入力したりした時に発生するイベントで作動させるしか、通常の方法では解決できません。

しかし、そのような関数プロシージャを用いるなら、イベントに直接統合してしまったほうが早いです。頻繁に出る質問です。

参考まで
http://oshiete1.goo.ne.jp/qa4475523.html
    • good
    • 0
この回答へのお礼

プロシージャで判定だけを行い

チェンジイベントで判定結果から
塗りつぶし処理を行ってみようと
思います

ありがとうございました

お礼日時:2009/02/04 15:25

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