ツール化の工夫(Excelでバーコード_6)

Excelでバーコード表示に挑戦する連載の6回目です。前回の記事はコチラです。

hirocom777.hatenadiary.org

前回はアルファベットの大文字、小文字の区別をバーコードで表現する方法として、バーコード規格の1つであるコード128をご紹介しました。

でも、この規格は少し複雑なんですよね。全部の機能に対応するにはちょっと骨が折れます。今回は、そこを何とか工夫してツール化してみようと思います。

3つのスタートコード

なぜコード128がコード39に比べて複雑なのかというと、色々な文字の表記に対応しているからです。中でも複雑なのが複数のコード体系があるということです。前回もご紹介した通りコード128には「CODE-A」、「CODE-B」、「CODE-C」の3つのスタートコードがあって、それぞのコードと文字の割り当て方が異なります。また、バーコードのデータ内でスタートコードを挿入すると、途中で文字の割り当て方を変更できます。これらの機能をすべて盛り込むと大変な内容になってしまいます。

ここで改めて、3つのコード体系の特徴をおさらいしてみようと思います。

  • CODE-A

    アルファベット、数字、記号に加えて改行コードなどの制御コードが使用できる。アルファベットは大文字のみ。

  • CODE-B

    制御コード以外はCODE-Aとほぼ同じ文字を使用できる。制御コードの代わりにアルファベットの小文字が使用可能なる。

  • CODE-C

    各コードに「00」~「99」までの2桁の数値が割り当てられる。数字のみで構成されているデータの場合、コンパクトなバーコードで表示できる。

以上を整理してみると「CODE-B」のみに絞ってツール化を進めていくのがよさそうです。「CODE-A」で使用可能な制御コードですが、単純に情報を伝えるだならはほとんど出番はありません。「CODE-C」では数字を効率的に表現できますが、「CODE-B」でも効率が悪くなりますが数字の表現は可能です。「CODE-B」ならば、アルファベットの大文字、小文字を含めて幅い広い内容をバーコードで表現できますね。「CODE-B」のみでツール化してみようと思います。

バーコード化の手順

コード39では「*」で挟んだ文字データを対応するコードに変換していけば良かったのですが、コード128では少し複雑になります。以下に手順を整理していきましょう。

  • スタートコード

    スタートコードは「CODE-B」に固定です。割り当てられている番号は104、バーと間隔の太さパターンは2,1,1,2,1,4となります。

  • 文字データ

    続いて表記される文字データについて、該当する太さパターンで表記します。あわせてそれぞれの文字データに割り当てられる番号も記録します。

  • チェックデジット

    スタートコードと文字データに割り当てられている番号を使って、チェックデジットを計算して表記します。計算方法(モジュラス103)は前回ご紹介した通りです。

  • ストップコード

    最後にストップコードを表記します。表記内容は前回ご紹介した通り固定です。

コード128はチェックデジットを計算する必要があります。文字データからバーと間隔の太さパターンと同時に、割り当てられた番号を取得できなければいけません。また、算出されたチェックデジットの番号からもバーと間隔の太さパターンを取得できなければいけません。この部分が本ツールの肝ですね。

実際のツール

そんな訳で作ったツールが以下(BarCode128.xlsm)になります。

drive.google.com

使い方は以前作成したコード39のバーコードを作成、表示するツール(BarCode39.xlsm)とほぼ同じです。

hirocom777.hatenadiary.org

組み込みたい場合は、バーコードを表示させたいシート内で以下のプロシージャを一度実行してください。(実行後は削除して結構です。)

'バーコードのリンク作成
Sub MakeBarCodeLink()
  BarCode128.Range("BAR_CODE").Copy
  Me.Pictures.Paste(Link:=True).Select
End Sub

入力された値との連携は、バーコードを表示しようとしているシートに以下のコードを記述で可能です(今回の例ではセルに「INPUT」と名前が付けられています)。

'入力との連携
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = Me.Range("INPUT").Address Then
    BarCode128.Range("TEXT").Value = Target.Text
  End If
End Sub

次回はコードの解説

いかがでしょうか。これでコード128のバーコードをExcel上で使うことができます。次回は本ツールのコードの解説です。お楽しみに!!

hirocom777.hatenadiary.org

Excelでバーコード表示に挑戦する連載はコチラから