ITで業務自動化を実現する(2) マクロの実務での活用例とRPAとの違い
前回の業務の自動化による効率化を実現するためのExcelVBAの基礎にて、マクロについて、ExcelVBAの基本をご説明しましたが、今回は実際にどのような業務で役に立つのかを実例を含めてご紹介したいと思います。
また、今話題のRPAとの違いについても触れます。
目次
実例その1 請求データから請求書を作成する
これは請求書に限らずですが、何かのデータ一覧から帳票を作成するという作業を大量にこなす業務がある場合に有効です。
請求関連の業務を例にとって見てみましょう。
まず、請求書を作成するために必要なデータが以下のようにあるとします。
ここではシンプルに最低限の情報を記載した請求データを作成しています。
請求書のひな型を作成します。
先ほどの請求データの内容を、請求書に転記するVBAを作成します。
試しに商品名の一番上にある「ソフトウェア」を請求書に転記してみましょう。
Sub 請求データから請求書を作成()
Worksheets(“請求書”).Cells(16, 2).Value = Worksheets(“請求データ”).Cells(2, 1).Value
End Sub
これで請求書の商品名の欄に「ソフトウェア」が転記されました。
ちなみに、上記VBAはシート名を指定するやり方で作成していますが、
シートを左から順番に「Sheet1」「Sheet2」として指定する方法もあり、その場合は
Sheet2.Cells(16, 2).Value = Sheet1.Cells(2, 1).Value
となります。
Cells(16,2)をRange(“B16”)としても問題ありません。
この要領で、請求データのすべての内容を請求書に反映させます。
Sub 請求データから請求書を作成()
‘商品名1行目
Worksheets(“請求書”).Cells(16, 2).Value = Worksheets(“請求データ”).Cells(2, 1).Value
Worksheets(“請求書”).Cells(16, 5).Value = Worksheets(“請求データ”).Cells(2, 2).Value
Worksheets(“請求書”).Cells(16, 6).Value = Worksheets(“請求データ”).Cells(2, 3).Value
‘商品名2行目
Worksheets(“請求書”).Cells(17, 2).Value = Worksheets(“請求データ”).Cells(3, 1).Value
Worksheets(“請求書”).Cells(17, 5).Value = Worksheets(“請求データ”).Cells(3, 2).Value
Worksheets(“請求書”).Cells(17, 6).Value = Worksheets(“請求データ”).Cells(3, 3).Value
‘商品名3行目
Worksheets(“請求書”).Cells(18, 2).Value = Worksheets(“請求データ”).Cells(4, 1).Value
Worksheets(“請求書”).Cells(18, 5).Value = Worksheets(“請求データ”).Cells(4, 2).Value
Worksheets(“請求書”).Cells(18, 6).Value = Worksheets(“請求データ”).Cells(4, 3).Value
‘商品名4行目
Worksheets(“請求書”).Cells(19, 2).Value = Worksheets(“請求データ”).Cells(5, 1).Value
Worksheets(“請求書”).Cells(19, 5).Value = Worksheets(“請求データ”).Cells(5, 2).Value
Worksheets(“請求書”).Cells(19, 6).Value = Worksheets(“請求データ”).Cells(5, 3).Value
End Sub
このままでは合計金額が記載されないので、計算式を追加する必要があります。
Sub 請求データから請求書を作成()
‘商品名1行目
Worksheets(“請求書”).Cells(16, 2).Value = Worksheets(“請求データ”).Cells(2, 1).Value
Worksheets(“請求書”).Cells(16, 5).Value = Worksheets(“請求データ”).Cells(2, 2).Value
Worksheets(“請求書”).Cells(16, 6).Value = Worksheets(“請求データ”).Cells(2, 3).Value
‘単価×数量を金額セルに入れる
Cells(16, 7).Value = Cells(16, 5) * Cells(16, 6)
‘商品名2行目
Worksheets(“請求書”).Cells(17, 2).Value = Worksheets(“請求データ”).Cells(3, 1).Value
Worksheets(“請求書”).Cells(17, 5).Value = Worksheets(“請求データ”).Cells(3, 2).Value
Worksheets(“請求書”).Cells(17, 6).Value = Worksheets(“請求データ”).Cells(3, 3).Value
Cells(17, 7).Value = Cells(17, 5) * Cells(17, 6)
‘商品名3行目
Worksheets(“請求書”).Cells(18, 2).Value = Worksheets(“請求データ”).Cells(4, 1).Value
Worksheets(“請求書”).Cells(18, 5).Value = Worksheets(“請求データ”).Cells(4, 2).Value
Worksheets(“請求書”).Cells(18, 6).Value = Worksheets(“請求データ”).Cells(4, 3).Value
Cells(18, 7).Value = Cells(18, 5) * Cells(18, 6)
‘商品名4行目
Worksheets(“請求書”).Cells(19, 2).Value = Worksheets(“請求データ”).Cells(5, 1).Value
Worksheets(“請求書”).Cells(19, 5).Value = Worksheets(“請求データ”).Cells(5, 2).Value
Worksheets(“請求書”).Cells(19, 6).Value = Worksheets(“請求データ”).Cells(5, 3).Value
‘合計金額を算出
Cells(23, 7) = Cells(16, 7) + Cells(17, 7) + Cells(18, 7) + Cells(19, 7)
‘請求額の欄に転記
Cells(14, 2) = Cells(23, 7)
End Sub
計算式はこのようにVBAで作成することもできますが、エクセル上で計算式を設定するほうが楽な場合もあるので、やりやすい方法で設定してください。
この事例は同じワークブック内にあるデータを転記するという内容でしたが、別のワークブックに転記する場合は、その対象となるワークブックを開いてそのワークブックを指定する必要があります。
ワークブックの開き方については、前回ご説明したとおり、
Workbooks.open “開くファイル名”
このメソッドを使います。次の事例を見てみましょう。
実例その2 受注リストから発注リストに転記する
受注フォルダにある注文書ファイル(ブック)を開き、注文書(シート)にある商品情報(セル)を、発注フォルダにある発注ファイル(ブック)の発注リスト(シート)の所定の位置(セル)に転記する
まずは、ひとつだけデータを転記してみます。
Sub 受注情報を発注シートに転記()
‘注文書ファイル、発注リストファイルを開く
Workbooks.Open Filename:=”C:\Users\USER1\Desktop\受注フォルダ\注文書サンプル.xlsx”
Workbooks.Open Filename:=”C:\Users\USER1\Desktop\発注フォルダ\発注リスト.xlsx”
‘注文書を選択してセルを指定してコピー
Workbooks(“注文書サンプル.xlsx”).Worksheets(“注文書”).Activate
Range(“A3”).Select
Selection.Copy
‘発注リストを指定してセルを指定してペースト
Workbooks(“発注リスト.xlsx”).Worksheets(“発注リスト”).Activate
Range(“B3”).Select
ActiveSheet.Paste
‘注文書ファイルを閉じる
Windows(“注文書サンプル.xlsx”).Activate
ActiveWindow.Close
End Sub
この要領で、更に変数やループを使って、指定したセルを転記したり、データがあるところだけ転記するといったVBAを作成します。
・商品列の上から3つめまで転記する場合
Sub 受注情報を発注シートに転記()
‘注文書ファイル、発注リストファイルを開く
Workbooks.Open Filename:=”C:\Users\USER1\Desktop\受注フォルダ\注文書サンプル.xlsx”
Workbooks.Open Filename:=”C:\Users\USER1\Desktop\発注フォルダ\発注リスト.xlsx”
‘変数を定義する
For i = 3 to 5
‘注文書を選択してセルを指定してコピー
Workbooks(“注文書サンプル.xlsx”).Worksheets(“注文書”).Activate
Cells( i , 1 ).Select
Selection.Copy
‘発注リストを指定してセルを指定してペースト
Workbooks(“発注リスト.xlsx”).Worksheets(“発注リスト”).Activate
Cells( i , 2 ).Select
ActiveSheet.Paste
Next i
‘注文書ファイルを閉じる
Windows(“注文書サンプル.xlsx”).Activate
ActiveWindow.Close
End Sub
最後のワークブックを閉じるための構文は、
Windows(“注文書サンプル.xlsx”).Close
としても、
Workbooks(“注文書サンプル.xlsx”).Close
としても同様の結果となります。
このように同じことをする場合でも様々な書き方ができるケースもあります。
先ほどの事例では、商品3つと指定して転記しましたが、商品数を決めずに記載されているものをすべて転記した場合は以下のように「Do~Loop文」を使うことで、商品名の列のセルに値が無くなるまで転記することができます。
Sub 受注情報を発注シートに転記()
‘注文書ファイル、発注リストファイルを開く
Workbooks.Open Filename:=”C:\Users\USER1\Desktop\受注フォルダ\注文書サンプル5.xlsx”
Workbooks.Open Filename:=”C:\Users\USER1\Desktop\発注フォルダ\発注リスト.xlsx”
Dim a As Integer
a = 3
‘セルの値が空欄ではない場合、aにa+1を代入して処理を繰り返す
Do While Cells(a, 1) <> “”
‘注文書を選択してセルを指定してコピー
Workbooks(“注文書サンプル5.xlsx”).Worksheets(“注文書”).Activate
Cells(a, 1).Select
Selection.Copy
‘発注リストを指定してセルを指定してペースト
Workbooks(“発注リスト.xlsx”).Worksheets(“発注リスト”).Activate
Cells(a, 2).Select
ActiveSheet.Paste
a = a + 1
Loop
‘注文書ファイルを閉じる
Windows(“注文書サンプル5.xlsx”).Activate
ActiveWindow.Close
End Sub
ここでは先ほどと違い、商品列のセルに値が無くなるまで繰り返す処理をしています。
Do While 条件式
条件式が真の場合に実行する処理
Loop
というVBA構文になります。
今回の事例はシンプルな転記の例ですが、このような作業の量が多ければ多いほど、マクロを活用することで簡単に早く正確な作業ができるようになります。
マクロやVBAは難しそうだから使ったことがないという方も、まずはVBEを開いて少しずつでも試してみて、操作が自動化される感覚をつかむことが大切だと思います。
自社の業務に合った有効な活用方法を発見できれば、よりマクロを使いたいと思うはずです。
RPAの登場
ここまでは、エクセルのマクロについて見てきましたが、最近はRPAによる業務の自動化が注目を浴びています。(RPAについては、『働き方改革で注目されるRPAとは何か』を参照してください)
それでは、マクロとの違いはどこにあるのでしょうか。
・導入費用
マクロはエクセルなどのoffice製品の機能なので、office製品の購入費用です。すでにoffice製品を導入していれば追加費用は発生しません。RPAを導入するためにはRPAツールを購入する必要があります。
・自動化の対象範囲
マクロはoffice製品の操作を自動化します。エクセル、アクセス、ワード、パワーポイント、アウトルックなどoffice製品の操作が可能です。
それに対しRPAは、office製品やoffice製品以外のアプリケーションの操作が可能です。
例えばエクセルで作成した商品コード一覧をERPに入力するような作業がある場合、RPAツールを使えば対応可能です。
・プログラミングの知識の必要性
マクロを活用するためにはExcelVBAの知識が必要になります。マクロの記録機能を使うことである程度はノンプログラミングで作ることができますが、微調整をしたり修正をする際に言語の知識がないと対応は難しいでしょう。ただ、ExcelVBAの構文は簡単なものであれば調べればすぐ見つかりますので、少しずつ調べながらExcelVBAの知識を身に付けていくことは可能でしょう。
RPAはツールの使い方を習得する必要はありますが、新たにプログラム言語をマスターする必要はありません。GUIによる直感的なフローの作成が可能で、ツールの習得にかかる時間も1~3週間程度で、簡単なシナリオであればすぐに作れるようになります。そのため、ExcelVBAに比べると運用開始後のメンテナンスもしやすいと思います。
Webページを画像で覚えさせることができるので、所定の位置の入力ウィンドウに文字を入力するといった操作も自動化することができます。
まとめ
マクロは上手に使いこなせばとても便利なもので、そのためにもExcelVBAの考え方を知っておくことは良いことでしょう。
今回挙げた事例はシンプルなものですが、基本を抑えている事例なので、これを身に付けて、更に応用することでもう少し複雑な処理の自動化にも対応できるようになります。
また、こうした自動化の考え方はRPAにもつながっていると思います。
マクロとRPAは似て非なるものですが、どちらが良いというわけでなく状況に応じた使い分けをするほうがよさそうです。例えばExcel内での計算処理等はマクロのほうがよいでしょうし、複数のアプリケーションをまたぐ処理を自動化するならRPAのほうが適しています。両者の違いを把握したうえで、マクロとRPAを両立させる方法もあるでしょう。
自社の業務に合う方法を見極めて、作業時間の短縮、業務効率化を進めていきましょう。
※記載の社名・製品名は各社の商標または登録商標です。
筆者プロフィール
- 家電量販店でウィンドウショッピングするのが好きです。
業務の自動化を実現する「WinActor」
製品サイトではWinActorのシナリオを実行した動画などを数多くご紹介しています。ぜひご覧ください。