プロが教えるわが家の防犯対策術!

Excel2003のユーザー定義関数で、RGBの値を指定してセルに色をつけたいと考えています。
具体的には、

=CellColor(255,100,33)

のように、RGBの値を引数にとり、そのセルに色をつけることは可能でしょうか?
マクロを使えば可能ですが…。

また、同時にかなりの数の色を同じシートに出したいのですが、色の数に制限があるというのは本当でしょうか?
そうだとすると、マクロで実現できたとしても不可能ですよね?

以上、よろしくお願いいたします。

A 回答 (4件)

用途次第では有用な情報にはならないと思いますが、


シート上に沢山の色を表示したいだけならば、
オートシェイプを利用する手が有ると思います。

図形描画ツールバーから四角形を描きます。

ALTキーを押しながらサイズ調整すればセルにピッタリの
大きさに描け、セルの高さや幅を変更してもサイズが追随して
くれます。

手作業では四角形のオートシェイプを右クリックで選択して
オートシェイプの書式設定から色と線のタブで塗りつぶしの
色を設定…その他の色…ユーザー設定のタブから
自由に色を 255×255×255 の色を塗れます。

以下は色の変更をマクロで記録したものです。

Sub 色塗り()
ActiveSheet.Shapes("Rectangle 1").Select
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(252, 238, 232)
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
End Sub
    • good
    • 0
この回答へのお礼

なるほど!
これなら、Excel上ですべてのsRGBの色が出せるわけですね!
オートシェイプとは思いつきませんでした。
マクロでオートシェイプをたくさん作って、それぞれにRGB関数でつけた色を塗れば、思い通りのことができそうです。

本当にありがとうございました。

お礼日時:2007/02/10 14:38

#3です。


>、RGBで指定しても、パレットの値に丸められるそうです。
私の読む解説書程度には、そうは書いてないのですが、高名なる#1のご回答者がおっしゃることなので、今後勉強してみます。
ハード的な制約や256色にしてない限り、RGB関数は3つの引数で256x256x256指定できるし、シートの文字やセルの色が区別されると思ってましたが。
    • good
    • 0
この回答へのお礼

コメントありがとうございます。
私も初耳でしたので、試してみました。
セルの色をRGBで指定してみると、確かに丸められていましたので、間違いないようです。
RGB(10, 200, 233)で指定しても、RGB=(0,204,255)、つまり#00CCFF に丸められました。
オートシェイプだと正しく指定した色にすることができました。

ただ、上記の2色は、確かに見た目ではほとんど違いはわかりませんの、通常での利用では問題にならないでしょうね。

お礼日時:2007/02/12 14:16

エクセルの基本を知らない質問です。


ユーザー定義関数は、(他の言語の関数と違い、)関数は「値」(Value)を返すものです。
セルに色をつけるのは、「書式」に冠することです。エクセルの内部でのセル情報記憶域が違い、仕組みも違うものと思います。
Function aaa(a)
Cells(1, 1).Interior.ColorIndex = 3
End Function
ーー
Sub test01()
Cells(3, 1).Interior.ColorIndex = 3
End Sub
など色々やってみればわかります。
ユーザー定義関数になぜ拘るのか、拘らなくても良いのであればSub EndSubで組めば良いと思う。
ーー
Sub test02()
Cells(5, 1).Interior.Color = RGB(10, 200, 233)
End Sub
しかしRGBの3つの値が近いと色の識別が人間には判別しにくく
、区別するつもりで表現しても自己満足に過ぎないのでは。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございました。

> ユーザー定義関数は、(他の言語の関数と違い、)関数は「値」(Value)を返すものです。
> セルに色をつけるのは、「書式」に冠することです。

そういえばそうですね。
なんとなく、関数の方がリアルタイム(セルの値を変えた瞬間に色が変わるなど)の処理が可能っぽいな、と思ったので、関数でできないか考えていました。
普通にやった方がよさそうですね。

ちなみに、他の回答でいただきましたが、Excelのセルの色は、RGBで指定しても、パレットの値に丸められるそうです。
今回のようにRGBで色を指定する場合は、オートシェイプの色を変えるしかないようです。

> しかしRGBの3つの値が近いと色の識別が人間には判別しにくく
> 区別するつもりで表現しても自己満足に過ぎないのでは。

この目的は、画像解析して求めたRGBの結果をExcelに貼り付けて、Excelのセル上で同じ色を再現できないか考えていたものです。
セルのRGB値からオートシェイプの色を変えることで実現できそうです。

どうもありがとうございました。

お礼日時:2007/02/11 17:41

こんばんは。



一般的な方法では、ユーザー定義関数で、セルに色をつけるというのは、出来ないと思ってください。

>同時にかなりの数の色を同じシートに出したいのですが、色の数に制限があるというのは本当でしょうか?

いろんな色は出せるのですが、一旦パレットの色を設定しないと色は換えられません。しかし、ColorIndex の数(56)より増やすことは不可能です。設定した色以外は、ColorIndex の数に近いところに、割り振られて丸められてしまいます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

なるほど、マクロでできたと思ったのは、丸められた色だったわけですね。
大変参考になりました。

お礼日時:2007/02/10 14:26

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