VBAを勉強するなら目的と出来ることをハッキリさせるとこが最重要

今回は、VBAの初心者講座第4弾です。

【一度原点に戻ってVBAの必要性や目的を見直してみよう】というお話です。

VBAは使いこなせるようになってくると、すごく便利で楽しいプログラミング言語です。

ただ、重要なのは「VBAを使って何をしたいのか?」という目的をハッキリさせておくことです。

そうじゃないと、何をプログラミングすべきなのか分からず結局無駄に終わってしまったり

Excelの標準機能で十分出来ることをプログラミングして時間の無駄にしてしまうことも十分考えられるからです。

もちろん。「VBAに慣れるために再現してみたい」などのハッキリした目的を持っていれば問題無いでしょう。

本当にその仕事はVBAでプログラミングする必要があるのか?

VBAで何が出来て何をしたいのか?

ということについて改めて考えてみましょう

VBAで何をプログラミングすれば良いのか?

VBAで何をプログラミングすれば良いのか分かりますか?

答えは「いつもやっている同じ作業」です。

つまり、ルーティンワークというヤツですね。

同じことを間違いなく毎回やるというのは、プログラムが一番得意なことです。

逆に人は苦手なので、そこを補ってくれる機能をプログラミングするのが正解です。

ただ、それよりも重要なのが何を目的にしてプログラミングしたいのか?

ハッキリした目標持ててますか?

多くの人は面倒な事務仕事などが簡単にできるようになるっぽいから、VBAで楽にしたいなと思って勉強を始めるのでは無いでしょうか?

確かに扱えるようになれば、確実に楽になることは間違いありません。

ただし、気をつけなければいけないのは、目標が高すぎると慣れる前に挫折してしまいます。

大半の人はここで難しいからやめた。となって去っていきます。

VBAを使えるようになるには、プログラミングしていて「少しずつ出来ることが増えてきて楽しい」と思えることです。

楽しいと思えればいけます。自分を信じて突き進みましょう。

「好きこそものの上手なれ」どんなことであってもこの「好き・楽しい」と思えること

その気持が有るか無いかで使いこなせるようになるかどうかは決まります。

思えないなら、途中でやめてしまうことも覚悟しておきましょう。

それだけ地道な事を続けないといけない。ということも覚えておきましょう

では、VBAを使えば楽になるルーティンワークとは何でしょう?

一つの例ですが「シートをまたいでデータを集めて整理する(毎月)」ことです。

ここまで出来れば、VBAをある程度使いこなせるようになるので当面のゴールにするのがオススメです。

最初に高すぎる目標を持たない。

プログラミングは、そんなに簡単に扱えるようにならない。

ということも現実なので具体的な目標を持つことが重要です。

VBAは色々なことが出来るという言葉に騙されない

VBAを使いこなせれば、色々なことが出来るようになります。

VBAで出来ることをネットで調べていると、そんな言葉が目にとまると思います。

確かにその話は正しいのですが、その情報をそのまま信じてはいけません。

その話はVBAを極めた玄人さんの話です。

最初はスルーすべき話なので気にしないのがコツです。

そこまでのレベルになるには、相当な腕前でないとたどり着けない領域です。

VBAを扱えるようになって、もっと色々やってみたいと思ったらチャレンジしましょう。

でも、色々な事って何でしょうか? 例えばこんな感じです。

オリジナルのユーザーフォームを作ろう・VBAでゲームが作れる・自動的にネットの情報を収集できる等です。

この情報は正しいです。

こんなことが出来るならやってみたいな。と初心者なら思います。

解説を読むとコレいけそうって思うんですよ。私もそうでした。

その言葉を信じてチャレンジしないで下さい。

まずは、足がついて実務に役立つプログラムを作ることに集中しましょう。

基礎や応用を覚えるのは最初は大変ですが、「ローマは一日にして成らず」少しずつ進めることが重要です。

「これは慣れてきたから、次はこっちにチャレンジしよう」と一つずつクリアしていくことが、すごく大切ですよ。

VBAで出来るのは人の作業を自動化すること

VBAは人の作業を自動化することに向いています。

では、さっき話した 「シートをまたいでデータを集めて整理する(毎月)」 という作業をイメージしましょう。

まずは、VBAが実務で活躍するプログラミングがどんなことをしてくれるのか?

イメージをしっかり持つことが重要です。

では、私が実際にやっている仕事を基にして、どんな風にプログラムを考えるか具体的にイメージをしてみます。

今回はコードを書きません。

