Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1217 / 13645 ツリー ←次へ | 前へ→

【75630】ColorIndexと同じ色をRGBで表には ドカ 14/5/30(金) 5:53 質問[未読]
【75631】Re:ColorIndexと同じ色をRGBで表には kanabun 14/5/30(金) 9:41 発言[未読]
【75632】Re:ColorIndexと同じ色をRGBで表には kanabun 14/5/30(金) 9:53 発言[未読]
【75633】Re:ColorIndexと同じ色をRGBで表には kanabun 14/5/30(金) 10:13 発言[未読]
【75635】Re:ColorIndexと同じ色をRGBで表には ドカ 14/5/30(金) 19:09 お礼[未読]

【75630】ColorIndexと同じ色をRGBで表には
質問  ドカ  - 14/5/30(金) 5:53 -

引用なし
パスワード
   グラフのマーカーの色を変えるときには、ColorIndex = 1とかColorIndex = 2
などとして、色を指定します。

一方、文字の色を変えるときには、Color=RGB(255, 0, 0)として色の指定をします。

ColorIndexの数字の色と同じ色を表すRGBの数字はどうなるのでしょうか?

ColorIndex = 1 → RGB(?,?,?)
ColorIndex = 2 → RGB(?,?,?)
ColorIndex = 3 → RGB(?,?,?)
以下同様に続く

対応表などあるのでしょうか?
それとも自分で一生懸命探さなければならないのでしょうか?

【75631】Re:ColorIndexと同じ色をRGBで表には
発言  kanabun  - 14/5/30(金) 9:41 -

引用なし
パスワード
   ▼ドカ さん:こんにちは〜

>対応表などあるのでしょうか?

ヒントです。

新規Bookを作成し、まずSheet1 でテストです。

'準備 : [A1]より下のセルを10個程度 色塗りしておきます

Sub testSheet1()
  Const 行数 = 10
  Dim a(1 To 行数, 1 To 2)
  Dim c As Range
  Dim i&
  For Each c In Range("A1:A" & 行数)
    i = i + 1
    a(i, 1) = c.Interior.ColorIndex
    a(i, 2) = "'" & Right$( _
       "0000000" & Hex$(c.Interior.Color), 8)
  Next
  [B1].Resize(行数, 2).Value = a
End Sub
実行すると、B列とC列にこんなようなデータが出力されます:
 B列   C列
6    0000FFFF
43    0000CC99
33    00FFCC00
40    0099CCFF
44    0000CCFF
38    00CC99FF
3    000000FF
9    00000080
1    00000000
15    00C0C0C0

これは、コードを見て分かるように、A列のColorIndex と Color を
となりのセルに表示したものです。
意味は たとえば 2行目 [A2]のColorIndex は 43 で その Color値は
&H0000CC99 であるということです。
&H0000CC99 は 右から(お尻から)1バイトずつとりだすと RGB値に
なります。 R=99 G=CC B=00 (16進表記) です。

Colorが &h00CC99FF なら R=FF, G=99, B=CC ということです。


もうひとつ、こんどは Sheet2 で実験です。
(こんどは 前準備は要りません)

Sub testSheet2()
  Dim i&, y&
  For i = 0 To 15
    y = i + 1
    Cells(y, 1).Interior.Color = QBColor(i)
    Cells(y, 2).Value = i
    Cells(y, 3).Value = "'" & Right$( _
     "0000000" & Hex$(Cells(y, 1).Interior.Color), 8)
  Next
End Sub
これを実行しますと A列が16セル塗りつぶされ、
B列    C列
0    00000000
1    00800000
2    00008000
3    00808000
4    00000080
5    00800080
6    00008080
7    00C0C0C0
8    00808080
9    00FF0000
10    0000FF00
11    00FFFF00
12    000000FF
13    00FF00FF
14    0000FFFF
15    00FFFFFF

のような出力が得られます。
このB列が QBColor()関数で、C列は例によってA列の色をColorプロパティで
取得し、それを16進表記したものです。
たとえば Yellow のQBColor番号 は 14 で そのColorは &h0000FFFF ですから、
RGB値は R=FF, G=FF, B=00 ということになります。

【75632】Re:ColorIndexと同じ色をRGBで表には
発言  kanabun  - 14/5/30(金) 9:53 -

引用なし
パスワード
   ColorIndex と Color には 対応表はありません。
ColorIndex とは 56色のカラーパレットのIndex のことで
あるIndexに どの色を割り当てるかは ユーザーがカスタマイズ
できます。
ただ、現在のカラーパレットの、たとえば1番(ColorIndex=1) が
どんな色をしているかは
 WorkbookオブジェクトのColorsプロパティで取得できます。

(参考)
色パレットに登録されている色を調べる
ht tp://officetanaka.net/excel/vba/tips/tips146.htm

【75633】Re:ColorIndexと同じ色をRGBで表には
発言  kanabun  - 14/5/30(金) 10:13 -

引用なし
パスワード
   もうひとつおまけで...

VBAには組み込みの色定数がありますね

Sub testSheet3()
  Dim a, e, i&
  a = Array(vbRed, vbBlue, vbGreen, vbCyan, _
     vbMagenta, vbYellow, vbWhite, vbBlack) '組み込み色定数
  For Each e In a
    i = i + 1
    Cells(i, 1).Interior.Color = e
    Cells(i, 2).Value = "'" & Right$( _
     "0000000" & Hex$(Cells(i, 1).Interior.Color), 8)
  Next
End Sub

【75635】Re:ColorIndexと同じ色をRGBで表には
お礼  ドカ  - 14/5/30(金) 19:09 -

引用なし
パスワード
   ▼kanabun さん 回答ありがとうございます。
おかげさまで目的が達成できました。

1217 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free