【ExcelVBA】背景色と文字色を簡単一括取得・設定・変換・グラデーション化

快速ワーク
スポンサーリンク

Excelで背景色や文字色を駆使して、わかりやすい表や見やすいデータを色分けして表現したくありませんか?

そんな時、自由自在に色を操れれば、データの解析や確実に役に立ち、作業効率が爆上げされるはずです。

ExcelVBAだと、カラーインデックス(ColorIndex)やRGB(255, 255, 255)を使うのが主流ですかね。

今現在セルに設定されている色が何色なのか、10進数のRGB形式に変換するとどんな値なのか、16進数の#rrggbb形式だとどうなるのか、知りたくありませんか?

色を扱いやすくできるとWeb作成のスタイルシートなどにも応用できます。オシャレにグラデーションなんか付けて見映えを美しくしたいですね。

そこで、色を超絶簡単に設定、取得、変換するマクロをまとめて作ってみました。

百聞は一見に如かず、一目瞭然、一発でイメージが湧き、使い方がわかるようなGIFアニメ付きです。

コピーするだけなので、試しに使ってみて使えるようであれば、ぜひ使ってみてください。


スポンサーリンク

背景色、文字色カラーコード一括取得・設定・変換・グラデーション化

シートを見やすくする時、いろんなセルデータの背景色や文字色の設定を色とりどり使い分けると思います。

ネットで見つけて気に入った色をExcelに反映させたい時、いちいちRGBを入力して試すのはクソめんどくさいですね。

特にちょっとオシャレにグラデーションを付けたくなった時は大変な作業です。

大量の色情報を簡単に一発で取得や設定や変換ができるようになったら、もはや色を制したも同然。

それができるようになるのに役立つVBAマクロを作ってみました。

今回作ったマクロは大きく分けて以下4パターンです。

①RGB値またはRGB10進数またはrrggbb16進数のカラーコードを取得

②RGB値またはRGB10進数またはrrggbb16進数のカラーコードで設定

③RGB値またはRGB10進数またはrrggbb16進数のカラーコードを変換

④RGB値またはRGB10進数またはrrggbb16進数のカラーコードグラデーション設定

なるべくインターフェースを簡単にし、直感で操作できるように目指してます。詳細な仕様はソース上のコメントなどで補足してます。

今回はセルの背景色と文字色のみですが、図形オブジェクトやシートの色設定などにも応用できると思います。

ちなみにカラーインデックスは取れない場合があるので今回は見送ってます。必要であれば追加してみてください。


RGB値またはRGB10進数またはrrggbb16進数のカラーコードを取得

選択したセルの背景色、または、文字色のカラーコードを一度にすべて取得します。

カラーコード取得の操作イメージ

下記画像にて取得操作のイメージを沸かせてみてください。

いっきにまとめてカラーコードを取得してます。

1列のみを選択します。2列以上の選択は弾きます。選択列の右1列目、2列目、3列目にそれぞれ取得したカラーコードを設定します。


RGB値またはRGB10進数またはrrggbb16進数のカラーコードで設定

選択したセルのカラーコードで背景色、または、文字色を一度にすべて設定します。

カラーコード設定の操作イメージ

下記画像にて設定操作のイメージを沸かせてみてください。

いっきにまとめてカラーコードを設定してます。

数値か、または"rgb("で始まっているか、または"#"で始まっているか、でカラーコードかを判断します。エラーの場合はコメントに追加します。


RGB値またはRGB10進数またはrrggbb16進数のカラーコードを変換

選択したセルのカラーコードをRGB値またはRGB10進数またはrrggbb16進数に一度にすべて変換します。

カラーコード変換の操作イメージ

下記画像にて変換操作のイメージを沸かせてみてください。

いっきにまとめてカラーコードを変換してます。

数値か、または"rgb("で始まっているか、または"#"で始まっているか、でカラーコードかを判断します。すべての組み合わせで変換できます。エラーの場合はコメントに追加します。


RGB値またはRGB10進数またはrrggbb16進数のカラーコードグラデーション設定

選択したセルのカラーコードで背景色、または、文字色を一度にすべて設定します。

カラーコードグラデーション設定の操作イメージ

下記画像にて設定操作のイメージを沸かせてみてください。

いっきにまとめて背景色にグラデーション設定してます。2色で判断するので2列で設定します。

