ジーザス小川です。
昨日の深夜、大阪から帰ってきました。東京に戻ってみたら、雨上がりぽい感じになっていてびっくりしました。
そして、さっき、朝から近所のスーパーで買い物をしてきたところです。
さてさて。昨日の続きです。
昨日は、こんな問題のお話でした。
「エクセルマクロ初中級速習コース」で、昼休み中に出てきた相談から。
ある受講生の方から、こんなことをするマクロを作れないか、と、相談が来ました。
○以下のような、商品名とロット数を表にした情報がある
商品A│6│
─────
商品B│3│
─────
商品C│2│
─────
○そして、上の表を元に、こんな表を作りたい、とのこと。
商品A│1/6│
──────
商品A│2/6│
──────
商品A│3/6│
──────
商品A│4/6│
──────
商品A│5/6│
──────
商品A│6/6│
──────
──────
商品B│1/3│
──────
商品B│2/3│
──────
商品B│3/3│
──────
──────
商品B│1/2│
──────
商品B│2/2│
──────
○ただし、以下の条件を満たさなくてはならないそうです
・各商品の間は一行あけること
・各商品で、一行おきに色をつけること
・印刷した際、同じ商品の途中で改ページしてはいけない
さて、あなたなら、どうしますか?
その答えです。
僕がその方に最初に聞いたことは、これでした。
「で、これ、何で各商品で、一行おきに色をつけなくてはならないんですか?」
直感的に、不要な作業が含まれているような気がしたんですね。
そうしたら、こういう答えが返ってきました。
「いや、そうしないと、見にくいですから」
うーん、「見やすくしたい」というのがその理由ですか。
ここで、大事なことなんですが。
「見にくいから見やすくする」といことが目的なら、他の方法もいくらでもあるんですよね。
例えば、行間を広くするとか、罫線の線種を変更するとか。
相手の提案する手段に引きずられないようにすること肝心です。
まあ、それはさておき。
僕は、さらに質問しました。
「で、この資料、誰がどのくらいの頻度で見るんですか?」
そうすると、返ってきた答えはこんな感じ。
「いえ、ISOで要求されているだけで、ほとんど誰も見ません」
(゚∀゚)キター!
僕は、そこで確認します。
「ほとんど誰も見ないなら、見やすくする必要、ないですよね。。」
質問された方の回答は、
「あ、はい。言われてみれば、そうですね。。」
と、いうことで、一件解決しました。
次、です。
「印刷した際、同じ商品の途中で改ページしてはいけない」
という条件もありました。これについても、確認します。
「どうして、印刷した際、同じ商品の途中で改ページしてはいけないんですか?」
そして分かったことは、これも必須の要件ではない、ということ。
さらに聞いてみると。
最終的に作りたい表も。
商品A│1/6│
──────
商品A│2/6│
──────
商品A│3/6│
──────
商品A│4/6│
──────
商品A│5/6│
──────
商品A│6/6│
──────
──────
商品B│1/3│
──────
商品B│2/3│
──────
商品B│3/3│
──────
──────
商品B│1/2│
──────
商品B│2/2│
──────
ではなく、
商品A│1│
─────
商品A│2│
─────
商品A│3│
─────
商品A│4│
─────
商品A│5│
─────
商品A│6│
─────
─────
商品B│1│
─────
商品B│2│
─────
商品B│3│
─────
─────
商品B│1│
─────
商品B│2│
─────
という程度で良いそうです。
「いや、でも、現場がそうして欲しいと言っているから…」と言われるその方への、最後のひとこと。
「ほとんど誰も見ないこの表を作り込むことよりも優先するべき、もっと大事な仕事があるんですよね。」
「あ、はい。」
「だったら、色をつけたり改行を入れたりする時間を惜しんで、もっと大事な仕事をしたほうが、良いのではないでしょうか。」
「あ、はい。」
「あなたの上司にとっては、どっちのほうが良さそうですか?」
「そう..ですよね。」
「はい、そうですよね。そういうわけで、それではこれで行きましょう。」
そんなやりとりをしたあと、サンプルコードを書きました。
ここまで話をシンプルにしてしまうと、マクロを書くのも簡単になります。
一行ごとに色を分ける必要もない、改行のことも気にする必要はない。
そうなってしまえば、たいした仕事ではありません。
そんなやりとりをしたあとなので、僕が書いたプログラムは、たった90秒で「本当に欲しい機能」を実現できたのです。
長くなってしまったので、ジーザス小川の書いたサンプルコードはまた明日紹介しますが。
ここで今日学んでいただきたいポイント。
それは…。こんなところでしょうか。
○クライアントの要求にそのまま答えることが、真の解決とは限らない
○要件をシンプルにすると、プログラミングも楽になる
○「エクセルマクロで力づくで解決する」だけでなく、常に全体最適を考えるべき
そんなわけで。
この続きは、また明日書きたいと思います。
今日は、午後から夜まで、人と会う時間ばかり。
午前中は、事務仕事をいっきにやる時間にする予定です。