セルに入力するだけで自動的に動くRPAマクロをVBAで作ろう!
【今回の問題】
日付セルを更新すると、日報の休みの日に「定休日」という文字を入れる。
自動的に文字入力。VBAでRPA!
VBAを使うとさまざまな作業が自動化できてしまうわけですが、このVBAによる自動化って、かっこよくいうとRPAなんですね。
RPAとはRobotic Process Automationの略です。
ロボティクス?
ロボットが仕事するの?
という印象を持たれる方もいるかもしれませんが、このロボティクスには、VBAのような自動化をするプログラムも含まれます。
とにかく、パソコンやロボットに仕事を丸投げして自動化してしまえということです。
そういってしまうと簡単に思えますが、RPAの仕組みを作るまでがエンジニアの腕の見せ所です。
今回はVBAのシート関数を使って、セルを書き換えたり、クリックしただけで処理をしてくれるRPAマクロの書き方を紹介します。
シート関数の用意をしよう
開発タブからVBAエディターを開きます。
目的のシートをダブルクリック
左、赤丸からWorksheet選択
Declarationsのドロップダウン
ダブルクリックで変化→BeforeDoubleClick
セルの値変更で変化→Change
それぞれ選択するとエディタにはこのように記入されます。
これで自動化の下準備は完了です。
自動化のためのコードを書いていこう
セルの値を変更したり、クリックしたりのあとにマクロを実行する。そんなプログラムを書きます。
手順は次の通り
- シート関数の下準備
- セルの値の変更や、クリックの後実行させたいマクロを書く
- シート関数から2のマクロを呼び出す
以上です。
下準備はもう説明済みなので、2のマクロを書いていきましょう。
日付セルが日曜日のときに、3列目のセルに定休日という文字を入れるマクロを作りました。
ちなみに日付ですが、一番上の日付だけを入力すれば、それ以下の日付が自動で入力されるようになっています。
これはVBAを使わなくても、エクセル関数でサクッといけちゃうんですね。
vba-tokepi.hateblo.jp
Sub offday() Dim i As Long Dim wd As Long For i = 3 To 33 wd = Weekday(Cells(i, 2)) If wd = 1 Then Cells(i + 1, 3).Value = "定休日" Cells(i + 1, 3).Font.Color = vbRed Cells(i + 1, 3).Font.Size = 18 End If i = i + 1 Next End Sub
Weekday関数が1の時は日曜日です。なので、Weekday関数を代入しているwdが1の時に、3列目のセルに「定休日」という文字列を入れる処理が出来上がりました。
次はシート関数で、このマクロがA3:A4で日付を変更するだけで動作するようにします。
自動化の最強呪文VBAがこちら
シート関数がどのようにすれば動作するのか?
それは、つぎのコードを書くだけ。
If Not Application.Intersect(Target, セル範囲) Is Nothing Then
Ifから始まれば、必ず終わりはEnd Ifで閉めるのですが、このコードとEnd Ifの間で2のマクロを呼び出してあげればいいだけです。
次のようなシンプルなコードで、セルA3:A4の日付を書き換えれば、休日の3列目のセルに自動的に「定休日」の文字が入ります。
Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Range("A3:A4") If Not Application.Intersect(Target, rng) Is Nothing Then Call offday End If End Sub
ここで、シート関数の準備の際に、Declarationsのドロップダウンを、ダブルクリックで変化→BeforeDoubleClickで選択していた場合、セルA3:A4をダブルクリックすると、休日の3列目のセルに「定休日」という文字列が入力されるマクロが出来上がります。
以上、VBAの基礎知識と、シート関数の設定、そして
If Not Application.Intersect(Target, セル範囲) Is Nothing Then
のコードがあれば、セルの値を変更したり、ダブルクリックするだけで動作するマクロが作れますよ!というお話でした。