- ベストアンサー
セルから呼び出したプロシージャ内でセルの塗りつぶし
初めて質問させていただきます 宜しくお願い致します セルから呼び出したプロシージャ内からセルの塗りつぶしを 実行しても塗りつぶしが有効になりません たとえば 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個あり、条件付書式では対応出来ないので マクロで処理を試みてます 宜しくお願い致します
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
動かないことは確認しましたが、Functionは関数を作成するためのものなので値を返す以外の処理ができないのではないかと推測します。対処方法としてはSubで塗りつぶし処理を記述してボタンのクリックイベントなどで実行させるか、条件付き書式を使われた方が良いと思います。塗りつぶしの判定方法が20通りあり条件付き書式を使えないとのことですが、20通りの判定を行い真偽を返すスクリプトをFunctionで作成すれば対応できるのではないでしょうか。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >セルから呼び出したプロシージャ内からセルの塗りつぶしを実行しても塗りつぶしが有効になりません 関数プロシージャは、プロシージャから呼び出さないと、いくら、Public ステートメントをつけても、セルのプロパティは変更できません。セルを変更したり、入力したりした時に発生するイベントで作動させるしか、通常の方法では解決できません。 しかし、そのような関数プロシージャを用いるなら、イベントに直接統合してしまったほうが早いです。頻繁に出る質問です。 参考まで http://oshiete1.goo.ne.jp/qa4475523.html
お礼
プロシージャで判定だけを行い チェンジイベントで判定結果から 塗りつぶし処理を行ってみようと 思います ありがとうございました
お礼
> Functionは関数を作成するためのものなので値を返す以外の処理ができないのではないかと推測します なるほど、ありがとうございます 他のイベントで値をなめるような処理を 実行したほうがよさそうですね ありがとうございます