みなさん、こんにちはケンケンです。
今回は、ExcelVBAのイベント処理を使って簡単なツールを作ってみます。
それではいってみましょう。
自動で色付けして業務を効率化してみよう
業務管理の一環として処理途中のものや未処理のものを色分けして管理するときっと楽なので、VBAでできるようにしておきましょう。
作るツール紹介
まずこれから作るツールの完成形をお見せします。
簡単なTODOリストです。
D列に進捗を入力すると、A列からD列まで色がついてC列には入力した日時が自動で入るようにします。
以下のような感じです。
コードを書いてみよう
コードを書く前にイベントプロシージャをつくります。
プロジェクトエクスプローラーからSheet1(Sheet1)を選択し、コードウィンドウ上部からWorksheetに続きChangeイベントを選びます。
すると、Changeイベント用のプロシージャが生成されます。
進捗欄(D列)に入力された時だけイベントが発生するようにする
進捗が更新されたときだけ、イベント処理が発生するようにコードを書いていきます。
1 2 3 4 5 |
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Then Exit Sub End If End Subた |
ターゲットとなる列を4列目だけに絞るコードです。
これで4列目以外のセルに動きがあってもこれ以降に書くコードは実行されなくなります。
セルに変化があったときに色を変える方法
それでは、4列目に変化があったときに色が入るようにしてみましょう。
コードは以下の通りです。
1 2 3 4 5 6 7 8 |
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Then Exit Sub End If Range("A" & Target.Row).Interior.Color = Range("H2").Interior.Color'追加 End Sub |
変化があった行(Target.row)のA列に色が着くようになります。
色は右辺のとおりH2の色を採用しています。4列目に何か文字を入れてみましょう。
色をD列まで着くようにしよう
色の幅を広げて一気にD列まで広がるようにコードを変更します。
1 2 3 4 5 6 7 8 |
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Then Exit Sub End If Range("A" & Target.Row & ":D" & Target.Row).Interior.Color = Range("H2").Interior.Color End Sub |
これで、D列まで一気に色を変えることができました。
進捗の状況によって色分けしよう
H列のように進捗の状況によって色分けをしてみましょう。
Ifステートメントを使ってコードは以下のように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Then Exit Sub End If If Range("D" & Target.Row).Value = "良い" Then Range("A" & Target.Row & ":D" & Target.Row).Interior.Color = Range("H2").Interior.Color ElseIf Range("D" & Target.Row).Value = "普通" Then Range("A" & Target.Row & ":D" & Target.Row).Interior.Color = Range("H3").Interior.Color ElseIf Range("D" & Target.Row).Value = "悪い" Then Range("A" & Target.Row & ":D" & Target.Row).Interior.Color = Range("H4").Interior.Color Else Range("A" & Target.Row & ":D" & Target.Row).Interior.Color = Range("H5").Interior.Color End If End Sub |
これで、進捗欄に「良い」「普通」「悪い」と入力されるとそれぞれに該当する色に変化します。
Else以下では、「良い」「普通」「悪い」以外の文字が入力された場合の記述です。
今回は、色が白になるように設定しています。
更新欄(C列)に更新日時が入るように設定しよう
最終更新日時が自動で記述されるように設定してみましょう。
管理資料を作る際に重要なので、いろいろな業務に応用してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Then Exit Sub End If If Range("D" & Target.Row).Value = "良い" Then Range("A" & Target.Row & ":D" & Target.Row).Interior.Color = Range("H2").Interior.Color ElseIf Range("D" & Target.Row).Value = "普通" Then Range("A" & Target.Row & ":D" & Target.Row).Interior.Color = Range("H3").Interior.Color ElseIf Range("D" & Target.Row).Value = "悪い" Then Range("A" & Target.Row & ":D" & Target.Row).Interior.Color = Range("H4").Interior.Color Else Range("A" & Target.Row & ":D" & Target.Row).Interior.Color = Range("H5").Interior.Color End If Range("C" & Target.Row).Value = Now'追加 End Sub |
C列の対象行の値をNow関数を使って、日時を取得します。
すると以下のようになります。
いかがでしょう。
そんなに難しいコードを使わなくても、これくらいは出来てしまいます。
TODOリストに限らず、色と更新日時を自動で入力できるようになると管理が必要な資料は特に応用可能かと思います。
みなさん、こんにちはケンケンです。 エクセルVBAを使ってカレンダー作りをしています。 今回は、土曜日と日曜日だけ色を変える方法をご紹介します。 色分けする方法を通して、条件分岐の基[…]