VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。仰々しくなく、シンプルな形で効率化を図ることを目指しています。VBA以外の話題もあるよ(笑)

セルの背景色および文字色の16進数を取得(CSS用に)

CSSで文字色や背景色の指定を行う際は、RGB値や16進数で色を指定することになるかと思います。

 

p {
  color: #2F4F4F; ←こーゆうヤツ
}

 

色のRGB値や16進数は、色見本を一覧表にしているHPなどで調べるか、ペイントの色の編集などで調べられますが、ちょっとだけ手間です。
なので、エクセルの背景色と文字色から色の16進数を吸い取る簡単なマクロを作ってみました。

まず、エクセルで背景色と文字色のイメージを確認します。マクロで色を吸い取るのは1セル分だけですが、1セルだけではイメージがつかみにくいので、ドバーっと背景色を塗りつぶして文字を撒き散らしましょう。

f:id:kouten0430:20171115223656j:plain

 

背景色と文字色のイメージが確認できたら、どこでもいいので1セルを選択してマクロを実行します。背景色または文字色のどちらから色を吸い取るか選択したら、メッセージボックスにRGB値と16進数が表示され、さらに16進数がクリップボードに転送されます。

f:id:kouten0430:20171115223758j:plain

 

あとは、CSSにそのままペーストするだけです。

 

p {
  color: #CC3399;
  background-color: #FFFF99;
}

 

電卓でも16進数変換できるじゃん、とか言わないでね( ・∇・)あくまでもVBAの勉強なのですよ☆ 

 

Sub 背景色および文字色の16進数を取得()
    'CSS用にアクティブセル背景色および文字色から16進数を取得します
    'Hex関数で取得した値はBGRの順なので並び替えが必要(CSSはRGBの順)
    Dim mb As Integer
    Dim cc As Long
    Dim hx As String
    Dim bl As String
    Dim gr As String
    Dim re As String
    Dim V As String
    Dim blue As Integer
    Dim green As Integer
    Dim red As Integer
    Dim myLib As Object
    Set myLib = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    
    mb = MsgBox("OK:背景色を取得" & vbCrLf & "キャンセル:文字色を取得", vbOKCancel)
        If mb = 1 Then
            cc = ActiveCell.Interior.Color
        Else
            cc = ActiveCell.Font.Color
        End If
        
    hx = Right("00000" & Hex(cc), 6)
    bl = Mid(hx, 1, 2)
    gr = Mid(hx, 3, 2)
    re = Mid(hx, 5, 2)
    V = re & gr & bl
    blue = CInt("&H" & bl)
    green = CInt("&H" & gr)
    red = CInt("&H" & re)
    MsgBox "RGB値:" & red & "," & green & "," & blue & vbCrLf & "16進数:" & V
    
    myLib.SetText V  '変数の値をDataObjectに格納する
    myLib.PutInClipboard 'DataObjectのデータをクリップボードに格納する
    MsgBox "16進数:" & V & vbCrLf & "をクリップボードに転送しました!"
End Sub

※SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら