
複数のワークブックを周回してデータを処理したい
本記事は職場内での具体的な事例をもとにした記事となっております。
一週間のうちに定期的に発生する処理を簡単にするという案件です。
いわゆる反復作業、定常業務と言われる作業です。
事例としてはごく一般的なものです。参考になるかもしれないの良かったら読んでみてください。

「○○をExcelで作業しています。簡単にしたいけど何とかなりませんか?」

出来ますよ。ExcelVBAを使って最終的には1秒で処理出来るようにしました。
かいてある様に最終的には1秒で処理出来る様にしました。
どんな案件をどうやって改善したのかを今から書いていきます。

結論
先に結論を書いておきます。
フォルダ内の全ブックの全シートを周回してある条件の文字列だけ文字数を調整しセルに色を付ける
15分/回の作業が1秒/回になりました
作業時間を比較
作成したマクロでの作業と手作業を時間で比較してみました。
- マクロの実行時間は1秒です。回数×1秒が作業時間です。
- 手作業では15分との事でした。週1回~2回作業をする様です。
キリの良いところで5回/月の作業があったと想定し秒数の比較グラフを作ってみました。
秒だと分かりにくいかもしれませんが時間を重み付けするには秒での計算がおすすめです。
削減効果が見易くなるためです。
マクロは時間が経ってないのと同じですので手作業分まるまる削減出来ると思ってもらって良いです。
年で計算すると15時間です。
加えてミスも減ります。総合すると「積もれば効果有」と考えます。
記事の書き方
1回で全てを書ききるのは難しいので4回に分けています。
改善活動を紹介
ここからが記事のスタートです。改善活動を紹介していきます。
最初は作業者からの聞き取りです。ここから紹介しないといけないのは理由があります。
それは「整った依頼なんて無いと思った方が良い」という事です。
整った依頼が来るとは限らない
最初はデータを見ながら「こんな感じだけど何とかなる?」という会話がスタートでした。
本来であれば「要件定義してから話を持ってきてください」とお返ししたいところです。
しかし普通に働いている人で要件定義出来る人なんてほぼ居ません。
要件定義出来る人ならサッとやってどっかに依頼するか自分で何とかしています。
私が関わる案件は要件定義をこちらでやるというパターンが大半です。
これは仕方ないと思っています。
困りごとを書き出す
いきなりコードを書く事はほとんどありません。
最初は現状を把握するため紙に思った事を書き出します。
仕事が埋もれてしまって後で追加される方が大変です。
顕在化させることが目的ですので整ってなくてもOKです。まずは書き出しましょう。
次は書き出した内容を一旦整理して手数がかかる理由を探します。

概要
- 貿易関連の仕事である(わざとボヤっとさせてます)
- 毎週4つの仕様のExcelワークブックのチェックをしている
チェック内容
- 13桁で書かれている品番を10桁にしてセルに色を付ける
手数がかかる理由
- 1つのワークブックには2~3枚のワークシートを持っている
- シート名によってはチェック不要のシートもある
- 各シート数百行の情報を持っている
- 同じシート名でもワークブックによって品番表記の列が違うものがある
- 品番13桁の構成は全部同じですがそのほかに規則性はない
- 3種類の数値もしくは2種類の英語から始まる13桁の品番だけ手を加えたい
- 品番はセルにすぐ書かれているわけではなくスペースで位置が調整されている
現状の作業時間は10~15分/回との事でした。
イレギュラーがありすぎて良く分からないのですがこれを手作業でやってますとの事です。
簡単に言うと「どこに居るか分からない一定の理屈を持った13桁の品番だけ10桁にして品番が居たセルの先頭列の色を変える」という作業をやっています
紙に書き出している最中に「難しくはないけど面倒だな」という印象を持ちました。
これは手作業だと大変面倒です。作業者が変った時にどうやって引き継ぐのかも心配です。
毎回同じ人が作業する様ですが長いスパンで見たら必ずミスりますね。
改善するべき内容はたくさんあるのですがその前にやる事ありそうな気もしています。
まずは改善してしまおう
色々ありますがまずは現状のまま「マクロ化してしまおう」と考えました。
通常だと最初は以下3点のようなことを考えます。
- そもそもその仕事はやらないといけないのか?
- 4つの仕様のExcelワークブックは1つにならないか?
- フォーマットに関して取引先にもお願い出来る事はないのか?
口を動かす前に手を動かそう
まずはやるべき事とやらなくてよい事を整理しようと思ったのですが今回はやめました。
今回はとにかく全部まとめてまず自動化する事にします。
理由は一旦作業を軽くしてさらに良い仕事の方法を考える時間を作りたかった為です。
甘いかもしれませんが重たい荷を下ろして頭の中をクリアにしないと良い案は出てこないです。
だから不満さら丸ごと解消してやろうと思いました。

「検討してから改善」か「改善しながら検討」か・・・
VBAで業務改善するにはアジャイル的考え方(やってみて変えていく・・・)の方が改善は進みます。
理由はやってみないと分からない事が沢山ある為です。
「先に現状把握しリスクとリターンを洗い出して精査してから改善・・・」ももちろん良い方法です。
しかしやってみて新たに出た事象に対してはどの道対策する事になります。
ならば先に手を動かした方が仕事は進むし出来る事も増えるのでスキルも上がります。
まずは現状の仕事のままで良いのでマクロ化する事をおすすめします。
まとめ
現場の方に伝えると「その仕様でお願いします」という事でしたのでデータを用意する事にしました。
次回より構想とコードを用意出来る様に進めていきます。