数値か、または"rgb("で始まっているか、または"#"で始まっているか、でカラーコードかを判断します。エラーの場合はコメントに追加します。


背景色、文字色の一括取得・設定・変換VBAマクロの主な仕様

細かい処理はコメントで補足してますが、ザックリとした仕様を箇条書きで記載します。

概要
  • 背景色、または、文字色の取得や設定の制御。
  • 基本的にRGB値(赤R,緑G,青B)を取得して設定や変換処理を行う。
  • カラーコードの取得や変換は、選択セルの右隣りのセルにセット。
  • 変換はすべてのパターン(RGB値、RGB10進数、rrggbb16進数)の組み合わせで行う。
  • グラデーション化は2色で判断してセルの背景色に設定する。
  • エラーの場合はコメントに追加する。



背景色、文字色の一括取得・設定・変換VBAマクロのソースコード

色取得・設定・変換でデータ解析効率を爆上げしたい方は、下記のソースコードを以下↓↓↓のリンクの内容に従って個人用マクロにコピーしてご使用ください。

【Excel】超便利な個人用マクロブックにVBAを記録追加作成して実行【初心者も簡単】
仕事や勉強を行う上で、Excelを使用するならば、絶対に知っておいた方がよい「個人用マクロブックの設定方法」をまとめました。マクロを頻繁に使用する人、今まで「作業中のブック」のみに個別設定していた人は、自分の作業に合った共通処理の...

マクロならば、痒いところに手が届きます。用途によっては目的に沿わない可能性がありますが、Const値を持たせてなるべく汎用的に作成しています。

自分に合った方法にカスタマイズしてみてください。VBAマクロの勉強にも少しは役立つと思います。

もし何かバグっていたらごめんなさい。気付いたら改修します。

Sub 選択セルの背景色のカラーコードを取得()

  Const 確認メッセージフラグ = 1 '0:確認メッセージを表示しない、1:確認メッセージを表示する
  Const 色取得区分 = 1           '1:背景色から取得、2:文字色から取得
  
  Call RGB値またはRGB10進数またはrrggbb16進数のカラーコードを取得(確認メッセージフラグ _
                                                                , 色取得区分)

End Sub
Sub 選択セルの文字色のカラーコードを取得()

  Const 確認メッセージフラグ = 1 '0:確認メッセージを表示しない、1:確認メッセージを表示する
  Const 色取得区分 = 2           '1:背景色から取得、2:文字色から取得
  
  Call RGB値またはRGB10進数またはrrggbb16進数のカラーコードを取得(確認メッセージフラグ _
                                                                , 色取得区分)

End Sub
Sub RGB値またはRGB10進数またはrrggbb16進数のカラーコードを取得(確認メッセージフラグ As Integer _
                                                             , 色取得区分 As Integer)

  ''''''''''定義''''''''''
  Dim 実行確認 As Integer
  Dim メッセージ As String
  
  Dim 色取得WK As String
  Dim 設定色 As Long
  Dim RGB配列 As Variant
  Dim 赤R, 緑G, 青B As Long
  Dim RGB値 As Long
  Dim RGB_10進数 As String
  Dim rrggbb_16進数 As String
  Dim セル As Range
  
  ''''''''''チェック''''''''''
  If Selection(1).Column < Selection(Selection.Count).Column Then
    MsgBox "右隣のセルに結果を設定するので1列で選択してください。"
    Exit Sub
  End If
  
  ''''''''''確認処理''''''''''
  If 確認メッセージフラグ = 1 Then
  
    If 色取得区分 = 1 Then
      色取得WK = "背景色"
      
    ElseIf 色取得区分 = 2 Then
      色取得WK = "文字色"
      
    End If
    
    メッセージ = メッセージ _
      & "・" & 色取得WK & "のカラーコードを取得し、" _
      & "右隣3セルににRGB値、10進数RGB、16進数#rrggbb、の順に設定します。 " & vbCrLf _
      & " 既に値がセットされている場合は上書きされます。" & vbCrLf _
      & vbCrLf
      
    '実行確認
    If メッセージ <> "" Then
      実行確認 = MsgBox(メッセージ & vbCrLf _
            & "実行してよろしいですか?", vbYesNo + vbQuestion)
      If 実行確認 = vbNo Then Exit Sub
    End If
    
  End If
  
  ''''''''''色取得処理''''''''''
  For Each セル In Selection
  
    If 色取得区分 = 1 Then
      設定色 = セル.Interior.Color
    ElseIf 色取得区分 = 2 Then
      設定色 = セル.Font.Color
    End If
    
    RGB配列 = RGB値toRGB10進数配列(設定色)
    
    赤R = RGB配列(0)
    緑G = RGB配列(1)
    青B = RGB配列(2)
    
    RGB値 = RGB(赤R, 緑G, 青B)
    
    RGB_10進数 = "rgb(" & 赤R & "," & 緑G & "," & 青B & ")"
    
    rrggbb_16進数 = "#" & Right(0 & hex(赤R), 2) & _
                          Right(0 & hex(緑G), 2) & _
                          Right(0 & hex(青B), 2)
    
    セル.Offset(0, 1).Value = RGB値
    セル.Offset(0, 2).Value = RGB_10進数
    セル.Offset(0, 3).Value = rrggbb_16進数
    
  Next

