« 色の表示形式の変換 1 | トップページ | 色の表示形式の変換 3 »

2010年1月24日 (日)

色の表示形式の変換 2

色の表示形式

長整数型(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

入力は
Pic20100124a
Pic20100124b
Pic20100124c

結果例は
Pic20100124d

・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

入力は
Pic20100124e

結果例は
Pic20100124f

|

« 色の表示形式の変換 1 | トップページ | 色の表示形式の変換 3 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 色の表示形式の変換 2:

« 色の表示形式の変換 1 | トップページ | 色の表示形式の変換 3 »