図形の塗りつぶし色と文字色をワンクリックで反転させる方法をご紹介します。
さっそくやってみましょう!
手順① プログラムを貼り付ける画面を表示
まずはこちらの記事の手順を実行して、プログラムを貼り付ける画面を表示します。
※Excelの例ですがPowerPointでも全く同じ手順となります。
手順② プログラムのコピー
次にこちらのプログラムをコピーしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Sub colorReplace() With ActiveWindow.Selection.ShapeRange ' 図形の塗りつぶし色を取得 fore_color = .Fill.ForeColor.RGB ' GRBの値に変換 fore_R = fore_color Mod 256 fore_G = Int(fore_color / 256) Mod 256 fore_B = Int(fore_color / 256 / 256) ' 図形の文字色を取得 font_color = .TextFrame.TextRange.Font.Color.RGB ' GRBの値に変換 font_R = font_color Mod 256 font_G = Int(font_color / 256) Mod 256 font_B = Int(font_color / 256 / 256) ' 図形の塗りつぶし色を文字色に変更 .Fill.ForeColor.RGB = RGB(font_R, font_G, font_B) ' 図形の文字色を塗りつぶし色に変更 .TextFrame.TextRange.Font.Color.RGB = RGB(fore_R, fore_G, fore_B) End With End Sub |
解説 ※必要ない方は次の手順に進みましょう!
ひとつひとつ解説していきます。
With ActiveWindow.Selection.ShapeRange
作業中のスライド(ActiveWindow)の 選択中(Selection)の図形(ShapeRange) を表しています。
‘ 図形の塗りつぶし色を取得
fore_color = .Fill.ForeColor.RGB
選択中の図形の塗りつぶし色を取得しています。
‘ GRBの値に変換
font_R = font_color Mod 256
font_G = Int(font_color / 256) Mod 256
font_B = Int(font_color / 256 / 256)
取得したRGB値は (R, G, B) の形に変換しなければなりません。※各値は0~255の範囲内
なぜなら取得した塗りつぶしの色は以下のとおり、1つの値で表現されているからです。
取得したRGB値は 12874308 となっています。
これは 赤の数値 + 緑の数値 × 256 + 青の数値 × 256 × 256 で計算されます。
ここから 赤の数値 を取り出すにはどうすればいいのでしょうか?
まず各色の数値は 0~255 のいずれかの値です。
赤の数値 を取り出すには 256で割った余りになります。
なぜなら次のように、赤の数値 の後ろの部分は必ず256の倍数だからです。
赤の数値 は 0~255 のいずれかですので、256より小さいです。つまり256で割った余りの部分です。
font_R = font_color Mod 256
これがその計算部分です。 Mod 256 という部分が 256で割った余りを算出してくれます。
次に 緑の数値 を取り出すにはどうしたらいいのでしょうか。
まずは全体を 256 で割ります。すると次のようになります。
この数値を Int() で囲むことで、整数部分を取り出しています。
赤の数値 ÷ 256 は必ず小数点以下になるのでここで除外され、残った値は次のようになります。
ここから256で割った余りが 緑の数値 となります。
これは 赤の数値 を取り出した場合と同じで、 青の数値 は256の倍数で 緑の数値 は256より小さいからです。
font_G = Int(font_color / 256) Mod 256
これがその計算部分です。
256で割って Int() で整数部分を取り出して、Modで 256で割った余りを算出しています。
青の数値 は 256 で 2回割って整数部分を取り出します。
なぜなら 256 で 2回 割ると次のようになり、赤の数値 と 緑の数値 は必ず少数点以下となるからです。
font_B = Int(font_color / 256 / 256)
これがその計算部分です。
256で2回割って Int() で整数部分を取り出しています。
‘ 図形の文字色を取得
font_color = .TextFrame.TextRange.Font.Color.RGB
‘ GRBの値に変換
font_R = font_color Mod 256
font_G = Int(font_color / 256) Mod 256
font_B = Int(font_color / 256 / 256)
先ほどは図形の塗りつぶしの色でしたが、ここでは図形の文字色のRGB値を算出しています。
‘ 図形の塗りつぶし色を文字色に変更
.Fill.ForeColor.RGB = RGB(font_R, font_G, font_B)
ここでは図形の塗りつぶし色に文字色を設定しています。
‘ 図形の文字色を塗りつぶし色に変更
.TextFrame.TextRange.Font.Color.RGB = RGB(fore_R, fore_G, fore_B)
ここでは図形の文字色に塗りつぶし色を設定しています。
実行結果
では実行結果を見てみましょう!
文字の色が塗りつぶし色になり、塗りつぶし色が文字色になりました!!
さいごに
いかがだったでしょうか。
今回はPowerPointVBAを用いて、図形の色を操作しました。
最終的にはこういった部品のようなプログラムを集めてアドイン化することで業務の時短につながるのではないかと思います。
今後もみなさんの業務を時短できるようなプログラムをご紹介していきますので、よろしくお願いいたします。
コメント