【全サラリーマンはこれを読め】ワイにExcelマクロで自動化してほしかったら最低限ここまでやっておけトップ3



 僕はこのブログのタイトル通り非IT企業に勤める非ITエンジニアです。


ネット界ではエンジニアと言えばITエンジニアを指す風潮がありますが、本来であればエンジニアとは工学系の技術者を指します。もちろんIT技術者もエンジニアで良いのですが(大学でも工学系に属するだろうし)、でも一体いつからエンジニア=IT技術者を指すような風潮になったのか、ちょっと不満です。(日本だけかしら?)


余談はさておき、趣味でプログラミングやっている僕は会社でもExcelマクロを駆使して自分の業務の効率を上げてきているわけです。で、そんな僕に社内でいろいろな方面からマクロ製作の依頼が来るわけですね。


別途記事にしますが、非IT企業でプログラミングやりたければExcelマクロ一択です。それ以外の選択肢はありません。


で、非IT企業の中の人って、Excelマクロを触れる人なんてごく一部なわけです。大半はIT音痴。日本のトップクラスの大学出身の秀才が揃っている弊社でも、なぜかITのことになるとおバカになっちゃうんですね。


そんな日本企業のサラリーマン全員に言いたいのだけど、ITで業務を効率化してほしかったら、Excelの作法で最低限ここまでやれと言いたいトップ3について書きます。


1セル1データの原則

すべてきっちりというわけでもないけど、基本的にExcelは1セル=1データが原則です。ところが、例えば下の図のように文字データと日付データをくっつけたまま1セルに入れてしまうケースが割とあります。



「データを自動収集してくれ」って言われてこんなExcelシートを渡されると、まあ萎えますね。なんでくっつけちゃったのかと。せっかく日付を入力したのに文字列とくっつけてしまったら(データ上は)何も意味をなさない文字列になってしまうのです。

もちろん、できなくはないですよ。左から4文字を消してCDateで日付データにすることは可能です。あるいは:でSplitして2つ目の要素を取り出すとか。

ただ、こういうことやっちゃうITリテラシー残念なヤツって、出荷日だったり納期だったりと文字数は一致しないし、:も全角半角ごちゃごちゃだし、;使っちゃったりして、プログラムの行数がいたずらに増えるわけです。

Excelは原則1セル=1データです。

こんな風に↓しておけば、C2セルの値を参照するだけでいいわけです。


表の途中に合計行みたいなもの入れるな

これが遭遇率ダントツ1位のパターンです。いまだ多いですね。



このデータを使って様々な解析をしたい(マクロマンに依頼したい)のなら、データの法則性は変えてはいけません。


なんでこれがダメなのか?って思う人も多いのでしょう(だからこれをやっちゃう)。


プログラム的にはforループで上から順に参照していって最終行になったらループを止める、という処理の中でデータを引っ張ってくるわけです。で、何を持って最終行にするかというと、だいたい「A列(B列でもいいけど)空欄になったら」とします。


ところが、途中で上の合計のような行が現れると、そこで止まってしまい正しい処理ができなくなります。


もちろん、これもできなくはありません。「特定列に合計という文字列があったら無視」とか「連続して2行が空白だったら」とか、そんな処理をすればできなくもありません(実際そうしている)。


ただ、これによって余計なロジックを組むことになるし、データ数によっては処理速度に大きく影響します。


表の2ページ目以降を横に伸ばすな

表を印刷ページごとに横に伸ばすケースもあるんですよね。印刷すればたしかにきれいに印刷されますが、プログラム的には超厄介なケース。


1ページ目の最終行に言ったら列数を変えて行数をリセット...というプログラムになります。
行のForループと列のForループの2重ループ処理が必要になります。

なお、列番号の規則が崩れていると自動化はほぼ無理です。表-表の間に1列だけ開けていたものが途中で2行開きとかになっていたり(実際に見たことある)。

おまけ

最近はあまり見なくなったので「おまけ」として。

単位を文字うちするヤツ、昔は結構いましたね。単位は表示形式の設定で入れるようにしましょう。