とにかくプログラミングのイメージを膨らませて、ゴールを具体化させることが重要です。

クレジットカードの利用者情報を集めてみよう

今回は、営業日報を使って「1ヶ月分のクレジットカードの利用者情報を1つのシートに集計する」というのが目的です。

構成はこんな感じです。

「1日~3日」のシートと「クレカ管理」シートに分かれています。

目的は、1~3日のシートの内容をクレカ管理シートにまとめるという作業です。

この作業を毎月手作業でやっていたとしますよね。

1日20件あったったとして、毎日(30日として)の集計をすると20件✕30日なので600件分の作業量になります。

更に作業量を時間で計算すると、1日30分として30分×30日=900分これを時間に直すと900分÷60分=15時間です。

1ヶ月15時間なので15時間×12ヶ月=180時間、つまり年間で180時間÷24時間=7.5日もこの作業だけに使うことになります。

今回の例はやり方を改善する余地がありますが、どうしてもすぐに改善出来なかったり、社内で決まっていることを変えることが難しかったりするケースも結構多いものです。

こういったいつも同じことをするのに時間が掛かる作業は、VBAを生かして集計する価値が十分あります。

この集計機能をプログラミングで自動化するには、どんな方法が良いか考えてみましょう。

実際にプログラムを書く前にどんな方法で目的の機能が出来るか? ということを考えられるとVBAの理解度がぐっと上がってくるので、クセにしてみましょう。

動きとしては、こんな感じ集計していきます。

①1日~3日のシートを順番に開きます

※繰り返しの処理

②D7のセルの内容が空白かどうか? 調べます(クレカ以外の支払い方法だと空白になるという前提)

空白ではない → 転記処理をします

空白だった → 次の行を調べます

※条件分岐と繰り返しの処理

③空白ではないのでシートをまたいで転記します

1日シートの「D4」のセルの内容をクレカ管理シートの「E5」セルに転記します

残りの項目も入金日以外は転記します。

転記先は、冒頭で紹介した動きになりますがポイントは「決済日と入金日」の転記と日付設定にあります。

※シートをまたいだ転記

④決済日は1日シートのB4セルの日付を必ず転記する必要があるので、繰り返し処理をしても特定のセルから転記します。

他の日付のシートでも作りは同じなので、このルールは統一です。

入金日は、月末にまとめて入金があるものとして「決済日の日付」の「年月+月末の日付」を自分で作って「クレカ管理シート」のA列に入力します。

つまり、「2021/4/5」の決済日だったら、「2021/4」までは決済日からとってきて月末の「30」をくっつけて「2021/4/30」の日付を自分で作って、A列に順番に入力していくということです。

※固定されたセルの値を目的の場所に転記・柔軟性のある月末の日付を自分で作る

こんな感じの流れになります。

これを自力でプログラミングできるくらいになれば、ある程度のことが出来ているので経験を積めばVBAを扱えるようになるでしょう。

ポイントは※で書いた部分です。

  1. 繰り返し
  2. 条件分岐
  3. シートをまたいだ転記
  4. 固定されたセルの値を目的の場所に転記
  5. 柔軟性のある月末の日付を自分で作る

この流れを自然とどんなコードの流れで作るかが、頭の中でなんとなく出来るようになるとVBAでコードを書くことが楽しくなってきますよ。

それぞれの処理を実現するためには、こんな感じの処理が必要です。

  1. 繰り返し → For~Next の知識が必要
  2. 条件分岐 → IF~End IF の知識が必要
  3. シートをまたいだ転記 → シートの指定とセルの指定方法を知ることが必要
  4. 固定されたセルの値を目的の場所に転記 → シートをまたいだ転記と同じ方法でOK
  5. 自分で月末の日付を作るには、Year関数やMonth関数、DateSerial関数を組み合わせる必要があります

まずは、VBAが何をすることに向いていてその機能を実現するためには、何を学べば良いのか?

目的をしっかり決めて、今回上げた機能を自分でコードが書けるように頑張ってみましょう。

VBAの活かし方をしっかり把握しよう

最後にVBAでプログラミングした方が良いことと、Excelの標準機能でも十分なことについて把握しましょう。

まず、私がExcelの機能で一番重要視している機能は、

「テーブルとして書式設定」と「ピボットテーブル」です。

「テーブルとして書式設定」機能は、データベースとして非常に価値があり、実務でも使い勝手が非常に良いので必須機能だと思いっています。

そして、「ピボットテーブル」機能は、データベースを基にして色々な角度でデータ分析が出来る機能です。