End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub 選択セルのカラーコードで背景色設定()

  Const 確認メッセージフラグ = 1   '0:確認メッセージを表示しない、1:確認メッセージを表示する
  Const 色設定区分 = 1             '1:背景色に設定、2:文字色に設定
  
  Call RGB値またはRGB10進数またはrrggbb16進数のカラーコードで設定(確認メッセージフラグ _
                                                                , 色設定区分)

End Sub

Sub 選択セルのカラーコードで文字色設定()

  Const 確認メッセージフラグ = 1   '0:確認メッセージを表示しない、1:確認メッセージを表示する
  Const 色設定区分 = 2             '1:背景色に設定、2:文字色に設定
  
  Call RGB値またはRGB10進数またはrrggbb16進数のカラーコードで設定(確認メッセージフラグ _
                                                                , 色設定区分)

End Sub

Sub RGB値またはRGB10進数またはrrggbb16進数のカラーコードで設定(確認メッセージフラグ As Integer _
                                                             , 色設定区分 As Integer)

  Dim メッセージ As String
  Dim 実行確認 As String
  
  Dim 色設定WK As String
  Dim セル As Range
  Dim RGB配列 As Variant
  Dim RGB値 As Long
  
  ''''''''''確認処理''''''''''
  If 確認メッセージフラグ = 1 Then
  
    If 色設定区分 = 1 Then
      色設定WK = "背景色"
      
    ElseIf 色設定区分 = 2 Then
      色設定WK = "文字色"
      
    End If
    
    メッセージ = メッセージ _
      & "・RGB値、10進数RGB、16進数#rrggbb、いずれかのカラーコードを取得し、" _
      & "セルの" & 色設定WK & "を設定します。 " & vbCrLf _
      & vbCrLf
      
    '実行確認
    If メッセージ <> "" Then
      実行確認 = MsgBox(メッセージ & vbCrLf _
            & "実行してよろしいですか?", vbYesNo + vbQuestion)
      If 実行確認 = vbNo Then Exit Sub
    End If
    
  End If
  
  ''''''''''色設定処理''''''''''
  For Each セル In Selection
  
    On Error Resume Next
    If セル.Value <> "" Then
    
      '''''色判定'''''
      If IsNumeric(セル.Value) Then
      '数値の場合はRGB値と判断
        RGB値 = セル.Value
        
      ElseIf InStr(StrConv(セル.Value, vbLowerCase), "rgb(") = 1 Then
      '"rgb("で始まっている場合はRGB10進数と判断(大文字は小文字に変換)
        RGB配列 = RGB10進数文字toRGB10進数配列(セル.Value)
        RGB値 = RGB(RGB配列(0), RGB配列(1), RGB配列(2))
        
      ElseIf InStr(StrConv(セル.Value, vbLowerCase), "#") = 1 Then
      '"#"で始まっている場合はrrggbb16進数と判断
        RGB配列 = rrggbb16進数toRGB10進数配列(セル.Value)
        RGB値 = RGB(RGB配列(0), RGB配列(1), RGB配列(2))
        
      End If
      
      '''''色設定'''''
      If 色設定区分 = 1 Then
        セル.Interior.Color = RGB値
        
      ElseIf 色設定区分 = 2 Then
        セル.Font.Color = RGB値
        
      End If
      
    End If
    If Err.Number <> 0 Then
      セル.AddComment "エラー" & Err.Number & ":" & Err.Description
      On Error GoTo 0 'エラーオブジェクト初期化
    End If
    
  Next

