フクロウ( Fukurou_Japan)です。
今回はVBAについてお伝えします。
VBAとはマイクロソフトオフィスのエクセルやアクセスなどで使用できるプログラミング言語のことです。
過去に職場でいろいろ作った経験があるので、その内容を書いてみたいと思います。
職場の作業効率化を図りたい方や、VBAで何ができるかイメージがわかない・・という方には参考になると思います。
【プログラミング】過去のVBA経験談!
VBAは冒頭で紹介しましたエクセルやアクセス以外にワードやパワーポイント、アウトルックでも使用することが可能です。
私が使用していたVBAの頻度は以下です。
エクセル > アクセス > アウトルック > ワード
パワーポイントでは使用する用がなかったので使っていませんでした。
『ワードでプログラムして何をするの?』 ともしかしたら疑問に思われるかもしれませんが、こちらは差し込み印刷をする際にアクセスと連携する際に使ったりしていました。
このようにアプリケーション間で連携もできたりするのがVBAの素晴らしいところなのです。
特にエクセルとアクセスを組み合わせるとなんでもできちゃいます。
もう最強ですね。
いろいろな事務作業が自動化出来てしまいます。
例えば手動でやると8時間かかる作業も、VBAで行うと数分で出来たりします。
人間の判断を必要としない作業をプログラムに任せるとこのように信じられないぐらいの時間短縮が出来てしまいます。
作業を楽にしたい場合は身につけておくとかなり良いスキルだと思います!
VBAのメリットやデメリット
VBAは良いことばかりではありません。
ここでVBAのメリットとデメリットを見てみましょう。
メリット
・VBAはアプリケーションごとに書き方の違いはあるが、基本的な部分は同じなので、一つできればもう一つも結構楽にかけるようになる。(エクセルで書けるようになればアクセスでも書けるなど)
・エクセルの場合、マクロの自動記録 という機能があるのですべてのコードを自分で書かなくてもよい。アクセスにも似たような機能がある
・VBAを学ぶことで他のプログラムを勉強する際に役に立つ(この考えはどの言語でも同じ)
・マイクロソフトオフィスのアプリケーションだけではなく、windows全体やブラウザの操作なども自動化できる
・導入が他の言語に比べて楽なので、他のプログラムで挫折した人でもマスターしやすい
・VBという言語やVBSという言語とも共通点が多いので、VBAができるようになることにより、この2つを学ぶ時に抵抗が無くなる
・WEB所にVBA関連の情報が非常に多い。VBAは20年以上前から存在し、さらにオフィスなどで結構使われているため、たくさんのサンプルコードやQ&Aがあり、困ったことがあっても解決しやすい
デメリット
・そもそものアプリケーションの機能を知っていないと使いこなせない。エクセルやアクセスが全くわからないのにVBAを始めてもほとんど意味がない。そのような場合エクセルやアクセスの基礎学習から始める必要があるため、プログラムが書けるようになるまで時間がかかる
・マイクロソフトオフィスを使う用の無い職場とかだと活用できない
・転職する際に、VBAが出来たところでどの程度強みと言えるのかが不明。ただし、VBAが理解できていれば他言語もマスターしやすいという点はあるため、その部分をアピールすると良いかもしれない。
・個人で独立してVBAで稼ぐのは難しい。ココナラなどであまり単価の高くない仕事ならあるかもしれないが、VBAだけで数十万を稼ぐというは厳しいかも
・もしプログラムを作った人が退職したりすると、プログラムに問題が発生した場合、業務に支障がでる可能性が高い。特にアクセスのVBAはあまり使える人が多くないので注意が必要(使える人が多くないというか中途半端なデータベースなので使っている人が少ないとも言える)
・プログラムを作ることを依頼された時に、どれぐらいの時間がかかるのかを具体的に答えるのが難しい。以前に似たようなものを作ったことがあるなら予想はできるが、全く作ったことがないタイプのものだと想像以上に時間がかかってしまうことがある
・マイクロソフトのバージョンアップの頻度は結構高いが、そのために新しいほうのバージョンで作ったプログラムが古いバージョンでは動かないということがよくある。その為頻繁なオフィスのバージョンアップは避けたほうが無難
パッと思いつくのはこのような感じですね。
メリット・デメリットを理解した上で学習してみるかどうかを決めてみても良いかもしれませんね。
過去にどういうものをVBAで作ったのか?
ここからは実際に私が作ったものの紹介です。
あまり具体的にするといろいろよろしくないこともあるので、ざっくりとした感じになりますがそのあたりはご了承ください。
WEB上の申し込みフォームへの自動入力
チケット購入や各種申込みでよくあるのが、『◎◎時以降になったら申込み開始が可能になる』というタイプのフォームです。
時間が来るまでは申し込み画面の入力項目(名前・住所など)がグレーになっていて、時間が来たら入力ができるようになる、そのようなタイプのものです。
私が作ったのは以下のようなものです。
・エクセルにWEBのフォームと同じ内容のものを事前に入力しておく
・時間が来たら、エクセル上のプログラムを実行させる
・そうすると勝手にWEB上の申し込みフォームに必要な情報が入力される
・あとは必要があれば手動で 送信ボタンを押す などの操作をする
これだと入力項目が多くても一瞬で終わります。
もちろん事前にエクセルで入力しているので確実に間違いがないことも確認済みです。
他の人が1分かけて手入力しているところを、私が作ったものを使って入力すると1秒で終わります。(事前入力はもちろん必要ですが)
申込みが数分で締切になってしまうような競争率が激しい場合はかなり有利になります。
ただ、時間にならないと申し込みフォーム自体が開かないタイプのページですとこのやり方は残念ながら使えません。
少し専門的になってしまいますが、簡単に何をやっているのか説明します。
・エクセルからIE(インターネットエクスプローラー)を動かすように設定する
・エクセル上に申込みフォームと同じ項目を手動で作成
・申込みフォームのHTMLの構造を解析して、エクセル上の申し込みフォームに入力した内容をIEに入力するようにする
このようなことをやっています。書くと簡単ですが、実際にプログラムを作ってみるとHTMLの解析あたりが多少難しいかもしれません。
アウトルックに添付されたエクセルファイルの内容を必要な形式に変換し、アクセスに移動させる
これは多少複雑な動作になります。
流れは以下です。
・決められたフォーマットに情報が入力されたエクセルファイルが添付されたメールがアウトルックの受信トレイに複数届く
・アウトルックから添付ファイルのみを取り出し、決められたフォルダに保存(アウトルックのVBAを使用)
・フォルダに集まったエクセルファイルの中身を一つのファイルにテーブル形式でまとめる(エクセルVBA使用)
・アクセスのテーブルに上記のデータを移動する(アクセスのVBA+エクセルのVBA)
上記の処理がボタン一つで実行されます。
手動で行うと相当大変です。これは作った後はだいぶ楽ちんになりましたね!
アクセスのデータから必要な情報を集め、パスワード付きエクセルファイルを作成し、指定したアドレスにアウトルックで送信
この操作はかなり複雑です。
アクセスVBAの中でエクセルやアウトルックを呼び出すということを行っています。
ここで一つポイントを。
アクセスやエクセルなどの別アプリケーションを連携させる場合2つの方法があります。
1 アクセスとエクセルで別々のプログラムを作り、相互で呼び出せるようにする
2 アクセスの中でエクセルのコードを書く、またはその逆
コードがスッキリするのは2の方ですが、作るのが簡単なのは1です。
動作確認も1のほうがやりやすいです。
絶対にどちらかを選んだほうが良いというわけではなく、状況によって選択すると良いと思います。
ちなみにアウトルックのVBAについてはアクセスやエクセルとは結構違うものだと考えたほうがよいです。
サンプルコードも書籍も少ないので、海外の情報などを見ながらやっていましたね。
CSVファイルで届いたアンケート結果を見やすいようなフォーマットに変更して表示
こちらはエクセルVBAだけでの作成です。
アンケート結果は一択の選択式だったり、複数選択だったり、テキスト入力ができたりなどいろいろなタイプがあります。
これらのデータを見やすいように加工するわけです。
ピボットテーブルで表示させるにしてもアンケートの場合は上記で説明したようにいろいろな回答のパターンがあるので、なかなか難しいわけです。
それをプログラムで一発で行うわけですね。
実際にはこのようなことをしています。
・CSVから必要な項目をピボットテーブルで表示させる(ピボットテーブルで表示が難しいものは除く)
・その中から必要なデータを最終的なフォーマットに並べる
・最初の段階でピボットに載せることが出来なかった残りのデータを最終的なフォーマットに表示させる
途中でピボットテーブルを挟んでいるのはそのほうが視覚的に処理がわかりやすいからです。
もちろん全部プログラムで書くことも出来ますが、相当面倒ですので、ここはエクセルの素晴らしい通常の機能を使いつつ、プログラムしないと実現出来ないところだけプログラムするといった使い方をしています。
エクセルの通常機能を混ぜた場合とプログラムだけで作った場合の実行速度の差は場合によって異なります。
前者の場合が早い場合もありますし、後者の場合が早い場合もあります。
ですので、一度作ってみて極端に遅さを感じるようならもう片方のやり方で再度プログラミングして作ってみることもたまにありましたね。
ただ、あまりそこにこだわりすぎると先に進まないので、極端に大きな差が無い限りは作り直しなどは不要だと思います。
社員のデータベース作成
社員のデータベースを作成したこともありました。
ゼロから作ったわけではないのですが、すでに作られたものを私がカスタマイズした感じですね。
カスタマイズした理由としては『◎◎の条件のデータを取り出せないか?』という依頼が頻繁にあったためです。私がVBAでカスタマイズする前は エクセルにエクスポート→手動で修正して欲しいデータの形にする ということをやっていたようです。
まぁ、殆どはクエリ→レポートだけで実現出来たのですが、VBAを使ったほうが効率が良いパターンも多かったので併用していました。
アクセスの場合はデータベースの知識が無いとVBAを書く以前に何もできない、、、ということになりがちですね。
私は慣れていたのでなんとも思いませんでしたが、アクセスをイチから今から学習を始める・・ということを考えるとゾッとしますね。
ですので、データベース系はよっぽど今そのスキルが必要! というようなことでも無い限り深掘りしないほうがよさそうに感じsます。
さいごに
いろいろと例を挙げてみましたが、いかがでしたでしょうか。
他にもいろいろと作っていたのですが、パッと思い浮かぶのはこのようなものですね。
現在は会社勤めはしていないので、ほぼVBAは使う機会がなくなりましたが、たまに投資の自動売買をする際に活用することもあります。Pythonで作るほうが効率が良いのは間違いないのですが、Pythonを学習している間にVBAで作れてしまうので、そのようなやり方をしていました。Pythonはそれはそれで今後学習していく予定です。
VBAが活躍する場としては、
人があまり多くない会社(数名とか数十人とか)で、
ある程度仕事のやり方を自由に決められるタイプの事務的な作業
このあたりでしょうね。
今から学習するのでしたらVBAよりほかの言語のほうが良いとは思いますが、職場で『死ぬほど面倒くさい単純作業を行っている』場合はちょっと作ってみても良いかもしれませんね。
また、自分で作らなくてもココナラなどで依頼して作ってもらう事もできます。
その場合はもしかしたら数千円で作ってもらえるかもしれませんので一度相談してみてもよいかもしれませんね。
ということでVBAについていろいろと書いてきました。
VBAに限らずプログラミングを行うと論理的思考がかなり鍛えられるのでオススメですね。
鍛えられるというかソレがわからないと先に進まないので強制的にそのような思考になってしまう・・という言い方のほうが正しいかもしれません。でもそういう思考が身につくと人生全体で応用できるので便利だと思います。
今回は私のVBA経験についてご紹介しました。
それではまた次回!