[[20240723162853]] 『VBA_Color値⇔RGB値』(VERISA) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『VBA_Color値⇔RGB値』(VERISA)

こんにちは。
VBAでセル背景色のColor値をRGB値に直したいのですが、
どのようにしたらいいでしょうか?

< 使用 Excel:Excel2021、使用 OS:Windows10 >


 青 = Int(Color値 / 65536)
 緑 = Int((Color値 - 65536 * ColB) / 256)
 赤 = Color値 - (65536 * ColB) - (256 * ColG)

(SAS) 2024/07/23(火) 16:50:49


 訂正。
 青 = Int(Color値 / 65536)
 緑 = Int((Color値 - 65536 * 青) / 256)
 赤 = Color値 - (65536 * 青) - (256 * 緑)
(SAS) 2024/07/23(火) 16:52:03

  With ActiveCell
    R = .Interior.Color And &HFF
    G = .Interior.Color \ &H100 And &HFF
    B = .Interior.Color \ &H10000 And &HFF
  End With
  Debug.Print R; G; B
 
  こういう感じでも
(´・ω・`) 2024/07/23(火) 16:54:30

 And とるより Mod の方がわかりやすいですか

  With ActiveCell
    R = .Interior.Color Mod &H100
    G = .Interior.Color \ &H100 Mod &H100
    B = .Interior.Color \ &H10000 Mod &H100
  End With
  Debug.Print R; G; B
(´・ω・`) 2024/07/23(火) 16:59:23

 お二方ともありがとうございます!
 解決しました!!

 >And とるより Mod の方がわかりやすいですか
 すみません、式の内容はさっぱりです。。
(VERISA) 2024/07/23(火) 17:02:28

 &H100 は 256 の16進数表記です
   &H100 = 256
   &H10000 =  65536 

 演算子 \ は整数除算
 演算子 Mod は剰余 (割り算の余り)
 です
 
 こちらのサイトなども参考に
http://officetanaka.net/excel/vba/graph/25.htm 
(´・ω・`) 2024/07/23(火) 17:20:12

 別アプローチの案をもひとつ。^^;
 LSetステートメントで遠回りする手法です。

    Private Type typeINT32
        Value As Long
    End Type
    Private Type typeCOLORREF
        Red    As Byte
        Green  As Byte
        Blue   As Byte
        NoData As Byte
    End Type

    Sub test()
        Const COLOR1 = &HABCDEF
        Dim i32 As typeINT32, cRef As typeCOLORREF
        i32.Value = COLOR1
        LSet cRef = i32
        Debug.Print Hex(cRef.Blue); Hex(cRef.Green); Hex(cRef.Red)
    End Sub

(白茶) 2024/07/23(火) 19:24:52


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.