End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub 選択セルのカラーコードを固定変換()

  Const 確認メッセージフラグ = 1 '0:確認メッセージを表示しない、1:確認メッセージを表示する
  Const 色固定変換区分 = 6       '0:固定変換なし
                                 '1:RGB値→RGB10進数
                                 '2:RGB値→rrggbb16進数
                                 '3:RGB10進数→RGB値
                                 '4:RGB10進数→rrggbb16進数
                                 '5:rrggbb16進数→RGB値
                                 '6:rrggbb16進数→RGB10進数
  Const 色強制変換区分 = 0       '0:強制変換なし

  Call RGB値またはRGB10進数またはrrggbb16進数のカラーコードを変換(確認メッセージフラグ _
                                                                , 色固定変換区分 _
                                                                , 色強制変換区分)

End Sub

Sub 選択セルのカラーコードを強制変換()

  Const 確認メッセージフラグ = 1 '0:確認メッセージを表示しない、1:確認メッセージを表示する
  Const 色固定変換区分 = 0       '0:固定変換なし
  Const 色強制変換区分 = 3       '0:強制変換なし
                                 '1:RGB10進数またはrrggbb16進数→RGB値
                                 '2:RGB値またはrrggbb16進数→RGB10進数
                                 '3:RGB値またはRGB10進数→rrggbb16進数

  Call RGB値またはRGB10進数またはrrggbb16進数のカラーコードを変換(確認メッセージフラグ _
                                                                , 色固定変換区分 _
                                                                , 色強制変換区分)

End Sub

