EXCEL VBA セルの色を取得・背景色を取得・文字色を取得・RGBで取得(テクニック)
EXCEL VBA セルの色を取得・背景色を取得・文字色を取得・RGBで取得(テクニック)
今回説明するのは、指定したセルの背景色や文字色をカラー番号で取得するサンプルプログラムです。EXCEL VBAで表などを作成する際に、どの色で背景色や文字色を指定するのかをプログラム内で指定する際に、色番号・RGB番号をダイレクトに入力する事が難しいので、使いたい色を手動でセルに登録して、下記のプログラムを実行する事で色番号を簡単に取得する事ができます。背景色や文字色の色番号を取得したする際は、とても便利だと思います。
● 【EXCEL VBA セルの背景色 Interior ThemeColor ColorIndexの使い方は、下記を参照して下さい】
● 【EXCEL VBA セルの条件付き書式の設定・(書式・文字色・背景色・入力条件により処理操作・条件に合うセル)の使い方は、下記を参照して下さい】
EXCEL VBA セルの文字列の色を取得する方法(Font.Color)
下記のサンプルプログラムは、セルの文字列から色番号を取得するサンプルプログラムです。A列に文字列と色を手動にて登録する事で、B列にA列の文字列の色番号を取得する事のできるサンプルプログラムです。
【プログラムの流れ】
① A列の最終行を取得します。
② 2行目~取得したA列の最終行まで繰り返します。
③ A列のフォントの色番号を取得します。
④ B列に取得した色番号を代入します。
⑤ ②へ最後まで繰り返す。
【プログラム実行条件】
① A列に文字列と調べたい文字色を付けます。
※A列に文字を入力しないと正常に動きません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
' ' Sub Font_Color01() ' 文字列からフォントカラー番号を取得します。 Dim I, CC, lRow As Long lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 For I = 2 To lRow '2行目~取得したA列の最終行まで繰り返します。 CC = Cells(I, "A").Font.Color 'A列のフォントの色番号を取得します。 Cells(I, "B") = CC 'B列に色番号を代入します。 Next I End Sub ' |
(画面クリックして拡大)
EXCEL VBA セルの背景色の色を取得する方法(Interior.Color)
下記のサンプルプログラムは、セルの背景色から色番号を取得するサンプルプログラムです。A列に背景色を手動にて登録する事で、B列にA列の背景色の色番号を取得するサンプルプログラムです。
【プログラムの流れ】
① A列の最終行を取得します。
② 2行目~取得したA列の最終行まで繰り返します。
③ A列の背景色の色番号を取得します。
④ B列に取得した色番号を代入します。
⑤ ②へ最後まで繰り返す。
【プログラム実行条件】
① A列に文字列と調べたい背景色を付けます。
※A列に文字を入力しないと正常に動きません。(最終行を取得するため)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
' ' Sub Interior_Color01() ' セルから背景色の色番号を取得します。 Dim I, CC, lRow As Long lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 For I = 2 To lRow '2行目~取得したA列の最終行まで繰り返します。 CC = Cells(I, "A").Interior.Color 'A列のフォントの色番号を取得します。 Cells(I, "B") = CC 'B列に色番号を代入します。 Next I End Sub ' |
(画面クリックして拡大)
EXCEL VBA セルの文字列の色を取得する方法(Font.Color)RGB番号にて取得
下記のサンプルプログラムは、サンプル①の応用になります。今回は、文字列の色番号をRGBで取得します。A列に文字列と色を手動にて登録する事で、B列にA列の文字列の色番号RGB形式で取得します。
【プログラムの流れ】
① A列の最終行を取得します。
② 2行目~取得したA列の最終行まで繰り返します。
③ A列の文字列の色番号を取得します。
④ B列に取得した色番号をRGB形式で代入します。
⑤ ②へ最後まで繰り返す。
【プログラム実行条件】
① A列に文字列と調べたい文字色を付けます。
※A列に文字を入力しないと正常に動きません。(最終行を取得するため)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
' ' Sub Font_ColorRGB() '文字列からフォントカラー番号(RGB)で取得します。 Dim Red, Green, Blue, CC, I, lRow As Long lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 For I = 2 To lRow '2行目~取得したA列の最終行まで繰り返します。。 CC = Cells(I, "A").Font.Color 'A列のフォントの色番号を取得します。 Red = CC Mod 256 '赤色を取得 Green = Int(CC / 256) Mod 256 '緑色を取得 Blue = Int(CC / 256 / 256) '青色を取得 Cells(I, "B") = "RGB(" & Red & "," & Green & "," & Blue & ")" 'B列にRGB単位で出力します。 Next I End Sub ' |
(画面クリックして拡大)
EXCEL VBA セルの背景色の色を取得する方法(Interior.Color)RGB番号にて取得
下記のサンプルプログラムは、サンプル②の応用になります。今回は、セルの背景色の色番号をRGB形式で取得します。A列に文字列と背景色を手動にて登録する事で、B列にA列の背景色の色番号がRGB形式で取得します。
【プログラムの流れ】
① A列の最終行を取得します。
② 2行目~取得したA列の最終行まで繰り返します。
③ A列の背景色の色番号を取得します。
④ B列に取得した背景色の色番号をRGB形式で代入します。
⑤ ②へ最後まで繰り返す。
【プログラム実行条件】
① A列に背景色と文字列を入力します。
※A列に文字を入力しないと正常に動きません。(最終行を取得するため)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
' ' Sub Interior_ColorRGB() 'セルから背景色(RGB)番号で取得します。 Dim Red, Green, Blue, CC, I, iRow As Long lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 For I = 2 To lRow '2行目~取得したA列の最終行まで繰り返します。 CC = Cells(I, "A").Interior.Color 'A列の背景色の色番号を取得します。 Red = CC Mod 256 '赤色Noを取得します。 Green = Int(CC / 256) Mod 256 '緑色Noを取得します。 Blue = Int(CC / 256 / 256) '青色Noを取得します。 Cells(I, "B") = "RGB(" & Red & "," & Green & "," & Blue & ")" 'B列にRGB単位で出力します。 Next I End Sub ' |
(画面クリックして拡大)
EXCEL VBA セルの背景色や文字色を範囲で取得した場合の注意事項
今回、セルの文字色や背景色の取得方法を説明しましたが、ひとつ注意事項があります。セルの背景色や文字色の色番号を1つのセル単位ではなく複数のセル範囲を指定して取得した場合は、正しく色番号が取得できません。正しく色番号を取得する際は、必ずセル単位で取得するか、複数のセル範囲で取得する場合は、必ず文字色や背景色を統一した色に設定しないと正しい色番号が取得出来ませんので、注意が必要です。
下記のサンプルプログラムでは、A列(A1~A10)のセル範囲内に赤と黄色が混在している場合と、C列(C1~C10)のセル範囲に赤で統一している場合で色番号を取得した際に、どのような結果になるのか試してみたサンプルプログラムです。
【実行結果】
●セル範囲に色が混在している場合は、色番号が「0」になります。
●セル範囲に色が統一している場合は、色番号が「255」赤が取得されました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
' ' Sub ColorCells() 'セルの範囲で色を取得した場合。 Dim CC As Long CC = Range("A1:A10").Interior.Color 'セルA1:A10の範囲で背景色を取得した場合。 MsgBox CC CC = Range("C1:C10").Interior.Color 'セルA1:A10の範囲で背景色を取得した場合。 MsgBox CC End Sub ' |
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。