ついて情報発信しています。VBAプログラムは本当の初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。エクセルVBAでできることと限界|業務自動化からピアノ演奏まで2020-02-08エクセルVBAでできることと限界|業務自動化からピアノ演奏までVBAの勉強このブログの記事一覧にもどるTweetプログラミング未経験でエクセルVBAに興味を持たれている方に向けて、エクセルVBAでできることを紹介します。自分が勉強しようとしているプログラミング言語がどこまでのポテンシャルを秘めているかを知り、作りたいもののイメージや目的意識を持つことはプログラミング習得にとても効果的です。文法の取得が比較的容易すぐに実務で活用できるものの開発に着手できるエクセルVBAでできることまとめエクセルVBAでできることこの記事ではエクセルVBAでできる事の様々な具体例を挙げていきますが、例がたくさんある為、大きく3つのカテゴリーに分けて順に説明していきます。自動化ツール業務システムその他のプログラムまず、ツールとシステムの違いについて切り分けを明確にしてから具体例の紹介に移っていきます。具体例の見知りたい場合は目次から直接飛ぶことができます。エクセルVBAでできることの概要エクセルVBAでできることは多岐にわたります。どのようなことができるか、と言うのはどのようなことを実現したいかの数だけあると言っても良いでしょう。それではどの範囲でできるかというと、Officeの製品でできる事Office以外のソフトで機能を提供しているものを利用することの範囲でできます。Officeの製品とはエクセルやOutlookと言ったものです。これが、エクセルVBAでできることです。あとはそれぞれのソフトの機能をどう組み合わせるかアイデア次第です。ツールとシステムの違いこの記事ではエクセルVBAでできることをツール、システム、その他のプログラムの3つにわけて説明します。そのため、まずはこの記事における、ツールとシステムの言葉の使い分けについて明確にしておきます。ツールとは何かの目的を達成するためのひとつの機能を提供するプログラムのことです。お客さんからの注文に対して請求書を作成したい場合、注文の品番と数量、単価の情報を元に請求書を自動で生成するという機能を持ったプログラムを作成すればそれは自動で作成するツールを作成したことになります。システムとは、何かの目的を達成するための仕組みのことです。複数の機能やデータから成り立ちます。販売管理システムであれば、販売に関する様々な業務を行い、管理する事が目的です。そのために必要な機能やデータを持っています。販売管理システムは過去の売上高を集計する機能や請求書を作成する機能、確定申告のデータをまとめる機能などいろいろな機能を備えています。それらの機能を利用する前提として過去の売上データを保持しています。このように複数の機能やデータが集まって仕組み、つまりシステムを構築することで販売を管理するという目的を達成する事ができます。これがシステムの意味です。自動化ツールそれでは自動化ツールについて説明していきます。自動化ツールは何かの作業を自動で行うツールです。自動化できる作業は様々なものが考えられます。以下のようなものです。作成ツール抽出ツール加工ツールチェックツールそれでは見ていきましょう。請求書発行ツールツールとシステムの違いで例として挙げた請求書発行ツールです。売上データから請求書発行を行うツールです。Excel2016ではブックの新規作成時にテンプレートが選択できます。簡易請求書というテンプレートがあるのでこれを選択して請求書のフォーマットを選択しましょう。新規ブック作成時にテンプレートから選択した請求書のフォーマットVBAを使わないのであればこの請求書に品目番号や数量と言った項目を手で入力していく事になります。同じエクセルブック内の別シートに受注一覧表を用意しておけば、たとえば、ある期間の請求書やある得意先向けの請求書を一括で作成すると言った様な事が可能となります。VBAでツールを作成する場合は、テンプレートにデフォルトで入っている計算式は不要ですので消しておきましょう。WebスクレイピングツールWebスクレイピングとはインターネット上の情報を取得する事です。毎朝8時にウェザーニュースのウェブサイトにアクセスして、きょうの天気予報を取得して共有フォルダに保存すると言った様なことができます。毎日チェックしているニュースサイトなど日常的な情報取得を自動化することができます。ちなみにウェザーニュースのウェブサイトは下記です。weathernews.jpメール自動配信ツール上でウェザーニュースの天気予報を共有フォルダに取得する例を紹介しました。これをメールで自分宛に配信すると言ったようなことも可能です。他のアイデアとしては、顧客情報データベースから誕生日の1週間前の人だけを抽出して、誕生日特別割引クーポンをダイレクトメール配信すると言った事が考えられます。お客さんが10人くらいならメールもコピーペーストで送ることができますが、何千、何万の顧客のお客さんにもれなく同じ内容のメールを送るのはムリです。名前の○○様の部分はそのお客さんの名前にしなくてはなりません。これは是非とも自動化して間違いなく、モレなく実行したい業務です。季節セールのお知らせなど「○○様」の部分だけを変えて全員に個別メール配信することも可能です。このツールを作成するにはまず、顧客一覧表を用意します。顧客の数が数千~数万程度であればエクセルのシートに作成しておいて問題ありません。イメージとしては下の図のような一覧表を作成します。メール自動配信ツールで利用する顧客一覧イメージこの一覧表を上から順にチェックしていき、誕生日が本日から1週間以内の人を抽出してメールを作成します。メールを作成する部分のプログラムは別に用意しておいて呼び出すようにすると、いろいろなメールに対応しやすいプログラムにする事ができます。パワーポイント会議資料更新ツール会議の為にパワーポイントで資料を作成することがあります。記録として実績をパワーポイントで残しておく場合もあります。そのような資料で多く目にするのが実績のグラフをパワーポイントに貼り付ける作業です。ある手順としてはこのような感じです。エクセルでデータを更新する折れ線グラフのデータ範囲を1セルだけズラすグラフを画像としてコピーしてパワーポイントに貼り付けるそしてできあがったパワーポイントのグラフは位置が微妙にズレたり大きさが違って不細工なデキになってしまうという悲しい結果となります。エクセルVBAを使うと、更新するデータの入力をフォームから入力すると、グラフの範囲を更新してグラフを画像としてコピーしてパワーポイントに貼り付けて保存して閉じるところまで全て自動で行う事ができます。販売実績更新フォーム担当者に実績を入力させるときにグラフの元データを更新させると入力間違いが起きる可能性があります。自分の社員番号と実績数値のみを入力させて、昨日のデータを入力すべきセルの位置は本日の日付からプログラムで求めるようにしておきます。することによって入力ミスを防ぐことができます。ボタンを配置し、パワーポイントの資料を作成するようにしています。受注集計ツール一週間に一回、顧客からの受注の金額をとりまとめる必要がある、と言った場合やあるカテゴリの商品だけ集計して分析したい場合など、いちいちフィルターをかけてコピーペーストで必要なデータを抜き取るのは面倒な作業です。毎回似たような抽出や集計を行うのであれば、元データから決まった条件でデータを抽出し後工程で利用する形に加工するところまでを自動で行ってしまえば良いのです。イメージとしては、ある日の売上実績の一覧から支店ごとの売上の表を作成する、と言った様な事が考えられます。売上実績データのサンプルこの売上データを集計して下のような表を出力するというものです。集計結果のイメージ集計は分析の基本です。集計の方法やグラフのまとめ方が決まっていればデータ分析の前処理ができるということです。データ分析と言うとどうしてもPythonが連想されてしまいますが、エクセルは立派にデータ分析ツールとして利用することができます。いうことはエクセルを操作するVBAもデータ分析の一翼を担うことができるということです。これまで紹介したツールの機能を利用して、メール配信したり支店ごとの売上推移グラフを更新したりといった工夫でツールの価値を高めることもできます。顧客データ入力チェックツールユーザーがデータを操作したときに、その操作が正しいかどうかチェックを行うことができます。部門内で各メンバーに情報を入力してもらう場合、入力を間違う場合があります。ハイフンなしで電話番号を書くべきところをハイフンを入れてしまったり、市外局番の両側に不要なカッコをつけてしまったりといった場合、ユーザーに再入力を促したり自動で値を修正したりすることができます。このように実行ボタンを押したときのみ起動するのではなく、データが入力されたらそのデータが正しいか確認する、といったようにイベントをトリガーにプログラムを実行することもできます。業務システムここまで、ツールについて見てきました。ここからはシステムについて見ていきます。システムとは何かの目的を達成するための仕組みのことで、複数の機能やデータから成り立つのでした。考えると、ツールを作ることができれば、それをうまく組み合わせることでシステムができることになります。ツールの組み合わせによってできるシステムは膨大な種類となります。いうか工夫次第で何でもできるといっても過言ではありません。ここでは例として販売管理システムを例として挙げます。データベースへのアクセス機能を持つ販売管理システム受注⇒出荷⇒入金という3つの作業の流れからなる業務があり、これを販売業務と呼ぶとします。関するシステムだといえます。いった作業に分解できます。出荷、入金の業務もそれぞれ複数の業務からなります。販売管理システムはツールの集まりである受注システム、出荷システム、入金システムを統合したものだといえます。このようにシステムは階層的になる場合があります。場合システムは階層的です。受注システム、出荷システム、入金システムというような上位のシステムを構成するシステムの事をサブシステムと呼びます。一つのエクセルブックに複数のサブシステムを作成するのはあまりお勧めではありません。この場合は3つのサブシステムをまず作成します。販売管理システムというマクロブックを作成し、販売管理システムはそれぞれのサブシステムを呼び出す役割だけを持たせるようにします。VBAはACCESSやMySQLといったデータベースにアクセスすることができます。メール自動配信のところで数万レコード程度ならエクセルシートで間に合うと書きましたが、全社的に利用する販売実績データなどの管理にはデータベースを使うようにします。日々何千件という受注データがあれば、数万行レベルしか実務で耐えられないエクセルでは歯が立たないからです。エクセル自体は数万行のデータにしか耐えられませんが、エクセルVBAはデータベースへのアクセスや操作が可能です。データベースにVBAを使ってアクセスし、ユーザーはインターフェースとして慣れたエクセルの画面でデータベースを操作できる、といったシステムを構築することができます。データベースに接続するVBAプログラムを書くためにはVBAだけでなく、データベースそのものとSQLというデータベースを操作する文を勉強する必要があります。エクセルの機能ではない機能を借りてきて使う必要があるため、エクセル内で完結するプログラムを作成するより、その分だけ難易度は上がります。いえ、しっかり勉強すれば必ず理解できるので、恐れる必要は全くありません。その他のプログラムエクセルVBAは仕事以外の事に使うこともできます。普段エクセルを仕事に使っているため、エクセルVBAは業務改善、自動化の為のプログラミング言語だというイメージがあるかもしれません。動くプラットフォームがエクセルというだけです。ここでは業務以外のエクセルVBAプログラミングのアイデアを紹介します。ゲームエクセルVBAはアクションゲームを作成することもできます。エクセルVBAの著書で有名な武藤玄さんのウェブサイトを紹介します。シミュレーションゲームやマージャンゲームなど本格的なゲームが提供されています。home.att.ne.jpここまでの本格的なゲームを作成するのは難易度も高いですし、プログラムの量も大変多くなってしまいます。ピクロス程度のゲームであれば少し勉強すれば十分に開発できます。じゃんけんやおみくじクイズといった簡単なゲームでプログラミングの文法を抑えてからキーボードからの入力を受け取る方法を学んでいけば、徐々に本格的なゲームが作成できるようになっていきます。迷路くらいまではできます。ネット上でもエクセルによるゲームの動画があるので、そちらも参照してみるとよいと思います。APIと言うWindowsの機能を借りて利用する技術を使うことができます。これを利用して、Windowsの音を鳴らすことができます。音を鳴らすことができるということは、音の高さや長さも指定することによって変更が可能ということです。いうわけで、ピアノが作れます。上の図はセルの幅と高さを調節し、黒く塗りつぶすことでエクセルシートでピアノの鍵盤を表現したものです。このシートを操作するプログラムとして、セルがクリックされたら音を鳴らすというコードを記述します。クリックされたセルの位置がここならこのヘルツ数の音を鳴らす、という具合にプログラムを記述すればエクセルピアノの出来上がりです。無料で作曲できるソフトも入手できる昨今、エクセルでピアノが再現できたからって...と否定的にとらえる必要はありません。いうこともできますよ、ということです。業務システムがツールを組み合わせてできていたように、音を鳴らす方法もエクセルシートにピアノの絵を描くことでピアノを再現できました。何かと何かを組み合わせて何かを作る、そのアイデアが新しいアイデアを生むのだと考えるようにしましょう。エクセルVBAでできる事の限界ここまで、エクセルVBAでできることについて述べてきました。この項ではエクセルVBAの限界について説明します。限界を知ることで過度な期待を防ぐことができますし、将来落胆せずに済みます。それに、限界を知るということは、逆を言えばそこまではできるということです。クロスプラットフォームではないエクセルVBAはエクセル上で動きます。エクセルがインストールされているパソコンでないと動きません。よって、組込みソフトウェアはエクセルVBAで作成することはできません。基本的にWindowsを利用しているユーザーの為のツールやシステムしかできません。「VBAは遅い」と言っている人がいます。多くの場合それは工夫されていないプログラムの為です。多くの場合はプログラムの内容を工夫することで処理時間を大幅に短縮することができます。一方で言語仕様的にどうしても高速処理が苦手だと言わざるを得ない場面があります。それは、コンパイルが不要な言語ということとエクセルそのものが重たいということがあります。パソコンは考える時に0と1の2つの数字の組み合わせを使っています。プログラミングは0や1を打ち込んで行うわけではありません。For、Next、If、Elseなど英単語を組み合わせでプログラミングをします。英語がもとになっています。このおかげで、プログラミング言語は覚えやすく書きやすくなっています。そこで、英単語で書いたプログラムを0や1に変換する作業が必要*1となります。その作業をあらかじめやっておく必要がある言語の場合、純粋にプログラムを実行するだけなので、素早く処理ができます。エクセルVBAは一行ずつ0や1に変換しながら実行しています。日本語訳された洋書を読むのと、英語を日本語に訳して、訳した日本語を読むのとの違いです。これは繰り返し構文に如実に表れます。無駄な繰り返しはしないように工夫する必要があるのですが、仕様的にやむを得ない部分があります。言語の仕様ではなくエクセルの仕様という面があります。エクセルVBAは場面的に、エクセルブックを開くことが多いです。何かのエクセルブックを開いて、加工して、保存して閉じる、という処理です。この開くところと保存するところと閉じるところが壊滅的に遅いです。これはエクセルVBAの仕様ではなく、エクセルというアプリケーションソフトの仕様です。エクセルは誰でも簡単に取り扱うことができるとても便利なアプリケーションです。様々な機能を持っています。この誰でも簡単に取り扱えるということと様々な機能を持っているということを同時に実現しようとすると、大変たくさんのプログラムをエクセル自体が持っていることになります。エクセルのブック自体も初期状態で重たいです。その証拠に空のエクセルを開くだけでも時間がかかります。プログラム言語と関係なくエクセル自体が重いのは仕方がありません。テキストファイルとしてデータを保持し内部的に開いて処理するなどの工夫が必要となります。エクセルVBAの短所エクセルVBAの短所は上の【エクセルVBAでできる事の限界】に記した内容があることです。逆に言うとそれだけです。短所は調書の裏側と言うように、これは仕様の問題と言えます。Microsoftが誰でも気軽に便利に使えるスプレッドシートを作ったのです。エクセルVBAの短所は織り込み済みで便利さと引き換えに遅い、重いという短所もある、という前提の上で、なるべく遅くならないように余計な処理はさせないようにプログラムを工夫するという姿勢が大事です。あとは、言語仕様ですが、クラスの概念が限定的です。専門的になってしまいますがオブジェクト指向と言われるプログラミング言語はクラスという概念があります。このクラスというのがうまく使うととても便利なのですが、エクセルVBAの場合クラスの機能が隠蔽化のみとなっています。実際これ以外のクラスの概念はエクセルの操作にはほぼ不要です。よって短所と言うより言語仕様的にできないことを選択している、と言ったほうが正確かもしれません。エクセルVBAの長所エクセルVBAの調書についてまとめていきます。短所の裏側ですが、身に着けやすさ、実用性が最高に素晴らしいです。開発環境の構築が不要もしくはめちゃくちゃ簡単プログラミングをしようと思うと開発環境を整える必要があります。開発環境とは何かというと、プログラムを書くためのエディタであったり、コンパイルをするためのソフトをインストールするということです。インストールするだけではなく、環境設定が必要となります。この環境設定が難しく、プログラムを始める前に挫折してしまうこともあります。エクセルVBAの場合は環境設定は必要ありません。エクセルがインストールされていれば、そのエクセルに開発環境が付属しているからです。言えば、エクセルが入っていないのであればエクセルをインストールすることがエクセルVBAの開発環境を構築する事と同義になります。別にエクセルVBAの文法が簡単だ、と言うつもりはありません。エクセルVBAを身に着けるのは他言語に比較して簡単だといえるでしょう。それは勉強するための環境にとても恵まれているからです。理由は下記の通りです。使いなれたエクセルの機能を使うことから始められる日本語の文献やWebサイトの解説が充実しているエクセルがある程度使えれば、PCそのものにそれほど詳しくなくても習得できるこのブログでもたくさんVBAの文法や使い方について解説しています。参考にしてもらえればと思います。実務で活用できるものの開発に着手できるほかのプログラミング言語だと、ある程度文法を身に着けるところまではいくものの、そこから実際に使えるものが作れるようになるまでの壁があります。文法を勉強しただけでは実務的には役に立たないということです。その点エクセルは文法を勉強すればすぐに実務で役立つツールを作ることができます。これはなぜかというと、目の前にエクセルブックやエクセルシートといった目に見える操作できるモノがあるからです。勉強した文法もこれらの操作をたくさん扱っています。そのため、文法を勉強する中で身についたブックを開いたり、保存して閉じるといった操作がそのままツールの一部になっていくわけです。エクセルVBAでできることまとめこの記事ではたくさんのエクセルVBAでできることを紹介してきました。そのうえで限界と調書、短所について解説しました。その内容を簡潔にまとめます。APIといったエクセル外のアプリケーションを利用することもできる限界はクロスプラットフォームでないことと、言語仕様的な遅さとエクセルそのものの重さにある速さに関することは工夫次第で相当改善できるが、エクセルそのものの重さの為ブックを開いたり閉じたるする遅さは避けようがないエクセルVBAの長所は身に着けやすいところとすぐに実務に生かせるところさあ、エクセルVBAでできることと限界がわかったところで、安心してVBAの勉強を始めましょう!質問、お気づきの点あればコメント欄にお願いします。うまく回すためのPSIシートモノを取り扱う企業であれば必ずと言って良いほど避けては通れ...2020-01-20BIツールを選ぶ前に知っておくべき事BIツールが雨後の筍のように出てきています。週間)1985年生まれの会社員。業務改善部隊に異動で芽を出し、現在に至る。本業での知識と経験を元に、ブログとTwitterで1生産性向上2業務改善3自動化について情報発信しています。アーカイブはてなブログをはじめよう!mutable_yunさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。