ゆんの業務改善ブログ

①生産性向上 ②業務改善 ③自動化 について情報発信しています。VBAプログラムは本当の初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。

VBA 自動化ツールの目的を深掘りして、完成度を高める①(出力データ編)

VBAの自動化ツールについて、使い勝手の良いツールに仕上げていく手順について解説していきます。目的を深掘りすることで、完成度を高める事ができます。

f:id:mutable_yun:20191212201849p:plain
目次

開発案件の目的を深掘りして完成度を高める

VBAは入力と求める出力結果が明らかになれば、早速開発に着手できるメリットがあります。一方で、一旦立ち止まって、そのツールが使われる場面や目的を考えてみることで、ツールの完成度を高めていくことができます。この記事ではこれからVBAで開発仕様としているツールがどのようなものなのかを分類した上でそれぞれの分類において完成度を高める方法を考察していきます。大きく分けて下記の様に分類します。

  • 出力データそのものが完成品の場合
  • 人の手作業による次工程が存在する場合
  • その他のツールやシステムによる次工程が存在する場合
  • ユーザーの入力結果をチェックするためのツール

以下、順に解説していきます。

出力データを得ることが目的のプログラムの場合

出力データが目的の場合、次工程が存在しない完成品なのか、次工程の作業が手作業なのか、次工程が何か別のシステムなのかによって求められる出力結果が異なります。

出力データそのものが完成品の場合

出力データそのものが完成品とは、それ自体が会議資料の一部となる、発表資料の添付書類になる、実績進捗として張り出される、など、その後に加工することを前提としていないデータが出力物の場合です。

この手のデータはグラフや表など見栄えを気にします。エクセルデータとして出力することになります。背景の色や罫線、文字の折り返し、文字の大きさやフォントを整えることを重要視しましょう。

忘れがちなのが、セルの書式設定です。後工程を想定しないため、データは基本的に式などを残さず値で保存します

その際、セルの書式は文字列であるべき所は文字列に、数値であるべき所は数値に、日付、通貨もあるべき姿にしておくべきだと私は考えています。例えば、売上高の列の単位が米国ドルで12.34などの表記がある中で、10ドルぴったりの時だけ10と表示されているのは望ましくありません。小数点以下2桁で揃えるべきなら、10.00と表示しましょう。

文字列と数字が混在する列(例えば仕入れ先コードが数字のみからなるものと、文字列がある)と言うような場合、セルの書式が標準のままだと、文字列は左揃え、数値は右揃えになってしまいます。

このようなことにこだわって作れば、そのツールを使う人は安心して、そのままパワーポイントに貼り付けるなどできるようになります

グラフを作成するときは、パワーポイントに貼り付けてプロジェクタで投影されることまで気をつければバッチリです。薄い緑や黄色など、PC上は見やすくてもプロジェクタで投影すると薄くなる色は要注意です。

人の手作業による次工程が存在する場合

f:id:mutable_yun:20191207194631p:plain
人の手作業による次工程が存在する場合は、その手作業がどのようなものなのかを具体的に確認しましょう。その時、単に確認するだけで無く、その後工程がそもそも必要なのか、削れないとしても自動化できないか、と言った視点を持つことで、自動化に対する感性を磨くことができます。

私は基本的には出力物は数値であるべき所は数値、文字列であるべき所は文字列として保存します。これは基本として心得ておきましょう。なぜならば、その後の手作業にVLOOKUPがあると、検索値が数値の場合、検索範囲の中に存在する値も#N.A.が返る事があるためです。

以前、一度、敢えて計算式として残して欲しいと言った要望がありました。どうしてもPCの画面を見ながら人の目で判断して埋めないと行けないセルが在り、その埋めた結果を使って計算させるために、ワークシートの中に計算式を残して欲しいという依頼でした。

内容を確認し、計算式を残すようにマクロを組みましたが、これは例外です。その人しか使わず、計算式をあえて残している事を忘れない、と言う合意の元、リリースしました。

エクセルの計算式は、実は一つの値が変わると、そのセルに関係ある式以外も、全ての式が再計算されます。
なので、もし大量にVLOOKUPの式が残ったまま、などという状況だと、一つセルをいじっただけで、毎回再計算を待つことになります。

エクセルに詳しい方だと、自動計算をOFFにして、全ての手作業を終えてから、手動で一回再計算する場合もあります。エクセルの中に計算式を埋め込んだままにしておく、というのはこれほど気をつけなければいけないことなのです。避けられるなら、割けるのがおすすめです。

その他のツールやシステムによる次工程が存在する場合

次工程のデータの取り込み方がどうなっているのかをよく確認しましょう。列の順番が合っていればヘッダの文言は問わない場合、ヘッダの値が合っていれば列の順番は問わない場合があります。

出力形式もcsv、タブ区切り、スペース区切りがあります。気をつけましょう。エクセルとして加工してからテキストで出力する場合、0から始まる数値の取り扱いに気をつけましょう。先頭の0を残してテキストに保存するためには、セルの書式設定を文字列に変換してから保存する必要があります。

出力データを得ること以外が目的のプログラムの場合

VBAは入力データを加工して出力するだけが能ではありません。例えばユーザーがエクセルデータを手動で更新する場合、その入力結果をチェックするツールなどが考えられます。

ユーザーの入力結果をチェックするためのツール

たとえば、勤務実績の入力の際に、17:00とすべき所を17:ooになっていないか、など入力の間違いを検知するツールなどが該当します。

その際、間違っている旨をメッセージボックスで表示させるのか、メッセージを出さずに自動で17:00に変換するのか、メッセージボックスを出した上で未入力の状態に戻すのか、いろいろな対応が考えられます。ユーザーに聞き取りするだけで無く、自分でも使ってみましょう。

よかれと思って出したメッセージボックスによる間違い内容の指摘も試しに自分で使ってみると、入力間違いを指摘するたびにメッセージボックスが表示され、いちいち右上のバツを押してメッセージボックスの表示を終えるのが煩わしいという事に気づく、と言うようなことがあります。

未入力の状態に戻してセルの色を変える、正しい値を入れると色が元に戻る、と言うような機能の方が良い、など気づきがあります。このようによかれと思って実装した機能も余計なお世話だったりすることもあるので、テストの意味だけでなく使い勝手の確認という面からも、自分で実際に使ってみましょう。

開発案件の目的を深掘りして完成度を高める方法まとめ

  • 出力物が完成品、後工程がある場合、データのチェックが目的など目的に応じて求められる挙動は異なる
  • 単に頼まれた機能を実装するだけでなく、目的や実際に使われる場面を深掘りすることでツールの完成度が高まる

以上、出力データについて深掘りするだけでいろいろと出てきます。他にも

  • 保存場所はユーザーに選択させるのか/勝手にどこかに保存するのか
  • 元データは残すのか/不要なのか
  • メール配信するのか/メールにデータを添付して送信する直前で止めるのか

と言った出力データをどのように提供するのか、と言った事も考えられます。

単に頼まれた自動化を実現するツールを作成するのでは無く、どうすれば使い勝手の良いツールにできるか深掘りしてみましょう。深掘りの過程で気づいた機能については、要求仕様書などどこかに記録を残しておくことで、後々のトラブルを防ぐことも可能です。要求仕様書については関連記事のリンクをご参照下さい。

<関連記事>