人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

EXCEL VBAのユーザ定義関数について

Function Test関数(引数1,引数2…)
If 条件 Then
処理A
Else
処理B
End If
End Function

このようなユーザ定義関数を作っています。
あるセルにこの関数を入れたときに、処理Aならセルの文字色を赤、処理Bなら青にするVBAの記述がわからないので教えてください。

●質問者: capsuleq
●カテゴリ:コンピュータ インターネット
✍キーワード:Excel test VBA セル ユーザ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● takerudayo
●500ポイント ベストアンサー

セルの色を変更する処理は以下の通りですが・・・


ActiveCell.Interior.ColorIndex = 3 'カーソルが居るセルの色を変更

Range("A1").Interior.ColorIndex = 5 'セルの場所を指定して色を変更

Range("A1").Interior.Color = RGB(255,0,0) 'その他の色指定方法


「あるセルにこの関数を入れたときに」とありますが、

セルにユーザが作成した関数をセットして処理できないと思います。


もしどうしてもVBAだということであれば、

VBAはボタンを配置してそのクリックイベントから起動するか

ワークシートのopenイベントなどに書いて起動する必要があると思います。



条件によってセルの色を変えたいだけであれば、

簡単な条件に限られますが・・・「書式」メニュー内の「条件付書式」を

使われたほうが良いかと思います。

◎質問者からの返答

参考になるご回答ありがとうございます。

>セルにユーザが作成した関数をセットして処理できないと思います。

というのは、上に挙げられた3種類のセル色変更の処理の指定先セルに

ユーザ定義関数が入力されたセルをセットできない、ということですよね?


>簡単な条件に限られますが・・・「書式」メニュー内の「条件付書式」を

条件付書式で解決できないので、この質問になりました。

具体的には、Test関数の引数1,2…にはそれぞれセル指定を入ります。

引数にはいったセルの中身(文字列)によって条件が分岐し、

処理AかBの2パターンで置換、編集した新しい文字列が

Test関数の結果になります。

そのときに、処理A、Bどちらになったかを文字色に反映して

確認できるようにしたいです。

検索した範囲では、

○Excelユーザー定義関数が書き込まれているセルアドレス

http://okwave.jp/qa4323402.html

が、近いと思うのですが、うまく組み込めません。


2 ● slapshock
●50ポイント

以下で、出来るかと思います。

Function Test関数(引数1,引数2…)

If 条件 Then

'文字を赤色にする

ActiveSheet.Cells(r, c).Font.ColorIndex = 3

Else

'文字を青色にする

ActiveSheet.Cells(r, c).Font.ColorIndex = 5

End If

End Function

*r,cはCELLの座標を入れてください。

◎質問者からの返答

>*r,cはCELLの座標を入れてください。

この部分をどうしたらよいのかが、自分では解決できずに知りたかったところです。

ご存知だったらよろしくお願いします。


3 ● van-dine
●50ポイント
Function Test
 If 条件 Then
 Range("?").Font.Color = vbRed 'Font.ColorIndex = 3でも可
 Else
 Range("?").Font.Color = vbBlue 'Font.ColorIndex = 5でも可
End Function
||<<
です。
あと、コードをすっきりさせたければ、VBAのIIf関数を使って、
>|vb|
Function TestUseIIf
 Range("?").Font.Color = IIf(条件, vbRed, vbBlue)
  'IIf関数:条件が真なら2番目、偽なら3番目の引数が返る
End If

としてみるのもいいでしょう。

◎質問者からの返答

2番の方とおなじで、

>Range("?").

この部分をどうしたらよいのかが、自分では解決できずに知りたかったところです。

ご存知だったらよろしくお願いします。


4 ● yyok
●250ポイント

気になって私もいろいろと試してみたのですが。

結論しては暫定的に事故解決された方法、ユーザー定義関数と

条件付き書式の組合せしかないようです。

例えば関数定義は

Function Test関数(引数1,引数2…) as Integer

のようにして、セルの式にこの関数を入力。

そのセルの条件付き書式で戻り値を判定して色を変える、

という仕組みです。

関数の呼出元はApplication.Callerで判定出来そうなので、

Application.Caller.Interior.ColorIndex = 色指定

が出来れば良かったのですが。

セルの式に指定するユーザー定義関数は、戻り値を返す以外

のことは出来なさそうです。

例えばそのセルの書式を変更したり、そのセルの値を他の

セルに設定したりといった、戻り値を返す以外の、いわゆる

関数の副作用をさせることは出来ないようです

(副作用させる関数を作って式に入れると、エラーになります)。

このあたりの制約についてHELPやMSDNを調べてみましたが、

見つけることはできませんでした。

◎質問者からの返答

ありがとうございます。

>セルの式に指定するユーザー定義関数は、戻り値を返す以外

>のことは出来なさそうです。

が結論ですね。

コメントで紹介いただいている

http://support.microsoft.com/kb/170787/ja

が、オフィシャルな情報になりそうです。

じぶんの書き方が間違っているだけなのかと思ってした質問ですが

勉強になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