Sub RGB値またはRGB10進数またはrrggbb16進数のカラーコードを変換(確認メッセージフラグ As Integer _
                                                             , 色固定変換区分 As Integer _
                                                             , 色強制変換区分 As Integer)

  ''''''''''定義''''''''''
  Dim 実行確認 As Integer
  Dim メッセージ As String
  
  Dim 色変換WK As String
  Dim RGB配列 As Variant
  Dim 赤R, 緑G, 青B As Long
  Dim RGB変換値 As String
  Dim RGB値 As Long
  Dim RGB_10進数 As String
  Dim rrggbb_16進数 As String
  Dim セル As Range
  
  ''''''''''チェック''''''''''
  If Selection(1).Column < Selection(Selection.Count).Column Then
    MsgBox "右隣のセルに結果を設定するので1列で選択してください。"
    Exit Sub
  End If
  
  ''''''''''確認処理''''''''''
  If 確認メッセージフラグ = 1 Then
  
    If 色固定変換区分 = 1 Then
      色変換WK = "RGB→をRGB10進数"
      
    ElseIf 色固定変換区分 = 2 Then
      色変換WK = "RGB値→rrggbb16進数"
      
    ElseIf 色固定変換区分 = 3 Then
      色変換WK = "RGB10進数→RGB値"
      
    ElseIf 色固定変換区分 = 4 Then
      色変換WK = "RGB10進数→rrggbb16進数"
      
    ElseIf 色固定変換区分 = 5 Then
      色変換WK = "rrggbb16進数→RGB値"
      
    ElseIf 色固定変換区分 = 6 Then
      色変換WK = "rrggbb16進数→RGB10進数"
      
    End If
  
    If 色強制変換区分 = 1 Then
      色変換WK = "RGB10進数またはrrggbb16進数→RGB値"
      
    ElseIf 色強制変換区分 = 2 Then
      色変換WK = "RGB値またはrrggbb16進数→RGB10進数"
      
    ElseIf 色強制変換区分 = 3 Then
      色変換WK = "RGB値またはRGB10進数→rrggbb16進数"
      
    End If
    
    メッセージ = メッセージ _
      & "・" & 色変換WK & "に変換し、右隣のセルに設定します。 " & vbCrLf _
      & " 既に値がセットされている場合は上書きされます。" & vbCrLf _
      & vbCrLf
      
    '実行確認
    If メッセージ <> "" Then
      実行確認 = MsgBox(メッセージ & vbCrLf _
            & "実行してよろしいですか?", vbYesNo + vbQuestion)
      If 実行確認 = vbNo Then Exit Sub
    End If
    
  End If
  
  ''''''''''色変換処理''''''''''
  For Each セル In Selection
  
    On Error Resume Next
    If セル.Value <> "" Then
    
      If IsNumeric(セル.Value) Then
      '数値の場合はRGB値と判断
        If 色固定変換区分 = 1 Or 色強制変換区分 = 2 Then
        'RGB→をRGB10進数
          RGB配列 = RGB値toRGB10進数配列(セル.Value)
          RGB変換値 = "rgb(" & RGB配列(0) & "," & RGB配列(1) & "," & RGB配列(2) & ")"
          
        ElseIf 色固定変換区分 = 2 Or 色強制変換区分 = 3 Then
        'RGB値→rrggbb16進数
          RGB配列 = RGB値toRGB10進数配列(セル.Value)
          RGB変換値 = "#" & Right(0 & hex(RGB配列(0)), 2) & _
                            Right(0 & hex(RGB配列(1)), 2) & _
                            Right(0 & hex(RGB配列(2)), 2)
                            
        End If
        
      ElseIf InStr(StrConv(セル.Value, vbLowerCase), "rgb(") = 1 Then
      '"rgb("で始まっている場合はRGB10進数と判断(大文字は小文字に変換)
        If 色固定変換区分 = 3 Or 色強制変換区分 = 1 Then
        'RGB10進数→RGB値
          RGB配列 = RGB10進数文字toRGB10進数配列(セル.Value)
          RGB変換値 = RGB(RGB配列(0), RGB配列(1), RGB配列(2))
          
        ElseIf 色固定変換区分 = 4 Or 色強制変換区分 = 3 Then
        'RGB10進数→rrggbb16進数
          RGB配列 = RGB10進数文字toRGB10進数配列(セル.Value)
          RGB変換値 = "#" & Right(0 & hex(RGB配列(0)), 2) & _
                            Right(0 & hex(RGB配列(1)), 2) & _
                            Right(0 & hex(RGB配列(2)), 2)
                            
        End If
        
      ElseIf InStr(StrConv(セル.Value, vbLowerCase), "#") = 1 Then
      '"#"で始まっている場合はrrggbb16進数と判断
        If 色固定変換区分 = 5 Or 色強制変換区分 = 1 Then
        'rrggbb16進数→RGB値
          RGB配列 = rrggbb16進数toRGB10進数配列(セル.Value)
          RGB変換値 = RGB(RGB配列(0), RGB配列(1), RGB配列(2))
          
        ElseIf 色固定変換区分 = 6 Or 色強制変換区分 = 2 Then
        'rrggbb16進数→RGB10進数
          RGB配列 = rrggbb16進数toRGB10進数配列(セル.Value)
          RGB変換値 = "rgb(" & RGB配列(0) & "," & RGB配列(1) & "," & RGB配列(2) & ")"
          
        End If
        
      End If
      セル.Offset(0, 1).Value = RGB変換値
      
    End If
    If Err.Number <> 0 Then
      セル.AddComment "エラー" & Err.Number & ":" & Err.Description
      On Error GoTo 0 'エラーオブジェクト初期化
    End If
    
  Next

End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub 選択セルのカラーコードで背景色グラデーション設定()

  Const 確認メッセージフラグ = 1   '0:確認メッセージを表示しない、1:確認メッセージを表示する
  
  Call RGB値またはRGB10進数またはrrggbb16進数のカラーコードグラデーション設定(確認メッセージフラグ)

End Sub