例えば、広告がどれだけの集客をしているのか? という分析を「地域・曜日・時間帯・性別・手段」など色々な角度からの分析が簡単に出来ます。

私は日頃から両方の機能にめちゃくちゃお世話になっています。

あとは、形が決まっている書類に必要な情報入力する作業です

例えば、「見積書・請求書・納品書・領収書」など連動して書類を作るくらいまでは、VBAに頼らなくてもExcelで工夫すれば、問題なく作ることが出来ます。

データベースの考え方や、関数を使えばそこまで難しくないでしょう。

このあたりまでは、Excelの標準機能で十分対応可能です。

わざわざ、時間と労力を掛けてまでVBAを習得するほどのものでは無いです。

では、VBAの使い所はどういうところでしょうか?

私が必要性を感じるのは、「繰り返し処理」と「大量のデータを一気に扱いたい仕事が多い場合」です。

さっきの「クレジットカードの集計」のようにある程度決められたルールの書類があるけど、1日単位で1ヶ月分の集計を目と手を使って作業している場合は、VBAが真価を発揮してくれます。

どうして真価を発揮するのか?

答えは、「プログラミングは繰り返しの作業に非常に強く見逃すことが無いから」です。

人は絶対にミスをします。

このミスをほぼカバーしてくれるのがプログラミングです。

繰り返しを人がやると、ミスはするし見逃すこともります。

それを都度ダブルチェックしていたとすると、時間も労力も単純に倍です。

この労力と時間がほとんど無くなったらもっと重要なことに時間を掛けられます。

この重要なことに掛ける時間を作ることがVBAの本当の価値であり、最大のメリットということを意識して下さい。

次に「大量のデータを一気に扱いたい仕事が多い場合」ですが、私の場合CSVファイルを読み込んで一気に思い通りの結果として書類を作ることが非常に多いです。

CSVファイルを読み込んで、思い通りの表示をさせるだけなら約1秒で片付けられる仕事です。

これ、Excelの標準機能だけではさすがに無理です。

でも、VBAならサラッと処理してくれます。

さっきのクレジットカードの集計結果をまとめるという仕事は、私が実際にやっていた仕事でした。

当時は超ローカルなやり方だったので他の仕事と一緒にやるので約2日ほど掛かっていました。

でも、今ではたった1秒です。

CSVファイルは、古い形式のテキストファイルですが、作りが単純なので色々なソフトがデータをCSVとして出力してくれる機能があります。

CSVファイルには、たくさんの情報が含まれていて自力でまとめ直すとそれなりに時間は必要になります。

ところが、CSVの読み込みを自由に扱えるようになるだけで仕事量は激変するんです。

つまり、VBAを習得しようとして勉強するなら「めっちゃ面倒な仕事が多くて時間掛かりすぎる」

こういった量が多いのにミス無くこなさないといけない仕事が多いなら、今すぐにVBAを勉強して自分のものにして下さい。

そこまでの仕事でなければExcelの勉強をし直した方が早い場合も多くあります。

VBAを習得出来る人は、本当に一握りです。

今は、SNSが発達していつでも誰にでも聞く機会が多くなっていますが、それでも解決できないことが多々出てきます。

それでも、今の仕事をどうしても楽にこなせるまで頑張りたいと思ったら、VBAの勉強をする価値は十分にありますよ。

VBAの活かし方をしっかり把握して、最後まで諦めなければ必ず習得できます。

覚悟さえ持っていれば、大丈夫なので自分が本当にVBAを必要としているのか?

改めて考えてみて下さい。

まとめ

今回の話は、いかがでしたか?

VBAを勉強するなら、ハッキリした目的を持つことが重要だということをお伝えできたでしょうか?

ただ単にVBAを勉強すれば、簡単にスキルがついて便利になるんだ。

くらいの考え方だと、ハッキリ言って途中で挫折してまた勉強をしようとは思わないでしょう。

VBAでできること、必要になってくるコードなど最初に知っておいて損は無いです。

スキルを手に入れるのに近道はなく、地道ですが少しずつ慣れていくことが最短ルートです。

少し道は長いですが諦めずに取り組んでみましょう。

私もある程度VBAは扱えるのでちょっとした質問などは、Twitterや問い合わせフォームから気軽に聞いてくださいね。

出来る限りアドバイスさせてもらいますので、お気軽にどうぞ。

今回も最後まで読んでいただきありがとうございました。

それでは、次回またお会いしましょう

またね!!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です