CODE128の生成(チェックデジットやスタート・ストップはライブラリが自動計算)

目次
CODE128の生成(チェックデジットやスタート・ストップはライブラリが自動計算)
CODE128の生成(チェックデジットやスタート・ストップはライブラリが自動計算)
@ creator • Click to Play Video Inline
🎵 CODE128の生成(チェックデジットやスタート・ストップはライブラリが自動計算)
CODE128バーコード作成で失敗しない!エクセル手順と読み取り対策

物流センターの荷札ラベルから製造ラインの工程管理、医療現場の検体ラベルに至るまで、サプライチェーンの至る所で利用されている「CODE128」。数字しか扱えないJANコードや表現文字数が限られるCODE39と異なり、アスキー(ASCII)コード全128文字(英大文字・小文字・数字・記号・制御文字)を高密度にエンコードできる汎用性の高さが最大の特徴です。

しかし、業務改善のために「エクセルでバーコードを自作しよう」と試みた現場担当者が、ほぼ確実に突き当たる壁があります。「専用フォントをダウンロードしてセルに適用したのに、ハンディスキャナーで全く読み取れない」というトラブルです。CODE128は単に文字をフォント変換するだけでは機能せず、スタートコード・ストップコードの付与「モジュロ103」によるチェックデジット計算が不可欠となります。本稿では、現場で失敗しないCODE128バーコード作成の全手順と、2026年現在の現場で即座に役立つ実装ノウハウを徹底解説します。

📌 【この記事の重要ポイントまとめ】
  • 要点1:CODE128はフォントを当てるだけでは読み取れず、独自の「チェックデジット(モジュロ103)」と「スタート・ストップコード」の計算合成が必須。
  • 要点2:エクセル作成ではVBAマクロによる自動計算ルーチン導入が最も確実で、数字のみを扱うなら「キャラクタセットC」で横幅を約半分に圧縮可能。
  • 要点3:現場で読み取れない原因の9割は「左右の余白(クワイエットゾーン)不足」「計算ミス」「プリンター解像度とバー幅の不整合」に集中している。

【基本構造】CODE128の仕組みとキャラクタセットA・B・Cの使い分け

CODE128の作成に着手する前に、まず押さえておくべきはその内部構造です。CODE128は、1文字あたり「6本のバーとスペース(合計11モジュール)」で構成されており、バーコードの両端を挟むスタートコード、データキャラクタ群、チェックデジット、そしてストップコード(ストップコードのみ13モジュール)で1つのシンボルを形成します。

CODE128には、表現したいデータ内容に応じて切り替える3種類のキャラクタセット(A・B・C)が用意されています。この仕様を正しく理解していなければ、最適なバーコードを作成できません。

  • キャラクタセットA:英大文字、数字、標準記号に加え、TABやCR(改行)、LFなどの「制御文字(ASCII 00〜95)」を表現可能。工場の自動制御機器やFA現場の制御コマンド送信に重用されます。
  • キャラクタセットB:英大文字・英小文字、数字、通常記号、制御コードDEL(ASCII 32〜127)を網羅。一般的なシリアルナンバーや英数字混在コードを作成する際の標準的な選択肢です。
  • キャラクタセットC:「00」から「99」までの2桁の数字を1キャラクタ(11モジュール)で表現する特殊セット。数字のみの連続データを印字する場合、他のバーコード規格と比較して約半分の横幅で極めて高密度に印刷できる圧倒的なメリットがあります。

さらに、CODE128はシンボルの途中でキャラクタセットを動的に切り替える「コード切替文字(CODE A / CODE B / CODE C)」や、1文字だけ別セットを呼び出す「SHIFT文字」を備えており、極めて柔軟なデータ表現が可能です。

当時のメディア報道・掲載写真
【検証資料 1】当時のメディア報道・掲載写真(出典:storage.qr.c-cloud.co.jp)

徹底比較|CODE39とCODE128の違い比較・GS1-128との規格違い

現場のシステム刷新やラベル内製化において、最も議論に上がるのが「CODE39との違い」および「GS1-128との混同」です。それぞれの規格特性を客観的な指標で比較しました。

