非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Excel/VBAで業務システムを作るときに気を付けてほしいことまとめ

   

ブログタイトルにあるように、僕はIT企業に勤めているわけではありませんし、プロのプログラマーではありません。某業界のエンジニアではあるけど。

非IT企業の特徴として以下があります。

  • パソコンに勝手にソフトをインストールできない。
  • 情報部門はあるけどプログラミングできる人材がいない。その部門を通して外注。
  • ソフト制作を依頼するとそこを通す中間マージンがあるためか高額。

まあ、だいたい大手企業の一般的な姿なんじゃないかなって思います。なので各自それぞれExcel/VBAで業務システムを作っています。これが非IT企業の姿なのです。

パソコンに勝手にソフトをインストールできないので、プログラミング言語はExcel/VBA一択です。

さて、各自がシステムを作っているとは言っても、そこは素人なので言語仕様を少し知っているだけで、エラー出まくりです。

もっとも、エラーが出てから修正するというスタンスなので、そんなこと起きても意に介さないのですが、担当者が変わって次の担当者にそのシステムを引き継ぐとなったらもう大変です。人の作ったプログラムほど厄介なものはないですから。もちろん仕様書なんてものは存在しません。

IT企業の人から見たら驚きかもしれませんが、非IT企業ではよく見る光景なんです。

ただ、やっぱりそれでは苦しいので、僕の経験から最低限こうしてほしいというところをまとめてみました。

あくまで、仕様書がなく製作した担当者がいなくなる中で他の人が引き継ぐという非IT企業の非IT部門での話です。

[ad#top-1]

 

1. プロシージャ名や変数名は日本語で

VBAではプロシージャ名と変数名は日本語2バイト文字が使えます。

プロのプログラマーからするとあまり望ましいことではないかもしれませんが、仕様書がない非IT企業のマクロに関してはプロシージャ名や変数名は日本語であることが望ましいです。

仮にそのシステムを作った担当者がいなくなって、そのプログラムを改修する必要が出た場合、わかりやすい日本語名が手がかりになるからです。

英数字表記でも意味を持たせることはもちろんできますが、日本語のほうがパット見わかります。これがプログラムを修正する時間に大きく違いが出るんですよね。

ちなみに、プロシージャ名や変数名が「aaa」とか見たことありますがもう最悪です。

2. 機能別にプロシージャを小分けして順番にコールする

1つのプロシージャに全部のプログラムを書き込んでしまうケースも見られますが、これも後で見返すときにすごくわかりづらいです。

機能ごとにプロシージャを小分けして、その複数のプロシージャを1つのプロシージャからコールすることが望ましいです。

 

注意する点として、途中でプログラムを中断しようとして、Exit Subを使ってしまうと、そのプロシージャだけbreakするだけで、次のプロシージャに進んでしまう点です。Endで終わらせるか、Public変数で進めていいかどうかを渡すとかする必要あります。(フォームを立ち上げている場合、Endだとフォームが閉じられてしまう)

 

3. マクロと関数を併用しない

これもよく見るパターンです。

シート上の関数を使って集計し、マクロ側でその結果を読み取るというケースですが、速度的には速くなるものの、大勢で使うようなシステムの場合、いつかだれかがその関数を壊します。(Delキーで削除するとか)

Excelにはセルを保護するという機能もあるけど、僕はどうしても関数を併用する場合はマクロ側から関数を書き込むようにしています。(↓)

 

4. マクロファイルは1つでデータは別ブックに保存する

よくあるのですが、同じExcelマクロファイルを毎回名前をつけて保管するケース。データ保存のために複数のファイルになっていくのですが、漏れなくマクロのソースコードも付いていきます。

問題は、プログラムを修正するようになった際に修正すべきマクロの数が膨大になってしまうという点です。この作業はかなりキツイ…。

Excelシートに記載したデータは別途保存したいこともよくわかるのですが、マクロも一緒に増殖していくのは後々プログラムを修正しようとなったらかなり苦労します。

データはxlsxファイルやcsvファイルのようなデータ専用の別ファイルに移動してから保存した方が良いでしょう。

 

6. 年月に分けたフォルダで管理しない

これ、かなりよく見かけるケースなんですが…。

データを別ファイルに保管したとして、そのファイルを1つのフォルダ内ではなく年月に分けたフォルダ内に保管するというケースです。

売上データのように作成日がはっきりしているデータファイルならいいのですが、検査データのようにいつ測定したかわからないようなものなのに、検査した年月のフォルダに保存されてしまうと、あとで引っ張ってこようと思ったら大変です。

マクロでファイルを読みに行く場合、最新のフォルダから過去のフォルダに向かって検索していかなければならないです。プログラムが複雑になるし検索時間もバカになりません。

データファイルは種類ごとに1つのフォルダに保存しましょう。

 

7. 可能であればデータの保存はAccessにする

やはりデータはデータベースに入れた方が後々楽ですね。

非IT部門では、AccessはWord, Excel, PowerPointに比べあまり使用されないのですが、会社のパソコンにはだいたいインストールされているので宝の持ち腐れなんですよね。

僕はエンジニアなので品質データを扱っているのですが、基本Accessに入れるよう心がけています。

後々の検索性を考えると積極的に使っていくべきだと思います。

 

[ad#ad-1]

スポンサーリンク

 - Excel, VBA, 技術系コラム