こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBA Interior.Color

困っています。よろしくお願いします。
以下のマクロで、
値として「薄緑」(13172680)を入力したのに、その値が勝手に変わってしまいます。
13434828になってってしまいます。そのため、「色消し」が働きません。
また、colorとして「白」(16777215)を設定した場合と、colorindexとしてxlnoneを入力した場合、excelの表上での見た目が違います。なぜでしょうか。また、colorに何を入力するとcolorindexにxlnoneを入力したのと同じになるのでしょうか。


Option Explicit
Public Const 薄緑 As Long = 13172680 '200,255,200
Public Const 白 As Long = 16777215 'rgb(255,255,255)


Sub 色付け()
 Cells(1, 1).Interior.Color = 薄緑
End Sub

Sub 色消し()
   If Cells(1, 1).Interior.Color = 薄緑 Then
   Cells(1, 1).Interior.Color = 白
   End If
End Sub

Sub test()
   Cells(1, 1).Interior.ColorIndex = xlNone
End Sub

Sub test1()
   Cells(1, 1).Interior.Color = 白
End Sub

Sub test2()
   MsgBox Cells(1, 1).Interior.Color
End Sub

投稿日時 - 2012-10-21 00:22:03

QNo.7758457

qso

困ってます

質問者が選んだベストアンサー

エクセルのバージョンは?

ここを読んでみればだいたい分かるでしょう。

http://officetanaka.net/excel/vba/cell/cell04.htm

Excel 2003なら、エクセルで使える色はカラーパレットに登録されている56色だけです。
カラーパレットには任意の色を指定することができますが、カラーパレットにない色は使用することができません。

Excel 2007以降ならエクセルで使える色は1600万色ですが、ColorIndexで使うカラーパレットは56色のままです。


>colorに何を入力するとcolorindexにxlnoneを入力したのと同じになるのでしょうか。

xlnoneは、塗りつぶしをしないということです。
Excel 2003では、塗りつぶしをしない場合は背景色は白ですから、カラーパレットに白色がなければ何を入れても同じにはなりません。

投稿日時 - 2012-10-21 02:25:50

補足

ありがとうございます。
バージョンは2003でした。
教えていただいたページを見ました。そこに以下のような記述がありました。これで勝手に数字が変わっていたんだとわかりました。

「Excel 2003までは、Colorプロパティで中間色を指定したとき、Excelが表示できる56色の中から、指定された色に最も近い(とExcelが判断した)色が設定されます。」

もうひとつ教えていただければと思います。質問のしかたがあいまいで申し訳ありませんでした。.interior.colorindex=xlnoneとするとセルの境界の薄い線が表示されます。それはxlNoneは塗りつぶしをしないという事ですね。一方、.interior.color=白 とした場合、背景色は白になりますが、それとともにセルの境界の薄い線が消えます。これは境界まで白に塗ってしまったということだと思います。つまり、.interior.colorindex=xlnone によって「塗りつぶしをしない」という事を実現できるわけですが、.interior.color=なにか ということによって「塗りつぶしをしない」ということを実現できるのでしょうか。また、.interior.colorindexを使わずに「塗りつぶしをしない」ということを実現できるのでしょうか。

投稿日時 - 2012-10-21 09:01:15

お礼

ありがとうございます。これからはある程度勝手に変わるということを前提にマクロを組みたいと思います。助かりました。

投稿日時 - 2012-10-21 09:05:01

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>.interior.color=なにか ということによって「塗りつぶしをしない」ということを実現できるのでしょうか。
>また、.interior.colorindexを使わずに「塗りつぶしをしない」ということを実現できるのでしょうか。

できません。

Colorプロパティは塗りつぶしなしをサポートしていません。

投稿日時 - 2012-10-21 13:42:48

お礼

ありがとうございます。サポートしていないのですね。別の方法を考えます。

投稿日時 - 2012-11-05 21:53:19

あなたにオススメの質問