• ベストアンサー

エクセル BGR?

http://oshiete1.goo.ne.jp/qa4068415.html こちらでセルA1から他のセルB1の背景色を指定する方法を教えていただきました。 ありがとうございます。 うまくはいったのですが、指定されたカラーコードの認識が、 RGBではなくBGRのようですね。 A1でRGBで指定したカラーコードの通りに、B1の背景色を表示することは可能なのでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.1

前回回答したものです。 A1にカラーコード表す6桁の16進数があり、赤(左2桁)、緑(中2桁)、青(右2桁)とした場合 ご指摘の通り赤と青が逆になってしまいます。 そこで Range("B1").Interior.Color = Target.Value の代わりに R_CODE = Right(Target.Value, 2) G_CODE = Mid(Target.Value, 3, 2) B_CODE = Left(Target.Value, 2) Range("B1").Interior.Color = CLng("&h" & B_CODE & G_CODE & R_CODE) と右2桁と左2桁を入れ替えてはどうでしょうか? 注)B1に10進数で入力している場合はHEX関数で一度16進数に変換してから

ideal16
質問者

お礼

重ね重ねありがとうございます。 こちら、最後のコードのB_CODEとR_CODEを入れ替えましたが、うまくいきました! 本当に助かりました、ありがとうございます。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。 Excel で使用される色は、   [ツール]-[オプション]-[色] で定義されているカラーパレットに依存します。Color プロパティーに カラーコードを指定しても、カラーパレットの何れかの色に丸められて しまいます。 用途によると思うのですが、真に任意色に変更したいのであれば、 カラーパレット側を変更しなくてはなりません。 Private Sub Worksheet_Change(ByVal Target As Range)      Dim vColor As Variant      If Target.Address <> "$A$1" Then Exit Sub      On Error Resume Next   vColor = Target.Value   If VarType(vColor) = vbString And Len(vColor) = 6 Then     ' // 16進カラーコードの場合(例)D6D6D6     Dim r As Integer, g As Integer, b As Integer     r = CInt("&H" & Mid$(vColor, 1, 2))     g = CInt("&H" & Mid$(vColor, 3, 2))     b = CInt("&H" & Mid$(vColor, 5, 2))     vColor = RGB(r, g, b)   Else     ' // 数値の場合(整数以外はClngで適当に丸め)     vColor = CLng(vColor)   End If   ' // パレットの色を変更してから、カラーインデックスで指定する   ThisWorkbook.Colors(1) = vColor   Range("B1").Interior.ColorIndex = 1 End Sub

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

RGB関数の返り値は、RGB(r,g,b)で、 RGB(255,0,0)=255 RGB(0,255,0)=65280 RGB(0,0,255)=16711680 で、 A1が255で赤 A1が65280で緑 A1が16711680で青 RGBになりませんか。

ideal16
質問者

お礼

ご指定の方法で可能ではあるのですが、 他のセルを指定しての方法でしたので、繁雑になってしまいました。 御回答ありがとうございます。