項目詳細・数値データ一般的な基準・相場(CODE39比)編集部の見解・評価
表現可能文字種ASCII全128文字(英大小・数字・記号・制御文字)43文字(英大文字・数字・記号7種)小文字や制御コードを扱える点でCODE128が圧倒的に優位。
データ記録密度(寸法)数字10桁時:約25〜35mm(セットC利用時)数字10桁時:約55〜70mm(同モジュール幅比)CODE128はCODE39の約50〜60%の省スペース化を実現可能。
チェックデジット仕様規格上必須(モジュロ103方式)任意(モジュロ43方式 / 省略例多数)CODE128は読み取り誤り率が極めて低く、誤認識事故を防止。
GS1規格との関連性GS1-128の基礎物理層として採用GS1国際標準の対象外GS1-128はCODE128に「FNC1」識別子を追加した上位規格。

上記の通り、「GS1-128との規格違い」について補足すると、物理的なバーの並びは全く同一のCODE128技術を使用しています。決定的な違いは、バーコードの先頭に「FNC1(ファンクション1)」と呼ばれる特殊キャラクタが挿入されている点と、それに続くデータが「(01)商品コード」「(10)ロット番号」「(17)有効期限」といったGS1アプリケーション識別子(AI)フォーマットに厳密に準拠しているかどうかという点にあります。

【現場で失敗しない】CODE128 エクセル作成手順と専用フォントの導入

エクセル単体でラベル印刷用バーコード作成を行う場合、一般的な方法は「CODE128専用フォントダウンロード」を行い、計算式やマクロでエンコード文字列を出力してフォントを適用するアプローチです。

ステップ1:専用TrueTypeフォント(TTF)の入手とインストール

GitHubやオープンソースサイト(例:Grandite Code 128フォント、Libre Barcode 128等)からCODE128用TTFファイルをダウンロードし、Windowsの「フォント設定」へドラッグ&ドロップしてインストールします。

ステップ2:なぜ文字入力だけでは表示できないのか?

CODE39であれば前後に「*(アスタリスク)」を付けるだけでフォント表示が可能でしたが、CODE128では「ABC-123」と入力してフォントを変えても絶対にスキャナーで読み取れません。バーコードリーダーが認識するためには、以下の文字列構造を厳密に組み立てる必要があります。

【CODE128の構造】:[スタートコード] + [実データ文字列] + [チェックデジット文字] + [ストップコード]

ステップ3:Excel VBAバーコード自動生成マクロの実装

実務では、セルに関数を埋め込むよりもVBA(マクロ)を用いてエンコード処理を関数化するのが定石です。以下はキャラクタセットBを基準としたモジュロ103計算ルーチンの基本構造です。

 Function Encode_Code128B(SourceStr As String) As String Dim i As Long, CharVal As Long, CheckSum As Long Dim StartChar As String, StopChar As String Dim CheckDigitChar As String If Len(SourceStr) = 0 Then Exit Function ' スタートコードBのキャラクタ値は104 CheckSum = 104 For i = 1 To Len(SourceStr) CharVal = Asc(Mid(SourceStr, i, 1)) - 32 CheckSum = CheckSum + (CharVal * i) Next i ' モジュロ103による余り算出 CharVal = CheckSum Mod 103 ' チェックデジットの文字コード変換処理(フォントのマッピングテーブルに準拠) If CharVal < 95 Then CheckDigitChar = Chr(CharVal + 32) Else CheckDigitChar = Chr(CharVal + 100) ' フォント定義に応じたオフセット End If ' スタートB(Chr(204)) + 入力文字 + チェックデジット + ストップ(Chr(206)) Encode_Code128B = Chr(204) & SourceStr & CheckDigitChar & Chr(206) End Function 

このユーザー定義関数を標準モジュールに登録し、セル上で =Encode_Code128B(A2) と呼び出して出力された文字列に「CODE128フォント」を指定することで、初めて実用に耐えるバーコードが印字されます。

