トップページ「ノート」 > EXCELの関数でバーコードCODE128を作る

EXCELの関数でバーコードCODE128を作る

2025/02/19


導入

故あってジャンクなバーコードリーダーが手元に転がり込んできた。折角ならと活用する為にいろいろやった。

1.導入と既知の問題

バーコードの規格の一つに「CODE128」というものがある。
可変長のASCII文字をエンコードできるものでASCIIコードの128文字を全てバーコード化できる。

Libre Barcode 128」等のフリーフォントも存在し、バーコード化したい文字列を入力してフォントを指定するだけで使用することができる。
・・・ならどれだけ楽だったろうか。

結論から言うと、単純なフォント指定によりCODE128に変換したバーコードには「スタートコード」「ストップコード」「チェックデジット」が足りないのである。

世にあるCode128フォントはすべて同じ問題を抱えており、どのフォントを使用してもバーコードは読み取ることができない。
これは仕様上の問題であり、フォントのみを使用してバーコードを作成する限り避けることはできない。
入力文字列に対し、「スタートコード」「ストップコード」「チェックデジット」の3つを付与して初めて読み取り可能なバーコードが完成するのである。

2.要求される物

スタートコードはA,B,Cの3種類が存在し、それぞれ表す事ができる文字が異なるので用途に応じて適切なものを選択する。
Code Set Aは英大文字、数字、一部の記号及び、ASCII制御文字が使用可能。
Code Set Bは英大小文字、数字及び、全ての記号が使用可能。
Code Set Cは数字のみ使用可能だが、倍の密度でエンコード可能。
一般的な用途であればCode Set Bを指定すれば足りるだろう。

ストップコードは1種類しか存在しないのでそれを指定する。

これらのコードは、通常のASCIIキーボードでは入力できないが、EXCEL上では「UNICHAR()」関数を使用し文字コードを直接指定することで表示することができる。

チェックデジットはスタートコード及びキャラクタ部の値を「モジュラス103」方式で計算し求める為、入力データによって異なる。
つまり、一筋縄では行かないのである。

3.現行の方式とその問題

EXCELでは「Microsoft BarCode Control」が使用できるので簡単にバーコードを得ることができるが、これには欠点がある。

1.バージョンによってはAccessがインストールされている必要がある。
2.作成したバーコードはコントロールオブジェクトの為セルとは独立している。
3.データの参照先をオブジェクト毎に個別で指定する必要があり、作業量が多い。
特に2番が致命的で、レイアウト変更時に位置がずれてしまったり、表のコピー&ペーストの際に二重になったりする等のトラブルを引き起こす。

4.解決方法を考える

フォントによる表示をする為には、セル内に文字列として表示されなければならない。
その為には入力に対して、スタートコード、ストップコード及び、適切なチェックデジットを付与する関数が必要である。
商用ソフトウェアにはそのような機能を持った製品が存在するが、業務用途でありそれなりのお値段なので、ちょっとしたお遊びで購入するのは気が引ける。

EXCEL VBAにはユーザー定義関数を作成する機能があり、ユーザが自分で関数を作成することができる。なら自分で作ればいい。

どうせ作るならちゃんとした物にしようと思ったそれなりに満足いくものが出来たと思う。

余談

ジャンク品の活用の為に作成したライブラリだが、開発の為に液晶上のバーコードを読み取り可能なバーコードスキャナーを購入した為、結局その個体はもう使用していない。


「ノート」へ戻る

トップページへ戻る