この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
今日はExcelの表で最大値の背景色を変更するマクロについて記載します。
フィルター機能を利用して・・・という手作業でも対応できる作業ですが、マクロを作成してみたので、記事にしてみました。
(マクロ実行環境:Windows7、Excel2010)
最大値の確認
次のような表を作成しました。(Rand関数を利用して売上の数値を入力したので、現実的な数値ではありません。)
この表のなかの最大値をみつけるため、次のような記述をしました。
① 行数の指定
「lonYa」と「lonYy」は行数を代入します。
上の表の場合は、1/1の売上高がB列の2行目に記載されていますので、「lonYa」には「2」を代入します。
「lonYa」は「Rows.Count・・・」を使って、数値の入力されている最大行を検索し、それより1少ない行数を代入します。(最後の行には合計数値が入力されているため、その行数を比較対象から除くために1少ない行数を代入します。)
② 売上数値の代入
「varMa」というVariant型の変数を宣言し、表の売上数値を1か月分まとめて代入しました。(上の画像の緑色の枠囲み部分)
③ 最大値の検索及び代入
そのvarMaの中の最大値をdouAaという変数に代入します。
Excelの関数の場合は、セルに「=Max()」と記述しますが、vbaの場合は次のように記述します。
「Application.WorksheetFunction.Max」
(上の画像の赤色の枠囲み部分)
実行
ここまでの記述を実行し、最後にMsgBoxでdouAaを表示させると次のとおりです。1月30日の売上「1,094,323」が最大値です。
背景色を変更する
上記のとおり変数douAaに最大値を代入したまま最大値のあるセルの背景色を変更する記述をします。
Do~LoopをとIf~Thenを使って次のような繰り返し処理を実行します。
最大値の検索及び背景色の変更
1月1日からの売上を順に変数douBaに代入します。
次に変数douBaとdouAa(最大値)を比較し、最大値と同じ場合は、その行のA列とB列のセルの「Interlor.ColorIndex」を「3」に変更します。(上の画像の赤い枠囲み部分)
繰り返し処理
最大値と同じでない場合は、次の売上をdouBaに代入して比較します。
※ 色の番号については「LINK Office TANAKA;セルの操作(文字色の設定)」を参考にさせていただきました。(この記事はとても勉強になります。)
※ 背景色は、「Interior.Color」で「RGB」を使って設定することもできるため、最大値の1つ上の行と1つ下の行の背景色も変更するように記述してみました。(上の画像の緑色の枠囲み部分)
実行
実行すると次のとおりです。(色の指定がひどいです・・・)
毎日売上げが更新される場合
日次に売上数値が変更され、最大値がその都度変わる可能性があるような場合は、前日以前にその時点での最大値のセルの背景色が指定されていますので、いったん「色指定なし」にする必要があります。
私は次のように記述して、対象となる範囲(上の画像の場合、A列2行目~B列32行目)の背景色を「0」に指定しました。(変数lonYyを代入した後に記述します。)
「ws1.Range(Cells(lonYa, 1), Cells(lonYy, 2)).Interior.ColorIndex = 0」
まとめ
この記事のケースでは、設定の数値が少ないので手作業でも間違いはないかと思いますが、比較する数値が多い場合は、マクロが有効な手段かと思います。(トップ10の背景色を変更する方法は後日記述します。)
■□◆◇ 編集後記 ◇◆□■
今日も関東は暖かいです。最近、空中に透明な虫のようなものが見えることがあります。「飛蚊症」の症状です(だと思います。)
あまり気にしなかったのですが、目の病気のひとつの症状として飛蚊症になるケースがあるということで目の検査を受ける必要があるようです。