活動歴および当時の関連ビジュアル記録
【検証資料 2】活動歴および当時の関連ビジュアル記録(出典:takablo-y.com)

開発環境とWebツール|Python生成ライブラリと無料オンラインツールの活用

大量の製品ラベル発行やWebシステムとの連携においては、エクセル以外の選択肢も視野に入ります。

1. Pythonバーコード生成ライブラリ(python-barcode / treepoem)

サーバーサイドや一括画像書き出しを行いたい場合、Pythonの python-barcode ライブラリを利用するのが最も堅牢です。SVGや高解像度PNGとしてベクター・ラスター両形式でロスなく出力できます。

 import barcode from barcode.writer import ImageWriter code128 = barcode.get_barcode_class('code128') bar = code128('PKG-2026-X990', writer=ImageWriter()) # PNG画像として保存(DPI指定で高精細印刷に対応) bar.save('barcode_output', options={'dpi': 300, 'module_width': 0.3}) 

2. CODE128 無料オンライン作成ツールの選び方とリスク管理

少量・単発のラベル印刷であれば、ブラウザ上で即座にSVGやPNGを生成できる無料Webサービスも有用です。ただし、機密性の高いロット番号、個人情報に直結するID、社内機密シリアルコードを外部サーバーに送信して生成する行為は情報セキュリティ上のリスクを伴います。企業ユースでは、ブラウザのJavaScriptのみで完結しサーバーへデータ送信を行わないスタンドアロン型ツールか、前述の社内VBA・Python環境での内製生成を強く推奨します。

【トラブル解決】バーコード読み取れない原因と対処法|チェックデジット計算の盲点

「画面上ではきれいに見えているのに、なぜかリーダーが『ピッ』と鳴らない」。この現象の背後には、バーコード工学特有の物理的・論理的原因が存在します。

原因1:チェックデジット計算方法(モジュロ103)の不整合

CODE128のチェックデジットは、以下の数式で厳密に計算されます。

【計算式】:(スタートコード値 + Σ(各キャラクタの値 × その文字の位置番号)) ÷ 103 の「余り」

フォントの種類によって、算出した「余り(0〜102)」をどのASCII文字に割り当てているか(マッピング仕様)が異なります。異なるフォント開発者の変換ロジックを流用すると、チェックデジット文字が別のグリフとして印字され、リーダー側でパリティエラー判定となり読み取りを拒否されます。

原因2:左右のクワイエットゾーン(マージン)不足

バーコードの両端には、リーダーがシンボルの開始と終了を光学的に識別するための「クワイエットゾーン(無印字領域)」が必要です。JIS/ISO規格上、最小モジュール幅の10倍以上、または2.54mm以上の余白を左右に必ず確保しなければなりません。エクセルのセル枠いっぱいにバーコードを拡大印字したり、ラベルの縁ギリギリに印刷すると読み取り成功率は著しく低下します。

原因3:プリンターの解像度とバー幅のアンチエイリアス(にじみ)

オフィス用インクジェットプリンターや低解像度サーマルプリンターで出力する際、エクセルのフォント描画エンジンが文字を滑らかに見せようとして「アンチエイリアス(グレーのぼかし)」をかけてしまうことがあります。これにより、バーの境界線が曖昧になり、光学センサーがモジュール幅を誤判定します。印刷時は白黒2値(アンチエイリアス無効)かつプリンターの解像度(203dpi / 300dpi / 600dpi)に合わせた整数倍のモジュール幅設計が必須です。

公の場での発言・インタビュー報道記録
【検証資料 3】公の場での発言・インタビュー報道記録(出典:storage.qr.c-cloud.co.jp)

【実態検証】現場目線で見えたリアルとシャドーITの落とし穴

物流現場や製造ラインのDX支援を行っている専門チームへの取材によると、現場主導のバーコード内製化には特有の組織リスクが潜んでいます。

「現場のリーダーが好意で作成した『エクセルVBAのバーコード発行シート』が、数年後に作成者の異動や退職によってブラックボックス化する事例が後を絶ちません。特にキャラクタセットCの切り替えロジックや奇数桁の例外処理が正しく記述されておらず、桁数が増えた瞬間に読み取り不能な不良ラベルが数千枚出荷されて大問題になったケースもあります」(物流システムインテグレーター・エンジニアの証言)。

