Function Test関数(引数1,引数2…)
If 条件 Then
処理A
Else
処理B
End If
End Function
このようなユーザ定義関数を作っています。
あるセルにこの関数を入れたときに、処理Aならセルの文字色を赤、処理Bなら青にするVBAの記述がわからないので教えてください。
セルの色を変更する処理は以下の通りですが・・・
ActiveCell.Interior.ColorIndex = 3 'カーソルが居るセルの色を変更
Range("A1").Interior.ColorIndex = 5 'セルの場所を指定して色を変更
Range("A1").Interior.Color = RGB(255,0,0) 'その他の色指定方法
「あるセルにこの関数を入れたときに」とありますが、
セルにユーザが作成した関数をセットして処理できないと思います。
もしどうしてもVBAだということであれば、
VBAはボタンを配置してそのクリックイベントから起動するか
ワークシートのopenイベントなどに書いて起動する必要があると思います。
条件によってセルの色を変えたいだけであれば、
簡単な条件に限られますが・・・「書式」メニュー内の「条件付書式」を
使われたほうが良いかと思います。
以下で、出来るかと思います。
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の座標を入れてください。
あたらしく、同じ条件式で、処理Aのかわりに「A」、処理Bのかわりに「B」を
戻り値にするユーザ定義関数を設定し、
条件つき書式にいれる…という方法です。
よりよい方法があればと思いますので
ひきつづき回答を募集します。
失礼しました一部勘違いしていました。
capsuleqさんが行いたいことは以下と認識しました。
<br>
A1を条件1のデータを入力するセルとする
B1を条件2のデータを入力するセルとする
C1にユーザ定義関数「=test(A1,A2)」と設定
<br>
この状況で関数にセルを渡す方法としては
Rangeを使うと良いかと思います。
Function test(条件用変数 As String,色を変えるセルの場所 As Range)
色を変えるセルの場所.~
End Function
参考資料「http://www.atmarkit.co.jp/fwin2k/win2ktips/514exrng/exrng.html」
そのとおりにして、実際にできましたか?
>capsuleqさん
自己解決したとおり普通、そういう処理は条件付書式で行います。
ユーザー定義関数では、呼び出し元を特定することは Application.Callerで可能です。
でも、ユーザー定義関数からセルの文字色など、書式の変更はできないのです。
残念ながら、回答に上がっていることはどれもできません。
http://support.microsoft.com/kb/170787/ja
補足ありがとうございます。
セルのデータを扱うならRangeと回答してしまいましたが、
たしかに書式変更はできませんでした。
このような制限があるんですね・・・。
よく回答が集まったもんだなと感心していたところです。
ご紹介のURIが結論ですね。
ありがとうございます。
>takerudayoさん
再度のご回答ありがとうございました。
>takntさん
いろいろ試行錯誤していただいたとのこと、ありがとうございます。
結論が出ましたのでしめます。
たくさんのご回答ご意見ありがとうございました。
助かりました。
呼び出されたセルの色を4のものにする場合、以下のようにしてみましたが
Range(Application.Caller.Address(False, False, xlA1)).Interior.Color = 4
エラーもなく色も変わらず終了してしまいました。
ま、アドレスの取得の仕方などは、参考になると思いますので、参考にしてみてください。