Excelの効率化について

現在弊社には、Excel業務効率化についてのお問合せが多数寄せられています。

そこで、今回のメルマガでは、VBA、特にExcelVBAとマクロ、および関数について説明したいと思います。

今回は、実践プログラミングを行いますので、少し長くなります。覚悟しておいて下さいね。

まずは皆さん、ExcelVBAとマクロ、それと関数の違いは理解されていますか?

簡単に説明しますと、下記のような意味となります。


関数 :Excelに用意された数式の一種で、あらかじめ定義された数式のこと
マクロ :Excelに用意されているプログラム(機能)で、VBAで作成されている
VBAプログラミング言語(Visual Basic for Applications)


つまり、関数とマクロ/VBAとは別種であることが解ります。

次に、マクロとVBAの関係ですが、マクロは最初からExcelに用意されている機能で、「操作手順の自動記録」を行うものとなっています。

そして、操作手順の記録を、VBAと言うプログラミング言語で行っている、と言う関係になっています。

マクロは、上記のように「操作手順を自動記録」する機能ですので、下記の様に、毎回同じ作業を行う場合に、有効な手段となります。

1.社内顧客管理システムから、最新の顧客情報を取得する
 → ファイルのコピー

2.最新の顧客情報から、自分の担当地域の顧客だけを抽出する
→ フィルタリング

3.抽出した担当顧客を、新たに顧客となった日付順に並び変える
 → ソート

4.該当情報を、本日日付のファイル名で、自分のPCに保存する
 → 名前を付けて保存

Excelの作業に慣れている方であれば、これ位の作業なら10分もあれば完了すると思いますが、これをマクロとして保存しておけば、さらに作業時間が短縮され1分位で終えることができます。

このように便利なマクロですが、次の様な弱点があります。


1.条件判定ができない
→ 該当顧客に過去1千万円以上の売上があったら特別値引き率を適用

2.繰り返し処理ができない
→ シートの上から順に、データが無くなるまで

3.メッセージを表示できない
→ 処理中に過去売上欄に空白(不正データ)が見つかったら警告を出力


上記、「顧客管理システムからの顧客抽出」は、これら弱点には関係無い処理だから良いですが、抽出データに「弱点1」に挙げた「特別値引き率」を表示する必要があったら、皆さん、どうしますか?

過去売上欄に「lookup関数」を組み込み、過去売上額を比較して「特別値引き率」を設定する、と言うのが一般的な対応ではないかと想像します。私も、このような対応を取ります。

しかし、さらに『今年度のターゲット顧客を絞り込むために、昨年度の売り上げが2千万円以下の顧客を、今年度の重点ターゲットにする』と言う業務命令が来たらどうしますか?

この業務命令の場合は、単純な顧客リストだけでは対応が取れないので、販売管理システムから昨年度の売上情報を抽出して、顧客毎の売上累計を算出し、その結果と今回作成した顧客リストをマージする必要があります。

こうなると、もうマクロでは「お手上げ」状態です。

このように複雑な処理を可能にするのがExcel/VBAです。

Excel/VBAは、前述のとおりプログラミング言語ですので、Excel上、表形式になっているデータならば、どのような処理でも対応可能です。

一般的にExcel/VBAでは、次の様な処理を得意とします。


1.データ変換作業
→ 楽天市場の売上情報を、勘定奉行のデータ・フォーマットに変更して、勘定奉行の中に取り込む

2.データ集計作業
→ アンケート結果を集計して、設問毎の値を計算し、帳票として出力する

3.データ入力作業
→ 顧客情報を入力するだけで、各種契約書や精算書等の管理データを自動作成して印刷、保存する


また、データベースとの連携も可能ですので、前述のような顧客管理システムと販売管理システムのデータベースから必要情報を抽出し、数値を累計したり、抽出データのマージをしたりすることも得意としています。

一般中小企業の各部門では、どのような業務にExcel/VBAが適しているのかと言うと、次のような情報をExcel/VBAで作成、管理している所が多いようです。