Sub RGB値またはRGB10進数またはrrggbb16進数のカラーコードグラデーション設定(確認メッセージフラグ As Integer)

  Dim メッセージ As String
  Dim 実行確認 As String
  
  Dim 色設定WK As String
  Dim セル As Range
  Dim RGB配列 As Variant
  Dim RGB値1, RGB値2 As Long
  
  ''''''''''チェック''''''''''
  If Selection(Selection.Count).Column - Selection(1).Column + 1 <> 2 Then
    MsgBox "2色の組み合わせで右隣のセルにグラデーション設定するので2列で選択してください。"
    Exit Sub
  End If
  
  ''''''''''確認処理''''''''''
  If 確認メッセージフラグ = 1 Then
  
    メッセージ = メッセージ _
      & "・RGB値、10進数RGB、16進数#rrggbb、いずれかのカラーコードを2色取得し、" _
      & "セルの背景色にグラデーション設定します。 " & vbCrLf _
      & " 既に背景色がセットされている場合は上書きされます。" & vbCrLf _
      & vbCrLf
      
    '実行確認
    If メッセージ <> "" Then
      実行確認 = MsgBox(メッセージ & vbCrLf _
            & "実行してよろしいですか?", vbYesNo + vbQuestion)
      If 実行確認 = vbNo Then Exit Sub
    End If
    
  End If
  
  ''''''''''色設定処理''''''''''
  For Each セル In Selection
  
    On Error Resume Next
    If セル.Value <> "" _
      And セル.Column = Selection(1).Column Then '選択1列目のみ(2列目はoffsetで)
      
      '''''色判定'''''
      '1色目
      If IsNumeric(セル.Value) Then
      '数値の場合はRGB値と判断
        RGB値1 = セル.Value
        
      ElseIf InStr(StrConv(セル.Value, vbLowerCase), "rgb(") = 1 Then
      '"rgb("で始まっている場合はRGB10進数と判断(大文字は小文字に変換)
        RGB配列 = RGB10進数文字toRGB10進数配列(セル.Value)
        RGB値1 = RGB(RGB配列(0), RGB配列(1), RGB配列(2))
        
      ElseIf InStr(StrConv(セル.Value, vbLowerCase), "#") = 1 Then
      '"#"で始まっている場合はrrggbb16進数と判断
        RGB配列 = rrggbb16進数toRGB10進数配列(セル.Value)
        RGB値1 = RGB(RGB配列(0), RGB配列(1), RGB配列(2))
        
      End If
      '2色目
      If IsNumeric(セル.Offset(0, 1).Value) Then
      '数値の場合はRGB値と判断
        RGB値2 = セル.Offset(0, 1).Value
        
      ElseIf InStr(StrConv(セル.Offset(0, 1).Value, vbLowerCase), "rgb(") = 1 Then
      '"rgb("で始まっている場合はRGB10進数と判断(大文字は小文字に変換)
        RGB配列 = RGB10進数文字toRGB10進数配列(セル.Offset(0, 1).Value)
        RGB値2 = RGB(RGB配列(0), RGB配列(1), RGB配列(2))
        
      ElseIf InStr(StrConv(セル.Offset(0, 1).Value, vbLowerCase), "#") = 1 Then
      '"#"で始まっている場合はrrggbb16進数と判断
        RGB配列 = rrggbb16進数toRGB10進数配列(セル.Offset(0, 1).Value)
        RGB値2 = RGB(RGB配列(0), RGB配列(1), RGB配列(2))
        
      End If
      
      '''''グラデーション色設定'''''
      With セル.Offset(0, 2).Interior
          .Pattern = xlPatternLinearGradient
          .Gradient.Degree = 90 '線形グラデーション(色が変化する角度を指定するために使用)
          .Gradient.ColorStops.Clear
      End With
      With セル.Offset(0, 2).Interior.Gradient.ColorStops.Add(0)
          .Color = RGB値1
          .TintAndShade = 0
      End With
      With セル.Offset(0, 2).Interior.Gradient.ColorStops.Add(1)
          .Color = RGB値2
          .TintAndShade = 0
      End With
      
    End If
    If Err.Number <> 0 Then
      セル.AddComment "エラー" & Err.Number & ":" & Err.Description
      On Error GoTo 0 'エラーオブジェクト初期化
    End If
    
  Next

End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function RGB値toRGB10進数配列(RGB値 As Long) As Long()

  Dim RGB配列(3) As Long
  
  RGB配列(0) = RGB値 Mod 256            '赤R
  RGB配列(1) = Int(RGB値 / 256) Mod 256 '緑G
  RGB配列(2) = Int(RGB値 / 256 / 256)   '青B
  RGB値toRGB10進数配列 = RGB配列

End Function

Function RGB10進数文字toRGB10進数配列(RGB値 As String) As String()

  Dim rgb値変換 As String
  Dim 開始位置, 終了位置 As Integer
  
  rgb値変換 = Replace(RGB値, " ", "")
  開始位置 = InStr(rgb値変換, "rgb(")
  終了位置 = InStr(開始位置 + 1, rgb値変換, ")")
  rgb値変換 = Mid(rgb値変換, 開始位置 + 4, 終了位置 - 開始位置 - 4)
  RGB10進数文字toRGB10進数配列 = Split(rgb値変換, ",")

