みなさん、こんにちはケンケンです。
今回は、タイトルにあるように、関数でできることはVBAでやらない方が良いのか、を深掘りしていこうと思います。
個人的な見解ですが、結論から申し上げますと、関数でできることは、VBAでやろうとしない方が良いです。
以下で、具体的に考察していきます。
結論は関数でできることは出来るだけVBAでやらないほうが無難です。
もう少し言うと、関数とVBAは適材適所で使い分けるべき!というのが僕の結論です。
ただこれについては昔から論争がありまして、
ある人は、
VBAなんて覚える必要はない!関数でできることだけでほとんど解決可能だ!
と言い、
そしてある人は、
VBAを覚えてしまえば何でも実現できる!関数でできることも再現できるし!
と言います。
上記のように2つに分かれる傾向にあります。
両方の言い分はよく分かります。
というのも僕自身、それぞれの立場だった時があるからです。
今はその中間的な立場です。
中途半端な立場かもしれませんが、実際そんな感じです。
では、どうして僕が、今の考え方になったかを以下で説明していきます。
関数のメリット
関数とVBAでメリットとデメリットを比較してみたいと思います。
以下については個人的な見解ですので、参考程度に考えていただきたいですが、僕自身エクセルとは15年ほど格闘してきて、関数・VBA共にかなりの時間をかけて勉強してきましたので、それなりに信頼性はあるかと思います。
関数のメリットは
- 習得時間が比較的短い
- 関数それぞれを独立した概念として覚えられるので費用対効果が高い
- 周囲への浸透率が高いので理解してもらいやすい
- (ある程度)自動化できる
あたりが上げられます。
説明していきます。
習得時間が短くて済む
もちろん、どこまで深く勉強するかによって、時間はまちまちです。
しかし、少なくともSUM関数を知らない人はほとんどいませんね。そして、SUM関数を使えるようになるまで、
とんでもなく苦労した、という方もあまりいないと思います。
つまり、初歩的な関数を覚えることは難易度が低く、かつすぐ使えるようになりますね。
さすがに、SUM関数だけだと実務に活かすのは難しいですが、10個くらい覚えてそれぞれ連携できるようになれば、
相当なことができるようになります。
ここまでくれば実務で不便を感じることが少なくなりますし、習得時間もそれほどかかりません。
こんにちは、ケンケンです。 みなさんはエクセルの勉強をしたことってありますか? 勉強といっても 分からないことがあったらネットで検索 書籍を購入して読んでみる セミナー等に参加してみる […]
ひとつひとつ分けて習得できるので、記憶して、即実戦投入できる
関数の勉強は簡単に言うと費用対効果が高いのです。
例えば、IF関数を使ってみたいけど使い方がよくわからない、
という時は、ネット検索して基本的な使い方を理解して数式をコピーして使えば、大抵出来ますし、エラーも起こしにくいです。
一問一答形式で勉強してすぐ使えるため効率がいいです。
みなさん、こんにちはケンケンです。 今回は、IF関数について解説していきます。 みなさんは、IF関数を使っていますか? 余裕で使えてるよ。という方はこの記事を読む必要[…]
周囲の浸透率が高いので自分で作った数式を理解してもらいやすい
例えば、自分で作った資料にIF関数を使用した場合、周囲の人も関数を理解している可能性が高いので
数式の説明をするまでもない、ということが多いです。
また、周囲の理解力が高ければ、間違った使い方をしていたら気付いてくれる時もあります。
つまり、ミスを見つけやすいという利点がありますね。
あらかじめ関数を入力しておくことによって、作業を自動化できる。
例えば、データ入力用と集計用のシートを用意しておいて、集計用のシートにはあらかじめ関数を入力しておきます。
すると、データ入力用シートにデータを入れるだけで集計用シートに自動で転記されるようにできます。
関数の中でも高度なものを使うことが多いですが、基本的な関数をマスターできていれば学習コストはそれほど高くありません。
関数のデメリット
関数のデメリットについては、
- データの負荷が大きい
- データが消える可能性がある
- 完全自動化は不可能
上記が上げられます。
関数はひとつひとつのデータ量が多い
関数は基本的にエクセルファイルへの負荷が大きくなります。
負荷が大きくなると、動作が遅くなり、強制終了する可能性が高くなります。
みなさんにもそういった経験ありませんか?
さっきまでスムーズに作業できていたのに、急に動作が遅くなり、最後は強制終了してしまった。
保存もしていなくて泣く泣く作業をやり直した。
こういった経験をされた方もいると思います。
原因はいろいろ考えられますが、ひとつに関数がシート中に張り巡らされて多すぎるということがあります。
関数は出来るだけ少なくした方が、負荷が少なくスムーズに作業ができるのです。
数式が入ったセルが何かのアクシデントで消えてしまう時がある
人為的な原因が圧倒的に多いですが、エクセルを使い慣れていない人は、
無邪気に数式が入ったセルを消してしまいます。というより数式の重要性を認識してない場合が多いです。
セルを保護していれば助かるかもしれませんが、数式が入った全てのセルを保護するのは手間がかかり忘れがちです。
バックアップを取っていないと過去のデータにも影響してしまい、実務上まずいことになりかねません。
100行あるデータで1行だけ関数が壊れているが、誰も気づかずに使っているということもあります。
僕も過去にやらかした経験があります。
完全自動化は無理!
メリットで自動化できると言いましたが、メリットと違うのは「完全」は無理、ということです。
どうしても関数でできることには限界があります。
例えば、メリットでお話しした集計用への転記ですが、転記までは自動化できますが、
転記したシートをコピーし、従業員100人分それぞれの専用フォルダに格納する、ということはできません。
しかし、逆に言うと上記のように100人分のフォルダに分ける仕事がなければ、関数で事足りる、と言うことでもあります。
VBAのメリット
続いてVBAを習得するメリットをお伝えします。
- 完全自動化が可能
- 差別化できる
- プログラミング脳になる
- 他のプログラミング言語を学ぶハードルが下がる
- ファイルへの負荷を小さくできる
- Word・PowerPoint・Outlookとの連携可能
- ウェブ情報の取得も可能
上記のリストを検証していきます。
完全自動化が可能
VBAの最大のメリットと言ってよいでしょう。
コードさえ書ければ、完全自動化できますね。
例えば、1,000件ある取引先のデータを1件ずつ分解して、それぞれのファイルにデータを転記して同時に毎日バックアップを取る。
という仕事があったとき、これを手作業でやると膨大な時間がかかりますが、VBAなら5秒で出来ます。コードを書く時間は別ですが。
絶大な威力ですね。
差別化できます
これは、VBAそのものの効果というより、副次的なものとして
- 社内での評価
- 転職で有利
- 収入アップ
といった効果を期待できる面があります。
つまり、周囲との差別化をはかれるということです。
学習コストが高いので、マスターするとそれだけで一定の評価を得られます。
頑張った分の見返りは充分に期待できます。
それは、自分の可能性を広げることになります。
プログラミング脳になる
VBAも立派なプログラミング言語ですから、機能をうまく使うには論理的思考が不可欠です。
構想を練りツールを構築する手順を作れなければ自動化はできないので、勉強すればするほどロジカルに思考することが出来るようになります。
これは、VBAに限らず仕事のあらゆる面で良い影響がでてくるはずです。
将来、プログラミングを仕事にする気がない人でも、一度学んでみて損はないでしょう。
他のプログラミング言語を学ぶハードルが下がる
VBAはVisual Basic(VB)というプログラミング言語を発端として開発されたプログラミング言語なので、VBAをマスターすると当然VBの勉強をする土台になります。
さらに、条件分岐や繰り返しや変数の考え方は、VB以外の他の言語を学ぶときにも役立つので、たとえばもっと高度なアプリ開発を行いたいと思った時に、他の言語を勉強する際のコストが下がります。
ファイルへの負担が少なくて済む
関数はファイルへの負荷が大きいと説明しましたが、VBAは逆でデータ量を抑えることができます。
VBAでも関数を使うことができますが、関数を使っても計算結果が値として返されるので、セルに数式は残りません。
関数を使ってデータが大きくなる要因は、数式のデータ量が多いことなのでVBAを使うと省エネできます。
重くなったファイルを軽くする効果が期待できます。
Word・PowerPoint・Outlookとの連携可能
オフィス製品である上記との相性が良く、連携が可能です。
エクセルで作ったデータをワードやパワポに流し込んだり、自動でメールを作成して送信までできたりもします。
VBAの勉強を進めていくとこういうこともできるようになります。
さらにウェブ情報を取得することも可能
VBAはウェブ情報を取得してデータ化することもできます。
スクレイピングという手法で、ウェブ上のHTML情報を取得できます。
使いたいようにデータを加工したり、毎日決まった時間にデータを取得することもできます。
僕は、昔、プロ野球の打者と投手の成績を毎日取得してグラフ化するシステムを作っていました。
VBA習得のデメリット
続いてデメリットです。以下に挙げていきます。
- メンテナンスできる人がほとんどいない(書いた本人も忘れる)
- 時間をかけて勉強した割に実務で活かせない
詳しく見ていきます。
メンテナンスできる人がほとんどいない
VBAを習得している割合はエクセルユーザの1%を切ると思います。一説には1,000人にひとりと言われています。
習得のラインは、自分でコードを書いて自動化でき、他人が書いたコードを読めて、かつ不具合が起きたらメンテナンスできる領域に達していることです。
このレベルに達している人はほとんどいないので、不具合が起きた時にメンテナンスできるのがコードを書いた本人だけということが往々にしてあります。
その本人もいなくなったら誰も分からない、というのが現状でしょう。
現場ではどうしてもこのような現象が起こるリスクをはらんでいます。
時間をかけて勉強した割に実務で活かせない
デメリットというか、大きな壁と言ってもいいかもしれません。
時間をかけて勉強したけど、結局思ったようにアウトプットできなかったり、がんばって作ったツールが、関数で全部できました、ということがけっこうあって、
実務に活かしきれずに途中で勉強を辞めてしまいがちです。
僕自身何度も挑戦して何度も挫折したので、この壁を突破するのに苦労しました。
特効薬はないので地道に努力するしかないでしょう。
今は分かり易い学習教材や動画も多いので、それらを使っていくのと、
具体的に作りたいツールを想像しながらインプットとアウトプットを繰り返していくと効率的だと思います。
VBAでできることまとめ
VBAが使えるのなら使えるにこしたことはありません。
もし、VBAが使えるならこういうことができますよ、という記事を以下にまとめますので参考にしてください。
請求書自動作成
こんにちはケンケンです。 みなさん、エクセルVBAを使ったことがありますか? 存在は知っている方が多いかと思いますが、実際に使ったことがあり実務で行かせている方はなかなかいないのではないでしょうか。 V[…]
定番ですが、請求書を自動作成する方法をご紹介している最初の記事です。
まずは、どのようなステップを踏めばVBAの入り口に立てるかを参考にしていただけると幸いです。
ユーザーフォーム作成
みなさん、こんにちはケンケンです。 今回は、ユーザーフォームの作り方をご紹介します。 実務でよく耳にするのは「管理データを作っているけど、横に長い表にたくさんの項目を入力するのが面倒!」といった声です。 […]
VBAでユーザーフォームを作成することができます。
フォームを作れるとユーザーの使い勝手を改善し、業務上のミスを減らせる効果があります。
自動化に目がいきやすいVBAですが、フォームを作るテクニックもマスターしていると大きな武器になります。
文字列操作もお手の物
みなさん、こんにちはケンケンです。 今回は、VBAで文字列を操作してみよう、という趣旨になります。 文字列操作ができると業務の幅が広がります。 例えば、住所・名前・日付などから特定の[…]
文字列操作で業務改善することも可能です。
関数でも文字列操作は可能ですが、シート全体に関数を使う必要がある場合にやはりデータが重くなる
傾向にありVBAで代用できると便利です。
エクセル関数にはないInstr関数なども使いやすいですよ。
ファイル・フォルダ操作
みなさん、こんにちはケンケンです。 今回は、ファイルやフォルダを操作して、ファイル名一覧を作成したりファイルに記述されているデータを取得してシートに転記する方法をご紹介します。 実務で無数のファイルと格闘して[…]
もちろんファイルやフォルダの操作もできます。
エクセル関数ではできないので大きな武器になるでしょう。
一瞬で数百のファイルに名前を付けることもできます。
シート一覧を取得できる
みなさん、こんにちはケンケンです。 今回は、VBAを使ってシートの一覧を作成し、同時にその一覧にハイパーリンクを設定する方法をご紹介します。 シートの枚数が多くなったときに便利な技です。 […]
ファイル内にあるシート一覧を作成して同時にリンクを貼ることもできます。
シートが多くなりすぎて目当てのものを探すだけで一苦労なんてこともあると思います。
そんなときに大変便利な機能ですよ。
PDFに変換し管理することもできる
みなさん、こんにちはケンケンです。 せっかく作った書類、効率よく保存して管理したいですよね。 今回は、VBAを使ってエクセルシートをPDF化して、名前を付けて保存する方法をご紹介します。 この方法をマス[…]
VBAを使うとPDFに変換しそれを管理することもできます。
データや資料を厳重に管理したいときに便利です。
ログも録れる
みなさん、こんにちはケンケンです。 普段、エクセルで資料を作った際に、作成済みデータのログをとっていますか。 ログとは簡単に言うと、データを記録することです。 ほとんどの方は、ログをとらずに、シートを上[…]
いつ誰がどういう処理をした、というログを簡易的ですがとることができます。
補助的な知識かもしれまんが知っていると業務の幅が広がること間違いなしです。
売掛金をはじめとした管理表の管理もできる
みなさん、こんにちはケンケンです。 今回は、売掛集計表の作り方と管理方法をご紹介します。 経理の方におすすめの記事となっています。 売掛金管理ってめんどうですよね。 それでいて[…]
特に経理関係の方には習得していただきたい知識です。
VBAはイベント処理を使って売掛金のみならず様々な管理表を制御することも可能です。
パスワードも設定できる
みなさん、こんにちはケンケンです。 エクセルで作業していると大量のファイルにパスワードをかけないといけない時ってありませんか。 社員全員分の給与データを社員ごとのファイルで管理しているけどパスワードをかけたい[…]
パスワードを自動生成しセキュリティの強いファイルを作成することもできます。
エクセル関数もたくさん紹介しているので興味のある方はご覧ください。
カレンダー作成
みなさん、こんにちはケンケンです。 今回からエクセルでカレンダーアプリを作っていきます。 カレンダーを作るにあたって、日付に関する関数を覚えておく必要があります。 今回は、基本的な関数を紹介していきます[…]
シリアル値などをしっかり学ぶことでカレンダーも作成できます。
最近では、カレンダーは既存のアプリを使う方が大半だと思いますが、日付を扱う関数や仕掛けは
勉強しておいて損はないと思います。
まとめ:やっぱりVBAを勉強しよう
いかがでしたか。
関数はメリットで紹介したように、ある程度なら自動化が可能です。
僕は関数で自動化することにこだわっている時期がありました。そうです、関数で何でもできるはずだと思っていた時期です。
でも、それには限界があることに気づきました。
その限界を突破するにはVBAが必要でした。
そして、VBAを勉強してさらなる自動化を実現できました。
さらなる自動化を実現でき、VBAで何でもできるなと思いましたが、今ではVBAが万能だとも思っていません。
デメリットでも紹介したように、使える人が少なくメンテナンスが難しいという面があるため、VBAで処理する部分は最小限に抑えるべきと考えます。
ですので、関数とVBAは適材適所で使うべき、という結論に至っています。
僕自身、VBAを使えるようになるのに時間がかかってしまいましたが、今では勉強して良かったと思っています。
それは、VBAのメリットでも紹介したように、他と差別化が図れて自分の世界が広がったからです。
こうして、VBAに関する記事を書こうと考えたのも、世界が広がり、それをシェアしたいと思ったからです。
みなさんもVBAを勉強し世界を広げてほしいです。
相応の努力は必要ですが、続けていれば必ず実になるときが来ます。
習得すれば人生が変わるかもしれません。
最後にもう一度、
関数でできることは、VBAで極力やらないようにしましょう。
関数・VBA双方のメリットデメリットを考慮して使いましょう。
みなさん、こんにちはケンケンです。 みなさんは、パソコンスキルの向上がとてつもなく大事であるという認識はありますか。 パソコンはもう古い!すぐにスマホにとって代わられるんじゃないか と思っている方も多い[…]
こんにちは、ケンケンです。 みなさんはエクセルの勉強をしたことってありますか? 勉強といっても 分からないことがあったらネットで検索 書籍を購入して読んでみる セミナー等に参加してみる […]