はじめに
実用的なExcelのマクロを初心者目線で分かり易く紹介・解説していきます!
というか、僕も初心者なんですけどね!(笑)
これを機に、定型的な仕事を自動化し、業務の効率化に役立ててもらえたら嬉しいです!
今回のテーマ
今回のテーマは「文字が入力された時にセルを塗りつぶすマクロ」を紹介します。
・セルに文字が入力されたか分かり易くしたい。
・一目で資料チェックがしたい。
・条件付書式じゃない方法で設定をしたい。
・いちいち書式を設定するのがめんどくさい。
そんな方におすすめの内容となっています。
VBAコード
「文字が入力された時にセルを塗りつぶすマクロ」を次の例を使って紹介してきます。
(例)
・不具合に内容が入力されると、特定の範囲をハイライトさせる。
・完了に文字が入力されると、ハイライトしていた範囲をグレーアウトさせる。
・印刷することを想定し、A4のフォーマットとする。
下記がこのマクロのコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Private Sub Worksheet_Change(ByVal Target As Range) 'もし不具合内容が入力されたら「不具合欄」をハイライトするマクロ Dim i As Long For i = 0 To 5 If Cells(6 + i * 8, 1) <> "" Then Range(Cells((2 * i + 1) * 4, 1), Cells(10 + 8 * i, 9)).Interior.Color = RGB(255, 230, 230) Else Range(Cells((2 * i + 1) * 4, 1), Cells(10 + 8 * i, 9)).Interior.ColorIndex = 0 End If If Cells(10 + 8 * i, 9) <> "" Then Range(Cells((2 * i + 1) * 4, 1), Cells(10 + 8 * i, 9)).Interior.Color = RGB(191, 191, 191) End If Next i End Sub |
コードの解説
1.changeイベントの活用
『「不具合」の内容が入力された時にマクロを実行する。』
この様なシートの情報が変化したタイミングでマクロを実行するのに便利なのが
「Changeイベント」です!
Changeイベントはマクロを実行したいSheetモジュールで「general」から「worksheet」に変更し、「Change」を選択することで作成することが出来ます。
作成されたプロシージャに実行したいステートメントを作成していくことでシートのセル情報が更新されたタイミングでマクロが実行されます。
2.ループ処理「For文」の活用
今回実行するマクロは等間隔に配置されたセル範囲に対して実行します。
こんな時に便利なのがループ処理です!
今回は「For文」を使ってループ処理を行います。
For文は次のように使います。
ステートメント
Next インデックス
1 2 3 4 |
Dim i As Long For i = 0 To 5'6個のセル範囲に対して実行するので0~5としてます。 'ループさせたい処理を入力 Next i |
3.If文で条件分岐
次の条件で結果を分岐させるためにみんな大好き「If文」を活用します。
[条件]
・「不具合」に内容が記載されている場合 ハイライト
→「不具合」内容が空欄じゃない場合に処理を実行
・「完了」に文字が入力されている場合 グレーアウト
→「完了」が空欄じゃない場合に処理を実行
・何もない場合 塗りつぶしなし
→上2つの条件以外に処理を実行
この条件分岐を先ほど作成した「For文」に入れます。
1 2 3 4 5 6 7 8 9 10 11 |
Dim i As Long For i = 0 To 5 If Cells(6 , 1) <> "" Then'「不具合」内容が空欄じゃない場合 'セル範囲をハイライト Else'何もない場合 'セル範囲を「塗りつぶしなし」にする End If If Cells(10, 9) <> "" Then '「完了」が空欄でない場合 'セル範囲をグレーアウト End If Next i |
4.セル範囲の指定
ループ処理でセル範囲を指定するために、セル範囲を変数で指定させます。
変数は上で使った「i」を使います。
1 2 3 4 5 6 7 8 9 10 11 |
Dim i As Long For i = 0 To 5 If Cells(6 + i * 8 , 1) <> "" Then'「不具合」内容が空欄じゃない場合 Range(Cells((2 * i + 1) * 4, 1), Cells(10 + 8 * i, 9)) 'セル範囲をハイライト Else'何もない場合 Range(Cells((2 * i + 1) * 4, 1), Cells(10 + 8 * i, 9))'セル範囲を「塗りつぶしなし」にする End If If Cells(10 + 8 * i, 9) <> "" Then '「完了」が空欄でない場合 Range(Cells((2 * i + 1) * 4, 1), Cells(10 + 8 * i, 9)) 'セル範囲をグレーアウト End If Next i |
5.セルの塗りつぶし
次にセルの塗りつぶしです。
セルの塗りつぶし方法は幾つかありますが今回はCells.Interior.Colorプロパティを使用します。
Cells.Interior.Colorプロパティで色を指定する場合はRGBになります。
Interior.Colorプロパティは次のように使います。
※R:列番号,C:行番号,*:0~255の数値
塗りつぶしなしにCells.Interior.Colorプロパティを使ってもいいんですが、RGBで指定すると「白」に塗りつぶしされるてしまいます。
Cells.Interior.ColorIndexプロパティを使うことで「塗りつぶしなし」にすることが出来ます!
インデックス番号はWebで検索すればすぐ出てきます。
※R:列番号,C:行番号
1 2 3 4 5 6 7 8 9 10 11 |
Dim i As Long For i = 0 To 5 If Cells(6 + i * 8, 1) <> "" Then'「不具合」内容が空欄じゃない場合 Range(Cells((2 * i + 1) * 4, 1), Cells(10 + 8 * i, 9)).Interior.Color = RGB(255, 230, 230) 'セル範囲をハイライト Else'何もない場合 Range(Cells((2 * i + 1) * 4, 1), Cells(10 + 8 * i, 9)).Interior.ColorIndex = 0 '塗りつぶしなしにする End If If Cells(10 + 8 * i, 9) <> "" Then '「完了」が空欄でない場合 Range(Cells((2 * i + 1) * 4, 1), Cells(10 + 8 * i, 9)).Interior.Color = RGB(191, 191, 191)'セル範囲をグレーアウト End If Next i |
このコードをChangeイベント内に組み込んでマクロ完成となります。
お疲れ様でした。
実用化する為の編集ポイントを紹介!
今回紹介したマクロで編集するポイントを簡単に紹介していきます。
実行するセルを変更したい
実行したいセルの範囲を変更する場合は、Cellsの()内の数値を変更するだけで可能です。
塗りつぶしの色を変更したい
RGBの数値を変更すれば可能です。
RGBの数値はWebで検索するか、Excelの「塗りつぶし」→「その他の色」→「ユーザー指定」で確認することができます。
ループ回数を増やしたい
「For文」の最終値を変更することで可能です。
まとめ
・「For文」でループ処理しコードをスリム化
・「If文」で条件分岐
・「Cells.Interior.Colorプロパティ」,「Cells.Interior.ColorIndexプロパティ」
で塗りつぶし
おすすめ教材
文章量は多くなく、図や対話形式で分かり易く解説している教材になりますのでVBA入門におすすめです。
コメント