前回の続きです。
各項目をチェックする機能を追加します。
『商品コード』は数字の項目です。かつ、JANコードは8桁か13桁です。
- 数字である
- 桁数が8か13桁である
- チェックデジットが合っている
以上のチェックを順番に行うようにしました。
「数字である」は、「isNumeric」関数を使用しました。
「桁数が8か13桁である」は、「Len」関数または、数値の範囲でチェックするようにしました。
「チェックデジットが合っている」は、独自の関数を用意し、チェックデジットが合っているかをチェックするようにしました。
入力されたデータが全角でも半角に変換する関数「StrConv」を使用しました。エクセルのシート上でも「データの入力規則」で半角数字しか入力できないようにできますが、シートに入力する方が社外の方なので、余計な縛りは無いようにしています。
さらに問題となったのが、「0000049400403」と入力された場合です。セルの表示形式が既定の状態であれば、「49400403」になるのですが、セルの表示形式が文字列の場合には、必要のない先頭の「00000」が残ってしまいます。仕方がないので、桁数が13桁で且つ先頭が「00000」の場合は6文字目から13文字目までを「Mid」関数で取り出すことにしました。「Right」関数でも同じことが出来ます。もちろん、「数字である」チェックができてからです。
『商品名(日本語)』は全角の項目です。かつ、40桁以内で省略不可です。
- 空白ではない
- 桁数が40桁以内である
以上のチェックを順番に行うようにしました。
「空白ではない」は、セルから読み取ったデータが空白(変数 = “”)であったらエラーとしました。
「桁数が40桁以内である」は、エラーにしていません。文字数が40桁を超えている場合は、先頭の40桁のみ使用することにしました。ここで問題となったのは、
1)「チョコレート80g」と入力された場合です。「80g」が半角になっているところです。これは「StrConv」関数で全角に変換しています。
2)「チョコレート△△80g」と入力された場合です。「△」は空白を表しています。これは「Replace」関数で空白を削除しています。ついでに、商品名(文字列)の先頭や末尾の空白も削除してくれます。先頭と末尾の空白を取り除くだけであれば「Trim」関数を使用します。
3)「カカオ70△30g」など商品名「カカオ70」と規格「30g」の間の空白を自動的に取り除くと、「カカオ7030g」となってしまいます。つまり、カカオが7030gと思われてしまうと問題です。元々、空白なしで入力された場合も同じです。文脈までは判定できないので、このまま対応無しとしました。
その他にも「商品名(カタカナ)」、「分類コード」などのチェックしていますが、ここでは割愛します。
いろいろな入力チェック方法を試しました。しかし、チェックしすぎても、エラーの修正(ターンアラウンド)に時間がかかり、データの登録が遅くなってしまいます。結論としては、後で訂正できるのだから、いい塩梅で登録できていれば良いのではなかと思います。その点、人は、良い加減で調整できます。人って凄い!
ここで紹介した仕組みは、現在使用されていません。何時でも利用できるようにインターネットを利用したブラウザからの登録システム(ASP)に移行されました。チェックする方法は、引き継いで使用されている様です。
では、また。