生産性向上や業務改善、自動化が叫ばれて久しくなりました。自動化による業務効率化を進めるのであればExcel VBA がオススメです。今回はその理由を説明していきます。
<2019/11/12 「RPAよりVBAが先」を追加しました。最も大きいメリットかと思います>
目次
業務の自動化はExcel VBAから始める
エクセルは見積もり、得意先の管理、受注履歴、生産進捗の管理から飲み会の参加者一覧まで、幅広い用途で使われています。事務職の人で使ったことがない人はいないのではないでしょうか。
背景には大企業で年間何千万円も保守費用を払うERP(基幹システム)を導入していても、大抵のユーザーはERP上で作業を完結できず、結局エクセルにダウンロードして作業をしているという実態があります。
実際に私自身の業務を棚卸ししてみたところ、出勤/退勤のタイムカードと旅費精算以外はほぼすべて何かしらの形でエクセルを使っていました。
幅広く使われていると言うことは、エクセルに触れている時間が多いと言うこと。それならば、エクセル操作の自動化から始めるのが良いでしょう。
このエクセル操作の自動化に使うプログラミング言語がExcel VBA(Visual Basic for Application、以下VBA)なのです。VBAを始めるメリットは効果が大きいだけではありません。
1.エクセルが身近なので学びやすい
エクセルは日常的に利用しているソフトなので、エクセルの機能をよく知っているという状態から勉強を始めることができます。たとえばエクセルのワークブックを立ち上げて、先月のシートの受注金額のところを貼り付ける、と言えば手に取るように操作が思い浮かびますよね。
どのプログラミング言語でもある程度の文法までは挫折せずに身につける事ができます。しかし、ちいさくてもよいので何かひとつ完成品を作るという所までなかなか行きません。ここに段差があります。VBAの場合はプラットフォームがエクセルなので、自動化したい作業が具体的にイメージできます。しかも命令の一つ一つがなじみのある作業なので、文法の勉強の段階から一つ完成品を作ると言う段階までの段差がなく、初めての完成品が作りやすいのです。
これこそがVBAが挫折しにくい特徴です。
2.エクセルの機能に詳しくなる
始めは自分が知っている作業を一つずつそのままVBAに置き換えて記述していくだけだと思います。そして、その作業の中に学びがあります。エクセルのコピー/貼り付けは値として貼り付け(いわゆる値貼り)だけでなく、書式のみコピー、書式以外コピーなど様々な方法がありますよね。
普通のエクセル作業だとコピーして、貼り付けてから、貼り付けの種類として値貼りなど貼り付け方の種類を選びますが、値貼りをしたいのなら、「そもそも値をそのまま入れられないかな?」と思って調べる。調べると、知らないことが分かる。
この繰り返しでエクセルの機能に詳しくなりますし、あえてエクセルの便利な機能に頼らない、という発想が出てきます。
3.プログラミング的な考え方が身につく
VBAを勉強するとプログラミング的な考え方が身につきます。突然ですが、インスタントコーヒーを作る方法を考えてみて下さい。
- お湯を沸かす。→5分くらいかかる
- 待っている間にコップにコーヒーの粉を入れる
- お湯が沸いたらコップにお湯を入れる
簡単ですね。
お客さんが来たので自分の分だけで無く、妻の分とお客さんの分と併せて3人分を入れる、と言う場合はどうでしょうか。上の手順を3回繰り返すと下記の様になります。
- お湯を沸かす。→5分くらいかかる
- 待っている間にコップにコーヒーの粉を入れる
- お湯が沸いたらコップにお湯を入れる
- お湯を沸かす。→5分くらいかかる
- 待っている間にコップにコーヒーの粉を入れる
- お湯が沸いたらコップにお湯を入れる
- お湯を沸かす。→5分くらいかかる
- 待っている間にコップにコーヒーの粉を入れる
- お湯が沸いたらコップにお湯を入れる
最初のが冷めてしまいます。普通はこうですね。
- 3人分のお湯を沸かす→5分+アルファ
- 待っている間に3つのコップにそれぞれコーヒーの粉を入れる
- お湯が沸いたら3つのコップにそれぞれお湯を入れる
同じ事を3回繰り返してもいいのですが、自然に3人分のお湯を入れる発想ができれば、これはプログラミング的な思考が身についてきたと言えます。初めのうちは同じ事を3回繰り返す様なプログラムを書いてしまうのですが、プログラミングをしているともっと処理時間を短くしたいと考えるようになります。
その過程で余計な作業はしないように仕様という意識が芽生えてきます。これは業務改善そのものに生かせる考え方です。
4.作業の品質が安定する
人間はミスをする動物です。自動化は単に作業時間が短縮できると言うだけではなくミスを無くし、誰がやっても毎回同じ結果が得られるようになります。
自動化する事により毎回確実に同じ事をして、毎回同じ結果が出ると言う事は、作業の品質が安定すると言う事です。作業の質が安定することは、後工程に迷惑を掛けないことにつながり、単なる作業の効率化以上の生産性向上ができます。
5.他のプログラミング言語を学ぶ時の足がかりになる
ゼロからイチにする作業は大変な作業です。プログラミングも初めての勉強と2言語目では、その言語がある程度のレベルになるまでの速さが全く異なります。2言語目の場合はプログラミング言語の考え方が分かっているからです。
つまり、プログラミングを現時点でひとつも知らないとすると、確実に他の言語を学ぶためのたたき台になります。そして、VBAは一つ目のプログラミング言語として最適だと思われます。理由は1の項目で説明したように学びやすく挫折しにくいからです、学びやすく挫折しにくい言語でプログラミングの考え方を学び、次にPythonなど別の言語を勉強する足がかりにするのは非常に有効な計画です。
ひとつ誤解しないように注意したいのはVBAの文法知識がそのまま他の文法に使えると言っているわけではないことです。繰り返しや変数と言う概念が分かっている、と言う事です。
6.業務の本質が分かる
3のプログラミング思考が身につくと関連します。お湯は3人分まとめてわかせば良い。となれば、一人分のお湯を沸かす作業を自動化するより3人分のお湯を沸かすプログラムを書いた方がいい。
お客さんが夫婦で来たり、子供を連れてきたときのために何人分のお湯を沸かすことができるか選べるようにしておいて方がいい。
このコーヒーを入れるという業務の本質(=成功の鍵)は何人分のコーヒーを作れば良いか、と言う点だったのです。本質が見極められるようになると、
「そもそもその作業いらくない?」
とか
「あの人も同じような事してるけど、資料を共有したら?」
など、プログラミング以外でも業務改善のアイデアが浮かぶようになります。
そのアイデアをもって、業務プロセス自体を変え、残った部分をプログラミングで自動化できれば、業務もすっきりし、自動化プログラムをする絶対量も減って一挙両得です。
非エンジニアはプログラミングのプロでは無く、業務のプロです。
なので、いままでの一人前の業務知識に少しのプログラミング的な視点を取り入れることで、このような改善提案がしやすくなります。
私たちは頼まれた動作をプログラミングする作業者では無く、一人前に業務をこなす作業者でも無く、プログラミングを通して業務を改善する一流のホワイトカラーになるのです。
7.周囲を幸せにし、自分も幸せになる
情報連携がうまくいかず、「あの時、データを納期通り渡したのに/いや、受け取っていない(メールに埋もれている)」と言う事はありがちです。自動化で業務が改善できれば、作業に没頭する時間が減り、タイムリーな受け答えが可能になります。
結果として、忘れてた、ミスした、と言う事が減ります。後工程やパートナーの信頼も上がります。そして一目置かれることでしょう。
これだけでも素晴らしい成果ですが、できれば勉強したVBAのプログラミングのノウハウは惜しげも無く教えて上げましょう。習得には少しの努力が必要ですが、知識、技術自体はインターネットでも無料でたくさん公開されていますし、本でも安く手に入ります。
安く手に入ると言っても、最初の一歩は踏み出せない、あるいは自動化にVBAプログラミングという選択肢があることすら知らない、という人にとってはそもそも、自動化を自分で行う知識と技術を安く手に入るという選択肢がありません。
少しの努力と少しの(あるいはゼロの)金銭で手に入った貴重な知識と技術を教えてありがたがってもらえる。そしてその人がさらに業務効率を改善していく。自分を中心に仲間がどんどん幸せになっていく気がしませんか。
8.RPAよりExcel VBAが先(圧倒的コストパフォーマンスと低学習コスト)
業務効率改善は本来、売上単価の向上と原材料費の低減を行う事で粗利益(生産性)を向上させるための施策を打つのが本質です。その時間を捻出するために自動化を考える、という事です。
自動化で話題になっているツールの一つとしてRPAが挙げられます。よくロボット導入で作業時間7割削減とか言っていますが、あれは営業トークで、と実はプログラミング知識がなければとても自分で実務に耐えうるRPAのシナリオを作ることはできません。
事務職が作れるRPAの程度と言えば当日の何かのデータのダウンロードくらいのモノです。それですら結構難しいです。それならRPAから始めるより、手作業の大半を占めているエクセルの自動化の方が効率が良いです。しかもエクセルはパソコン代に含まれていて、買い切りです。
毎年課金され、公式ドキュメントもおぼつかないRPAより、公式ドキュメントがしっかりしていて、タダで、解説記事も多いエクセルVBAがダントツで業務効率化に適しています。一番大きなメリットが追記という形になってしまい申し訳なく思います。私もRPAに触れて、改めてVBAを勉強する事のメリットが明確になったという状況です。
反面教師的ですが、RPAの使い方の記事も解説しています。この内容を読めば、RPAってぜんぜん簡単ではない事が分かると思います。
非エンジニアの自動化プログラミングデビューの一言語目はVBAで決まりです!
9.暗黙のノウハウが見える化される
ビジネス環境の変化が早い時代です。ERP(基幹システム)は一度導入すると何年も、場合によっては10年以上使い続けることになります。ビジネス環境に応じて業務のやり方は日々変わり続けます。一方でERPは変化しません。つまり、運用でカバーしていくことになります。
この、運用でカバーというのは非常に危険な概念です。なぜなら担当社しか分からない作業、あるいはコツのようなノウハウがうまれ、そしてそのノウハウはマニュアル化されることがないからです。引き継ぎもされず仕事の質が下がることに直結します。
VBAで自動化する事によりその作業がプログラムとして残ることになります。よく自動化ツールは作業がブラックボックス化すると言う意見を聞きますがそれは表面的な意見です。確かにツールに頼ることで日常的にその作業の詳細を意識することはなくなるかも知れませんが、VBAの場合はエクセルマクロブックの中にプログラムのソースコードが見える状態で残っています。
仕様書を作ったりバージョン管理を行えばさらに盤石です。システムベンダーに頼らなくても自分たちで自動化ツールを作ると、ノウハウが形式知化され、管理可能なものになるのです。これを属人性を取り除く、といいます。
10.素早い開発に向いている
前項でも触れた通り、ビジネス環境の変化が早い時代です。せっかく作った自動化ツールもいつまで使えるか分かりません。と言う事は素早く開発ができる事と素早く改修できる事が大事です。
VBAは他のプログラミング言語と比較して開発期間が圧倒的に短いという特徴があります。理由はスクリプト言語と言って、PCが行う作業をそのまま記述していけば良いだけだからです。
他のプログラミング言語だとPCのどのメモリ領域にその作業をさせるのかと言った様なことまでプログラムしなくてはならないのですが、VBAではそのような記述は不要です。エクセルブックを開く。閉じる。など、自動化したい作業をそのまま記述して自動化ツールを開発することができます。
このことはプログラミング作業の行数が少ないと言う意味だけではありません。作業をどんどん追加する形でプログラムを記述できると言うことは、コアな部分からどんどん作っていって必要な作業を追加して行く事ができると言うことです。そして必要であればその時に該当部分を修正すれば問題ありません。
これにより、とりあえず作り始めて、ちょっと使ってみて必要に応じて修正するという開発方針を採用することができます。このような考えのことをアジャイル開発と言います。
他のプログラミング言語だと、後からだと修正するとなると大幅な手直しが必要になることがあります。そのため、手戻りが生じないようにしっかり設計する必要があります。「とりあえず作り始める」と言う事ができません。
ビジネス環境の変化が早い現代ではとりあえず作り始める、というアジャイル開発の考え方は時代とマッチした考え方で是非とも採用したい方針と言えます。
以上、業務の自動化ならVBAから始める理由10選でした。非エンジニアでもプログラミングを学ぶことは非常に有益です。業務改善のための一つの武器として、あなたもVBAの勉強を始めませんか?
質問ご意見はお気軽にコメント欄にどうぞ!