総務・経理:勤怠管理表、出張旅費・交通費精算書、経費一覧表、支払精算書

営業 :会議資料(売上予測、顧客資料)、見積書、請求書、顧客管理資料

その他  :在庫管理表、工程管理表、ロット管理表、受注管理表、仕入台帳



大企業になりますと、逆にExcel/VBAの範疇を超えてしまいますので、SAPやOracle/EBS等のERPシステム等で管理されています。


弊社でも、各種Excel/VBAを開発しておりますので、開発実績はホームページでも公開致しております。
→ http://msystm.co.jp/service_solution_efficiency.html

Excel/VBAプログラミング言語・・・と言うと非常に難しいものだとお考えだと思いますが、事実、プログラミング経験が無い方にとっては、非常に難解なものです。

私のように、過去にプログラミング経験がある者にとっても、経験した言語とは異なる言語ですので、今更勉強しようとは思いません。時間の無駄です。

やはり、このような時には、【その道のプロ】に頼むのが効率的です。

また、Excel/VBAは、小規模システム向きの開発言語ですので、どの業者に依頼しても、短納期/安価でシステム構築が可能です。弊社の場合でも、開発工数1カ月以内、開発費用数万円で、ほとんどの開発を請け負っています。

逆に、開発工数が1カ月を超える様なシステムは、Excel/VBAではなく、他の本格的な開発言語でシステムを構築した方が良いかもしれません。

特に、クライアント・サーバー系システムに関しては、Excel/VBAには向いていませんので、C言語、あるいは同じVB系でもVB.Net系の開発言語で作成した方が良いと思われます。

その辺りの注意事項は、弊社のホームページにも注意事項として掲載していますので、ご興味がある方はご覧下さい。
→ http://msystm.co.jp/excel_faq.html

ここで、Excel/VBAとマクロの実物を紹介したいと思います。

下図の様なExcel(Excel2007)の顧客リストがあります。(架空の顧客リストです)

このようなExcelシートを開き、メニューで「表示」→「マクロ」をクリックして下さい。

次に「マクロの記録」をクリックします。

上記ボックスの「OK」をクリック後、その上で、Excelに対して次の作業を行います。
(1)該当シートの1行目にフィルターを掛ける(「1行目選択」→「データ」→「フィルター」)
(2)「都道府県」欄のフィルターを選び、「東京都」だけを選ぶ
(3)東京都の顧客だけが表示されたら、該当顧客を全て選んでコピーをし、別のシートに貼り付けます
(4)再度「マクロ」をクリックし、今度は「記録終了」をクリックします。

これで、マクロの作成が完了しました。顧客リストを初期状態に戻し、「マクロ」→「マクロ表示」→「実行」をクリックすると、今行った作業が、そのまま実行されます。これが「Excel/マクロ」となります。

次に、「マクロ」→「マクロ表示」→「編集」をクリックして下さい。

これが、Excel/VBAのプログラムの内容です。ちなみに、上記「東京都」の部分を他の県、例えば「愛知県」に修正して実行すれば、別シートには、「愛知県」の情報だけが抽出されてコピーされるようになります。

これがExcel/VBAのプログラムの編集と実行になります。

ここまで実践してみると、初めてExcel/VBAExcel/マクロの違いは、体感できたのではないでしょうか。


最後に、今回はExcelを実例として取り上げましたが、VBAMicrosoftのOffice専用言語ですので、当然Word、PowerPointAccessにも標準装備されています。

WordやPowerPointで何するの? と言う方も居ると思いますが、Wordに関しては、契約書の自動作成等の時に、Word/VBAを使う形になります。PowerPointに関しては、実は私も?です。必要になったら調べてみます。

このように、Excel/VBAシステムは、短納期/安価で構築できる業務効率化システムですので、何かお困りの際には、弊社にご相談下さい。

それでは今後とも宜しくお願いします。