ゆんの業務改善ブログ

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

VBA 自動化ツールの目的を深掘りして、完成度を高める②(入力データ/ユーザーインターフェース編)

自動化ツールを作成するに当たり、その目的を深掘りすることによって完成度を高めることができます。VBA 自動化ツールの目的を深掘りして、完成度を高める①(出力データ編)では出力物に解説しました。今回は、入力データ/ユーザーインターフェースに着目していきます。

f:id:mutable_yun:20200301163247p:plain

目次

自動化ツールの目的を深掘りして、完成度を高める

入力データを深掘りする

VBAによるプログラムは、一部を除き、何かのデータを入力し、加工して、出力する、と言う機能を持っています。プロシジャが組み合わさってできた大きな関数のようなイメージで問題ありません。

その入力部分をどう取り扱うか、と言う事を考えることにより、ユーザーフレンドリーなツールに仕上げていくことができます。具体的にどういった事が考えられるのかを見ていきましょう。

どのようなデータを取り込むのか

まず、どのようなデータを取り込むのかを確認しましょう。ファイルの形式がcsvやタブ区切りなどのテキストなら、エクセル上に展開するのでは無く、内部的に開いて取り込む事で時間短縮につながります。

エクセル上では無く内部的にテキストデータを取り込む方法はVBAで作ったマクロの高速化②改 内部的に開く、閉じる ⇒ 実務作業の具体的手順(csvファイルとして用意しておき、集約するという事前作業)に記載しています。

あと、同時に確認しておくべきは、前工程が手作業によるモノかツールが出力したデータなのか、基幹システムなどからダウンロードしたデータなのかです。入力データがツールの出力物や基幹システムの場合はフォーマットの突然の変更を心配する必要が無いため、プログラムしやすいです。

一方、人が作業したデータを入力データとして取り込むときは要注意です。要注意事項としては下記が挙げられます。

  • 行や列がまちまちで、毎回異なる

f:id:mutable_yun:20191128235540j:plain
仕事の方法が定まっていなかったり、ルーチン化できていない人の出力結果によく見られます。こういう人は自動化の経験が無く、手作業するにしても毎回似たようなことを別の方法でやっているケースが見られ、その作業の本質が分かっていない場合があるため、要注意です。

前工程の人とコミュニケーションをとり、出力結果の質を安定させる一方、ツールとしても最大限エラーをトラップできるように配慮しましょう。

例えば、ヘッダの開始行が毎回違うのであれば、その行数は定数で定義するのでは無く、変数として宣言しておいて、繰り返し構文を使って上から順に見ていき、初めて空白でないセルがあったらそこをヘッダ行にする、と言った具合です。

このような仕事の進め方の人はルールに従わず、その場その場の思いつきで作業を進めるため、自分の為のメモ書きをデータの中に残していたりすることもあります。

データの最終行や最終列がいつもと違う場合は、入力データの確認をユーザーに促して、保存せずに閉じてマクロを終了する、と言うのも傷口を広げない手段として考えられます。

  • 表記の揺れ、予期せぬデータ書式

上述の人の特徴によくみられる出力結果です。価格や数量と言った数値の入力が求められているところに「未定」などの文字列を入れたりします。

初めからすべてを想定することはできないので、新たなエラーが発生する度に対応を施していきましょう。前述の通り、この前行程を自動化するのが根本的な対策です。

しかし、この人たちは決まったルールでやっていない行き当たりばったりに属することが多いので、業務の内容を聞いてもなかなか本質にたどり着けない可能性があります。

目の前の表記の揺れ対策をしつつ、長期目線で前工程の自動化にも取り組めれば望ましいと言えるでしょう。

入力データの取り込み方

大きく分けてユーザーに選択してもらう方法と、自動で取得する方法があります。取り込むべきデータのファイル名や保存場所が決まっていない場合、個人的に作るツールの場合はユーザーに選択してもらう方式が多いです。

一方、業務の一環として、毎日決まった場所にダウンロードされるファイルなどはいちいちユーザーが選択しなくても済むように設計すべきです。フォルダ名が日付によって異なる場合なども、ファイル名の付け方をルール決めし、エクセル側ではDateSerial関数を使うなどして、ユーザーを極力煩わせない工夫をしましょう。

