Excel VBA_学習の心構えを考えてみる
この記事ではVBAを学習する際の心構えについて考えてみます。結論としては下記の通りです。
- VBA以前にムダ取りが大切だよ
- プログラミングは業務効率化に役立つ技術だよ
- その中でVBAはExcelに特化しているよ
(Excel以外は不得意だから注意が必要だよ) - VBAと同じくらいExcelを知ってると良いことあるよ
- 3,4行書けるだけでも十分に意味があるよ
- 毎月1回でもルーティン作業があるならやる価値あるよ
- VBAでなくても良いから業務改善の時間を10分でも取ることが大切だよ
ムダ取り(VBA以前に大切なこと)
働き方改革が叫ばれてから久しく、RPAやデータ分析など様々なITツールが登場してきました。この記事を読んでる方もその文脈でVBAに興味があって、業務を効率化したいと考えてらっしゃるかもしれません。しかし小難しいツールを使わずとも生産性を大きく向上できるアクションはたくさんあります。
- 無駄な業務を減らす
- ショートカットを極める
- 業務効率化ツールを導入する
(Slack、freee、notion、HRMOS勤怠、Sansanなど)
上記はどれもExcelやVBAを学ぶよりもカンタンに、今すぐできて、しかも効果のあるアクションです。
営業マンラグビー監督の話
ムダ取りの件で私が印象に残っているのが、営業マンとして働きながら大学でラグビー監督をされている方の話です。お子さんも2人いらっしゃる中でダブルワークをこなされながら、どちらを妥協することもなく2つの異なる分野で成果を上げてらっしゃいました。
「時間を有効に使うためどんなことに気を付けていますか?」と質問したところ、その方が最も力を入れているのがムダ取りでした。特に徹底されたのが身の回りの整理整頓です。 書類、メール、タスクを整理してムダな時間をなくし、それに伴う不要な作業を全てカットしていました。
VBAよりもっとカンタンなこと
たったこれだけ?と思うかもしれませんが、ムダ取りの威力は絶大です。その方のデスクを見たことがあるのですが、まるで製造工場のカイゼンを思わせるようなデスク回り・仕事振りでした。私たちの仕事を考えた時に、9時~18時の業務時間でムダに過ごしている時間は多くあります。
- 書類やメールを徹底的に整理する
- メールのチェックする時間を決める
- 仕事の順番を考える
- 減らせる仕事を減らす
「今の業務で減らせるモノはないか?」と頭を働かせることはプログラミングを学ぶ際にも非常に役に立ちます。後はその減らせる業務をVBAのプログラムに落とし込むだけで良いからです。VBA以前に業務のムダ取りをすることが最もコスパ良い「働き方改革」なのではないかと思います。
プログラミング(生産性に直結する技術)
そもそもプログラミングは数ある技術の1つです。プログラミングでなくとも人生を豊かにする技術はたくさんあります。例えば下記の技術について私は詳しくありませんが、どれも知っていれば確実に人生を豊かにしてくれる技術ですよね。
- 財務諸表の読み方
- 美味しいカレーの作り方
- 相手の話を効果的に聞く方法
- 野外キャンプを楽しくする方法
その中でプログラミングの1番の特徴は仕事の生産性にダイレクトに貢献できる技術である点です。 人間がすることを機械が行ってくれるようになるので、人間なら1日かかる作業でもコンピュータなら一瞬で済みます。またプログラムが自動で処理をしてくれれば人間が仕事をする必要もなくなります。
ただコンピュータを自分の意のままに操るには、コンピュータのできること/できないことを理解していたり、命令をするための方法を理解していないといけません。そんなわけで仕事の生産性を上げたい方にとってプログラミングは有効な技術の1つとなっています。
VBAを学ぶモチベーション
VBAはプログラミング言語の中でも少し特殊な言語です。1番の特徴がExcelというアプリケーションのための言語である点です。 VBAはExcelの作業を効率化するための言語であり、それ以外の作業には不向きです。下記のようなことをプログラミングで実現したいと思った時、VBAではなく他の言語の方がずっと適しています。
- Webアプリケーションを作る
- 機械学習やWebスクレイピングをする
- ゲームを開発する
JavaやPythonなどの言語ではできることもVBAではできないこともあります(通常のプログラミング言語と区別する意味でVBAをマクロ言語と呼ぶこともあります。)そのためVBAを学ぶ際のモチベーションは「Excel業務の効率化」の一言に尽きます。Excel残業をどれだけ減らせるか?というのがVBAの至上命題となっています。
VBAの5大活用事例
VBAでどんなことができるか?についてはほとんどが下記の5つに集約されます(カッコ内は項目における代表的な作業です。)
- 転記
(あるブックから別のブックへのコピー) - 比較
(ブック同士で入力内容に差異がないか比較) - 出力
(pdfなどで宛名から差し込み印刷) - 繰り返し
(1000行の商品項目に行挿入) - 連携
(他のOffice製品、Webとの連携)
日常の業務を5つの項目で抽象化して分類してみると、VBAによる業務改善のヒントが見つかるかもしれません。
3,4行だけ書けるように
ノンプログラマの方がVBAで業務を効率化するには、どれくらい詳しくなる必要があるのでしょうか?私は3,4行書けるだけでも十分だと思います。 例えば下記のコードは100個の商品項目にそれぞれ3行追加するマクロです。これを手作業で追加すると30分近くかかりますが、マクロなら5分程度で書き上げて実行できます。
Dim i As Long
For i = 100 To 1 Step -1
Rows(i & ":" & i + 2).insert
Next
この辺りの感覚は英語に似ています。英語をネイティブレベルで話せるようになる必要はないけど、ある程度知っておくとすごく便利です。英語で書かれたお洒落な広告を読んだり、歌詞に出てくる英語のフレーズをそのまま理解したり、困った時に海外のサイトでも調べモノができます。3,4行書けるレベルでもしっかりと業務に役立てることはできるので、「プログラミングができないといけない!」と気負う必要は全くないと思います。
Excelも同じくらいに勉強する
プログラミングにだけ詳しくてもVBAの力を発揮することはできません。VBAとExcelは表裏一体の関係にあり、2つは足りない部分を補い合う関係にあります。VBAにできること/できないことはExcelのそれと全く反対にあります。
Excelが得意なこと
- 表、グラフのデータ分析
- 細かいレイアウトの調整
- 頭を使って考える作業
VBAが得意なこと
- 大量の繰り返し処理
- 定型作業(行の挿入/削除、文字や数値の入力)
- コピペ、比較..などの単純作業
VBAでコードを何十行も書かずとも、Excelで用意された関数を使った方が早い場面はあります。繰り返しの条件や終端セルの選択を工夫するくらいならそもそもの表形式を見直した方が得策です。
逆も然りで、ショートカットをいくら極めても10000行の処理は途方もなく時間がかかります。それをVBAでコードを3,4行書けば一瞬で終わらせることができます。
両者のメリット/デメリットを理解し、その境界線をしっかりと見極める目を持つことが大切です。 そのためにもVBAと同じくらいにExcelもバランスよく学ぶことが、VBAを効果的に使うための1番のポイントになります。
VBAを学ぶべき基準は?
下記のような頻度でExcelのルーティンワークがあるのであれば、VBAの導入を検討しても良いかもしれません。
- 大前提:仕事で毎日Excelを使っている
- 頻度:毎月1回
- 量:10個以上
大前提:仕事で毎日Excelを使っている
大前提として、仕事で毎日Excelを使っていることが条件になります。VBAはExcelに特化したプログラミング言語であり、その他の用途には不向きな言語です。「普段Excelを仕事で使っていて、作業をもっと効率化したい..」という方にはうってつけの言語です。逆に趣味としてプログラミングを学びたい方であれば、PythonやRubyなどを学ぶのが良いかと思います。
頻度:毎月1回
毎月1回の作業であったとしても時間を取られる作業は多くあるはずです。例えば日報の集計は月1ですが月末に最も時間を取られる作業です。その他にも毎月少なくとも1回ありそうな作業はVBAの導入を検討しても良いかもしれません。
- 日報
- 売上集計
- 請求書送付
- 仕様書から設計書へのコピー
「ショートカットを使えばすぐに終わるよ!」と思うかもしれませんが、単純なコピペ作業であったとしても、場所を間違わないようにブックからブックへ転記する..というのは意外と神経を使います。頭を使わなくて良い、考えなくて良いというのは偉大です。自動化によって仕事が一瞬で終わる気持ちよさは何物にも代えがたいモノがあるので、1つでも多くの職場に導入されればと思います。
量:10個以上
頻度以外にも判断すべき基準は量です。毎日の業務の中で繰り返し作業は多く発生します。下記の単純作業は人間よりもコンピュータが得意な分野です。
- 商品項目への行の挿入
- 集計表の抜け漏れチェック
- 宛名からの差し込み印刷
- 各ブックの売上集計
頭を使う部分/使わない部分、人間がすべきこと/プログラムにやらせること..でメリハリを付けた仕事を意識していきましょう。
手打ちの方が早くない?
いくら業務効率化できるといっても費用対効果が割に合わないと感じている方もいらっしゃるかもしれません。5分の作業を短縮するために10時間かけてプログラミングを学ぶ..みたいな。それなら手打ちの方が早くない?という話です。
私も全く同じで、新しいことを勉強するのが面倒過ぎて、ひたらすらマンパワーでこなしていた時があります。プログラミングを学びましょう!とか言っておきながら、新しいことを学ぶのがとても億劫です。税金や確定申告について学ぶことは面倒くさいです。財務諸表くらいしっかりと正確に読めた方が良いのはわかっているのですが、中々重たい腰が上がりません。だからプログラミングを学ぶことが面倒に感じている人の気持ちがよくわかります。
どちらの頭を使うか?
とはいえ今までの手作業を継続したとしても、VBAを学んだとしても、どちらにしろ頭を使うことになります。 間違えないようにコピペするのも神経を使いますし、新しくVBAでCopyメソッドの使い方を覚えるのもこれまた面倒です。私の以前参画していた現場ではコピペ作業もVBAで行っていました。だって一度作ってさえしまえば、その後は頭を使わずに済みますからね..。
究極的にはどちらの頭を使うか?という問題かもしれません。しかしネット上に上がっているVBAの動画は5時間前後で視聴できます。土日で1本見れる分量ではあるので試しに見てみる..くらいの気持ちで勉強するのが良いのかもしれません。
業務改善のための特別な時間
VBAを日々の業務に導入するには業務改善のための時間を作ることが大切です。 10分でも20分でも構いません。この時間は日常の業務を一旦離れて、業務改善のための特別な時間=投資として割り切ります。VBAを勉強しても良いですし、それ以外の勉強でも良いと思います。
- PythonでWebスクレイピングはどうやるのか?
- GASを使ってGmailの作業を自動化できないか?
- ノーコードのツールで問い合わせフォームが作れないか?
目の前の業務を頑張り続ける以外にも、別のベクトルで工夫する時間を設けることは、日常の延長線上では生まれないような大きな価値を生む可能性があります。Googleでいう20%ルールではないですが、ぜひその中の選択肢の1つとしてVBAやプログラミングを検討してもらえると非常に嬉しく思います。
Discussion