End Function

Function rrggbb16進数toRGB10進数配列(rrggbb値) As Integer()

  Dim RGB配列(3) As Integer
  
  rrggbb値 = StrConv(rrggbb値, vbUpperCase) '大文字変換
  RGB配列(0) = rrggbb16進数toRGB10進数_1(Mid(rrggbb値, 2, 2)) '赤R
  RGB配列(1) = rrggbb16進数toRGB10進数_1(Mid(rrggbb値, 4, 2)) '緑G
  RGB配列(2) = rrggbb16進数toRGB10進数_1(Mid(rrggbb値, 6, 2)) '青B
  rrggbb16進数toRGB10進数配列 = RGB配列

End Function

Function rrggbb16進数toRGB10進数_1(ByRef hex As String) As Integer

  If Len(hex) <> 2 Then
    rrggbb16進数toRGB10進数_1 = -1
    Exit Function
  End If
  If (left(hex, 1) >= 0 And left(hex, 1) <= 9) Or _
    (left(hex, 1) >= "A" And left(hex, 1) <= "F") Then
  Else
    rrggbb16進数toRGB10進数_1 = -1
    Exit Function
  End If
  If (Right(hex, 1) >= 0 And Right(hex, 1) <= 9) Or _
    (Right(hex, 1) >= "A" And Right(hex, 1) <= "F") Then
  Else
    rrggbb16進数toRGB10進数_1 = -1
    Exit Function
  End If
  rrggbb16進数toRGB10進数_1 = rrggbb16進数toRGB10進数_2(left(hex, 1)) * 16 _
                              + rrggbb16進数toRGB10進数_2(Right(hex, 1))

End Function

Function rrggbb16進数toRGB10進数_2(ByRef hex As String) As Integer

  Select Case left(hex, 1)
    Case "A"
      rrggbb16進数toRGB10進数_2 = 10
    Case "B"
      rrggbb16進数toRGB10進数_2 = 11
    Case "C"
      rrggbb16進数toRGB10進数_2 = 12
    Case "D"
      rrggbb16進数toRGB10進数_2 = 13
    Case "E"
      rrggbb16進数toRGB10進数_2 = 14
    Case "F"
      rrggbb16進数toRGB10進数_2 = 15
    Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
      rrggbb16進数toRGB10進数_2 = CInt(hex)
    Case Else
      rrggbb16進数toRGB10進数_2 = -1
  End Select

End Function

実行方法

色取得は「選択セルの背景色のカラーコードを取得()」「選択セルの文字色のカラーコードを取得()」を実行してください。

色設定は「選択セルのカラーコードで背景色設定()」「選択セルのカラーコードで文字色設定()」を実行してください。

色変換は「選択セルのカラーコードを固定変換()」「選択セルのカラーコードを強制変換()」を実行してください。

グラデーション色設定は「選択セルのカラーコードで背景色グラデーション設定()」を実行してください。

目的に応じて設定変更してカスタマイズしてください。

マクロを使うとCtrl+Zでは元に戻らないのでご注意ください。マクロを使う場合はブックを保存した状態で実行する癖を付けることをオススメします。


最後に

Excelの使い方は人それぞれ、いろんなやり方があると思いますが、一例としてご紹介させていただきました。

ExcelVBAマクロはちょっとした向上心さえあれば、取っ付きやすいプログラムなのでショートカットキーなどと組み合わせてぜひ活用してみてください。

Excel全ショートカットキー一覧はこちら↓↓↓

Excelの使い方や機能がわかるショートカットキー全まとめ一覧【初心者こそ必見】
表計算ソフトとして王者であるExcel。たくさんの人が使っていると思います。まぁまぁ高額ではありますが、その分、高機能なので使い倒したいとは思いませんか?単に表データを扱うだけではなく、図を挿入できたり、設計書などのドキュ...

ちょっと工夫すれば、ちょっとした操作に1分かかっていた作業を10秒でこなすことができるようになる可能性があります。

それだけでも、積み上げれば相当の工数を削減できるはずなので、ぜひ自分に合ったやり方を模索していきましょう。


コメント

//▼2023/04/08追加 //https://lovagelab.com/posts/3406/ //▲2023/04/08追加