なおDateSerial関数の使い方に関しては、VBA Dateserial関数とFormat関数を使って日付を自在に操るで詳しく解説していますので、参考にしてみて下さい。

入力データのチェック

前工程が人の手作業の場合、行や列の順番がずれていたり、ヘッダ部分の名称が異なったりする事があります。また、ユーザーに入力ファイルを選択してもらう場合は、選択するファイルを誤ってしまうことも考えられます。

そのような場合に備え、例えばヘッダ部分のA1の値は「通し番号」という文字列かどうかを確認してから、本編の作業をする、などの工夫をすると良いでしょう。

その時、作業途中のファイルは保存せずに閉じて、何もする前の状態に戻るようにするのがユーザーフレンドリーです。誤ったファイルが開きっぱなしは良くないですね。こういった細かいところへの気遣いの積み重ねが使いやすさ、ツールの完成度に影響してきます。周囲の評価も変わってきます。人は便利な道具が便利な事には気づきませんが、面倒なことや、思わぬエラーが出ると、まず、開発者を疑います。地道ですが、エラーとユーザビリティを挙げて、つまらぬエラーでツールと自分の評価を下げないようにしましょう。

ユーザーインターフェースを深掘りする

ユーザーインターフェースとはツールを使うユーザーと、プログラムを実行するコンピュータの間を媒介する存在です。Windowsのいろいろなボタンや入力できる場所がユーザーインターフェースの例です。

見た目に分かりやすいインターフェースなので、グラフィック ユーザー インターフェースと言います。GUIです。VBAでは、ユーザーフォームと呼ばれるGUIを簡単に設計することができます。あまりに簡単なので、つい配慮を忘れてしまわないよう、留意点について確認していきましょう。

ユーザーフォームのデザイン

高齢化が進んでいる職場では文字を大きくしましょう。フォントもシンプルなMeiryo UIなど読みやすいものを選択しましょう。ボタンも大きくして、押し間違えを防ぐようにすると親切です。

ユーザーフォームの使い勝手

細かい点ですが、TabIndexを意識しましょう。シンプルな例として下のようなユーザーフォームを考えます。

f:id:mutable_yun:20190920190622p:plain
シンプルなユーザーフォーム

次に、表示⇒プロパティウィンドウ と選択してプロパティウィンドウを表示させます。テキストボックスをクリックして選択してみて下さい。すると、TabIndexの所に0や1といった表示がされます。これはユーザーフォームそのものを除く、そこに乗っているモノの通し番号です。

あなたもネットショッピングや会員登録の時にテキストボックスに入力し、次のテキストボックスに移るためにTabを押すことが事はありますよね?いちいちマウスで次のテキストボックスをクリックするために右手をキーボードから離すのは面倒なものです。

VBAのユーザーフォームでは、Tabを押すと次のTabIndexにカーソルが移ります。テキストボックスやボタンを追加する時は、ユーザーがTabを押すことによってどのコントロールにフォーカスが移る事を期待しているのかを考えて、その順になるようにTabIndexの番号を割り振るようにしましょう。順番になっていても気づきませんが、期待する順にフォーカスが移らないと途端にユーザーが違和感を感じてしまうことになります。

自動化ツールの目的を深掘りして、完成度を高める②まとめ

以上、目的を深掘りしユーザー目線を心がけることでツールの完成度を高めるというお話でした。プロのエンジニアからすれば当然のことかもしれませんが、我々もこのような視点を持つことでより価値の高い提供を追求するようにしましょう。この記事の内容をまとめます。

  • 取り込むデータの特性に応じた設計を行う
  • 表記の揺れに対応しつつ、前工程の精度を高める根本対策も並行して検討する
  • 入力データのチェックを行う
  • 大きなボタンや文字を採用する、Tabでカーソルを順に移動できるようにするなど、UIも使い勝手にこだわる

下の関連記事も参考にして、便利ツールの完成度向上を図りましょう!

<関連記事>