現場の即応性を高めるためのエクセル活用は極めて有益である一方、組織全体のガバナンスとテスト検証体制を確立しなければ、現場の善意が「シャドーIT」化して業務停止リスクを招くという二面性を忘れてはなりません。

【プロの結論】おすすめできる人・慎重になるべき人の判断基準

CODE128バーコードの内製化・運用にあたり、どの手法を選択すべきかの明確な判断基準を提示します。

【内製・エクセルVBA運用が向いているケース】

  • 社内限定の保管棚ラベルや資産管理ラベルなど、外部取引先に直接流通しない用途。
  • 発行件数が1日数枚〜数百枚程度であり、マクロの保守担当者が社内に常駐している。
  • コストをかけず、既存のOffice環境だけで素早くプロトタイプを立ち上げたい。

【専用ラベル発行ソフト・SaaS導入を強く推奨するケース】

  • 出荷先からGS1-128や流通ラベルの厳密なコンプライアンス(印字品質グレード検査)を求められる取引。
  • 1日あたり数千枚〜数万枚の自動連続発行を行い、1枚の印字不良も許されない基幹ライン。
  • 社内にVBAやプログラミングの保守ノウハウがなく、属人化による障害発生を回避したい現場。

【code128 バー コード 作成】に関するよくある質問(FAQ)

Q1:エクセルでCODE128専用フォントを割り当てたのにスキャナーが反応しません。なぜですか?
A1:CODE128は文字データを直接バーに置き換えるだけでは成立しません。スタートコード、モジュロ103方式のチェックデジット、ストップコードを計算して付与した特殊な文字列(エンコード済み文字列)に対してフォントを適用する必要があります。

Q2:キャラクタセットCを使う際、データが奇数桁の場合はどうすればよいですか?
A2:キャラクタセットCは2桁の数字をペアで処理するため、奇数桁の場合は「先頭または末尾に0を付加して偶数桁にする」か、奇数になる最後の1桁の直前で「CODE B(またはCODE A)への切替キャラクタ」を挿入して1文字だけ別セットでエンコードする処理が必要です。

Q3:エクセルの標準機能「Microsoft BarCode Control」を使うのは非推奨ですか?
A3:ActiveXコンポーネントである「Microsoft BarCode Control」は、Accessがインストールされている環境等で手軽に利用できますが、64bit版Officeとの互換性問題や、エクセルのバージョンアップに伴うレイアウト崩れ・印刷ズレの報告が多いため、長期安定稼働を重視する業務現場ではVBA+フォント方式や画像生成方式が推奨されます。

Q4:バーコードが小さすぎて読み取れません。セルの拡大縮小でサイズ変更しても大丈夫ですか?
A4:フォントサイズを変更して拡大すること自体は可能ですが、フォントの拡大縮小によってバーの太さの比率(モジュール比)が崩れたり、プリンターのドット解像度と合わずに線が滲むリスクがあります。必ずテスト印刷を行い、実機のハンディスキャナーで複数角度から読み取り検証を行ってください。

まとめ:現場のDXを止めないための運用ルール

CODE128は、高い情報密度とASCII全文字への対応力を兼ね備えた、現代の産業界において極めて完成度の高いバーコード規格です。エクセルやVBA、Pythonを活用すれば、高価な専用システムを導入せずとも高品質なバーコード発行体制を低コストで構築できます。

成否を分けるポイントは、「モジュロ103チェックデジットの正確な算出」「キャラクタセットA・B・Cの適切な選定」「十分なクワイエットゾーンの確保」という3原則を徹底することです。自社の業務規模やリスク許容度を見極め、ツールの自作と専用ソリューションの活用を適切に切り分けることが、トラブルのない現場DXを実現する最短ルートとなります。 (出典: code128 バー コード 作成(Yahoo!ニュース)

code128 バー コード 作成
code128 バー コード 作成
code128 バー コード 作成