Mutable_Yunの業務改善ブログ

業務改善や生産性向上のブログです。自動化の手段として、VBAやRPAの勉強に役立つ解説をしています。

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

自動化ツールの目的を深掘りする、の第2弾です。

自動化ツールを作成するに当たり、その目的を深掘りすることによって完成度を高めることができる、と言う事をVBA 自動化ツールの目的を深掘りして、完成度を高める①(出力データ編)で解説しました。

今回はその続編、入力データ/ユーザーインターフェース編です。
この記事は初級~初段です。
レベルについてはExcel VBAの実力(レベル)を定義してみる 初心者~三段をご参照ください。


目次

入力データを深掘りする

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

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

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

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

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

あと、同時に確認しておくべきは、前工程が手作業によるモノかツールが出力したモノなのか、基幹システムなどからダウンロードしたモノなのかです。

入力データがツールの出力物や基幹システムの場合はフォーマットの突然の変更を心配する必要が無いため、プログラムしやすいです。

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

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

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

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

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

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

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

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

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

初めからすべてを想定することはできないので、新たなエラーが発生する度に対応を施していきましょう。

前述の通り、この前行程を自動化するのが根本的な対策です。

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

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

入力データの取り込み方

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

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

入力データのチェック

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

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

その時、作業途中のファイルは保存せずに閉じて、何もする前の状態に戻るようにするのがユーザーフレンドリーです。誤ったファイルが開きっぱなしは良くないですね。

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

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

見た目に分かりやすいインターフェースなので、グラフィック ユーザー インターフェースと言います。GUIです。VBAでは、ユーザーフォームと呼ばれるGUIを簡単に設計することができます。

あまりに簡単なので、つい配慮を忘れてしまわないよう、留意点について確認していきましょう。

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

高齢化が進んでいる職場では文字を大きくしましょう。フォントもシンプルなMeiryo UIなど読みやすいものを選択しましょう。

ボタンも大きくして、押し間違えを防ぐようにすると親切です。

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

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

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

次に、表示⇒プロパティウィンドウ と選択してプロパティウィンドウを表示させます。
テキストボックスをクリックして選択してみて下さい。

すると、TabIndexの所に0や1といった表示がされると思います。
これはユーザーフォームそのものを除く、そこに乗っているモノの通し番号です。

みなさん、ネットショッピングや会員登録の時にテキストボックスに入力し、次のテキストボックスに移るためにTabを押下する事はありますよね?

VBAのユーザーフォームでは、Tabを押すと次のTabIndexにカーソルが移ります。後から必要に迫られてテキストボックスやボタンを追加したときは、ユーザーが入力を期待する順のTabIndexになっているかどうか確認しておきましょう。

順番になっていても何も思わないが、順番になっていないと違和感がある、という事になります。


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