色の表示形式
長整数型(Long)
RGB
16進数
以上3つをそれぞれ変換してみる。
今回は、RGBと16進数の変換について
・RGB => 16進数
RGB関数の各引数のRed, Green, Blueの値を
16進数に変換する
それにはHex関数を使う。
16進数に変換した後に
1桁だった場合
0を変換後の値に付け加える。
つまり、0から16までの10進数は
16進数では0からFまでの
1桁になるので
左に0を加えて2桁で表すようにする。
RGB => 16進数コード:Sub macro100124a() 'RGB => 16進数 Dim r, g, b As String On Error GoTo ErrHandle r = InputBox("色の表示形式変換:RGB => 16進数" _ & Chr(10) & "Redの値を入力してください。") g = InputBox("色の表示形式変換:RGB => 16進数" _ & Chr(10) & "Greenの値を入力してください。") b = InputBox("色の表示形式変換:RGB => 16進数" _ & Chr(10) & "Blueの値を入力してください。") If r <> "" And b <> "" And g <> "" Then If Int(r) > -1 And Int(r) < 256 Then If Int(g) > -1 And Int(g) < 256 Then If Int(b) > -1 And Int(b) < 256 Then MsgBox "RGB(" & Int(r) & ", " & _ Int(g) & ", " & Int(b) & ") = " & _ RGBtoHexColor(Int(r), Int(g), Int(b)) Exit Sub End If End If End If End If On Error GoTo 0 MsgBox "0から255までの数字を入力してください。" & _ Chr(10) & "終了します。" Exit Sub ErrHandle: MsgBox Err.Description End Sub Function RGBtoHexColor(r As Integer, g As Integer, b As Integer) Dim StrHex As String If r < 16 Then StrHex = "#" & StrHex & "0" & Hex(r) Else StrHex = "#" & StrHex & Hex(r) End If If g < 16 Then StrHex = StrHex & "0" & Hex(g) Else StrHex = StrHex & Hex(g) End If If b < 16 Then StrHex = StrHex & "0" & Hex(b) Else StrHex = StrHex & Hex(b) End If RGBtoHexColor = StrHex End Function |
入力は
結果例は
・16進数 => RGB
16進数から10進数に変換する
そういった関数がないようなので
違うもので代用する。
VBAヘルプのHex関数を参照します。
適切な範囲の数値の前に &H を付けて記述すると、値を直接 16 進数で記述することができます
これは実質的に
16進数から10進数へ変換する関数のように
使うことができそうです。
例えば
&HF = 15
&HA = 10
&HFF = 255
数字と同様にダブルクォーテーションで囲まない。
さらに文字列に含まれる数値を
適切なデータ型に変換する関数
Val関数
を使う。
詳細はVBAヘルプで
16進数 => RGBコード:Sub macro100124b() '16進数 => RGB
Dim StrHexColor As String On Error GoTo ErrHandle StrHexColor = InputBox("色の表示形式変換:16進数 => RGB" _ & Chr(10) & "#以下を入力してください。") On Error GoTo 0 MsgBox "#" & StrHexColor & " = " & _ HexColortoRGB(StrHexColor) Exit Sub ErrHandle: MsgBox Err.Description End Sub Function HexColortoRGB(StrHexColor) If Len(StrHexColor) <> 6 Then GoTo ErrHandle Else Dim i As Integer For i = 1 To 6 If Val("&H" & Mid(StrHexColor, i, 1)) = 0 And _ Mid(StrHexColor, i, 1) <> 0 Then GoTo ErrHandle End If Next i End If Dim r, g, b As Variant r = Val("&H" & Left(StrHexColor, 2)) g = Val("&H" & Mid(StrHexColor, 3, 2)) b = Val("&H" & Right(StrHexColor, 2)) HexColortoRGB = "RGB( " & r & ", " & g & ", " & b & " )" Exit Function ErrHandle: HexColortoRGB = "適切な値を入力してください。" End Function |
入力は
結果例は
コメント