Excelでバーコード表示に挑戦する連載の7回目です。前回の記事はコチラです。
前回はコード128のバーコードを作成表示するツールついてご紹介しました。
今回は、このツールのコードの解説です。コードは基本的にシートモジュールに記述されています。
入力更新時のコード
まずはシートの入力変更時の処理です。
'設定変更時の処理をします Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case Me.Range("TEXT_BLOCK").Address, Me.Range("FONT").Address, Me.Range("TEXT").Address Case Me.Range("HEIGHT").Address '高さ指定なしの場合は200とします If Me.Range("HEIGHT").Value = "" Then Me.Range("HEIGHT").Value = 200 Exit Sub End If Case Else Exit Sub End Select If Not MakeCode128(Me.Range("TEXT").Text) And Me.Range("TEXT").Text <> "" Then MsgBox "バーコード作成できませんでした" End If End Sub
画面で操作するセルには名前が付いています。バーコードにする文字(TEXT,TEXT_BLOCK)や文字のフォントサイズ(FONT)が変更になった場合はバーコードを再描画します。再描画は下にご紹介するファンクションプロシージャMakeCode128にて実行します。また、バーコードの高さ(HEIGHT)が変更されて値が未指定になった場合はデフォルト値に変更されます。
コード128のバーコード作成
つづいてコード128のバーコード作成部分をご紹介します。
'入力変更時の処理をします Public Function MakeCode128(ByVal textData As String) As Boolean Dim i As Long, j As Long '22文字以上はバーコード作成できません。 '入力がない場合は表示をクリアします。 ClearBarCode If 22 < Len(textData) Or textData = "" Then If 22 < Len(textData) Then MsgBox "22文字以下にしてください" Exit Function End If Application.ScreenUpdating = False '表示サイズを調整します。 If Me.Range("FONT").Value <> "" Then Me.Range("CHAR").Font.Size = Me.Range("FONT").Value Me.Range("TEXT_HEIGHT").RowHeight = Me.Range("FONT").Value Me.Range("BAR_HEIGHT").RowHeight = Me.Range("HEIGHT").Value Me.Range("TEXT").Font.Size = Me.Range("HEIGHT").Value Me.Range("MARGIN").RowHeight = Me.Range("HEIGHT").Value / 10 Me.Range("QUIET_ZONE").ColumnWidth = 0.23 * 15 '入力を半角文字にします。 textData = StrConv(textData, vbNarrow) '表示するバーをすべて細く設定します。 Me.Range("BAR_1_1", "BAR_24_6").ColumnWidth = 0.23 ' 1 If Len(textData) + 2 < 24 Then Me.Range("BAR_" & (Len(textData) + 3) & "_1", "BAR_24_6").Columns.Hidden = True 'スタートコード(CODE-B) Dim barData(24) As String barData(0) = GetBarCodePattern("104") 'STARTCODE-B Dim checkDigit As Long checkDigit = 104 '入力文字に対応したバーコードを設定します。 For i = 1 To Len(textData) barData(i) = GetBarCodePattern(Mid$(textData, i, 1)) 'バーコード表示できない文字がある場合はバーコード表示をクリアします。 If barData(i) = "Error" Then MsgBox "バーコード表示できません" ClearBarCode Exit Function End If checkDigit = checkDigit + CInt(Split(barData(i), ",")(1)) * i Next i 'バーコード情報を表示 Me.Range("CHAR").UnMerge Me.Range("CHAR").Resize(, 6 * (Len(textData) + 1)).Merge Me.Range("CHAR").Value = "'" & StrConv(textData, vbWide) 'チェックデジットを設定します。 barData(i) = GetBarCodePattern(Format$(checkDigit Mod 103, "000")) For i = 0 To Len(textData) + 1 '太いバーの表示幅を広げます。 For j = 1 To 6 Select Case Mid$(barData(i), j, 1) Case "1" Case "2" Me.Range("BAR_" & i + 1 & "_" & j).ColumnWidth = 0.46 Case "3" Me.Range("BAR_" & i + 1 & "_" & j).ColumnWidth = 0.69 Case "4" Me.Range("BAR_" & i + 1 & "_" & j).ColumnWidth = 0.92 End Select Next j Next i 'ストップコードを設定します。2331112 Me.Range("STOP_1").ColumnWidth = 0.46 Me.Range("STOP_7").ColumnWidth = 0.46 Me.Range("STOP_2", "STOP_3").ColumnWidth = 0.69 Me.Range("STOP_4", "STOP_6").ColumnWidth = 0.23 Application.ScreenUpdating = True 'ビットマップデータをクリップボードにコピーします。 If Me.Range("CLIP_BOARD").Value = "する" Then Me.Range("BAR_CODE").CopyPicture , xlBitmap MakeCode128 = True End Function
バーコード化できる文字数は22文字までです。 バーコードを構成するセルにも名前が付いています。バーコード下の文字表記(CHAR)と文字表記全体の高さ(TEXT_HEIGHT)、バーの高さ(BAR_HEIGHT)、バーコード上下のマージン(MARGIN)を入力内容を基に設定します。バーコード前後のクワイエットゾーン(QUIET_ZONE)は3.45(細いバーの太さ0.23の15本分)で固定です。
1文字を構成するバーの数は6本になります。24文字分(22文字 + スタートコード + チェックデジット)のバーはBAR_1_1~BAR_24_6と名前が付いていて、あらかじめ白黒に着色されています。これらバーの太さを入力された文字にしたがって調整します。実際の変換は次にご紹介するファンクションプロシージャGetBarCodePatternで実施します。
コードの変換
バーコードで表記する文字、または3桁の整数値を表す文字列から、からコードと割り当てられている場番号への変換を実行するファンクションプロシージャです。引数で渡された文字、または3桁の数字から割り当てられている1~4までで構成されるバーコードパターンと番号をコンマ区切りの文字列で返します。このリストは長くなりますので途中は省略します。
Private Function GetBarCodePattern(ByVal textData As String) As String Select Case textData Case "000", " ": GetBarCodePattern = "212222,0" Case "001", "!": GetBarCodePattern = "222122,1" Case "002", Chr$(&H22): GetBarCodePattern = "222221,2" Case "003", "#": GetBarCodePattern = "121223,3" Case "004", "$": GetBarCodePattern = "121322,4" Case "005", "%": GetBarCodePattern = "131222,5" Case "006", "&": GetBarCodePattern = "122213,6" Case "007", "'": GetBarCodePattern = "122312,7" Case "008", "(": GetBarCodePattern = "132212,8" Case "009", ")": GetBarCodePattern = "221213,9" Case "010", "*": GetBarCodePattern = "221312,10" Case "011", "+": GetBarCodePattern = "231212,11" ・ ・ ・ Case "098": GetBarCodePattern = "411311,98" Case "099": GetBarCodePattern = "113141,99" Case "100": GetBarCodePattern = "114131,100" Case "101": GetBarCodePattern = "311141,101" Case "102": GetBarCodePattern = "411131,102" Case "103": GetBarCodePattern = "211412,103" 'STARTCODE-A Case "104": GetBarCodePattern = "211214,104" 'STARTCODE-B Case "105": GetBarCodePattern = "211232,105" 'STARTCODE-C Case Else 'エラー GetBarCodePattern = "Error" End Select End Function
Excelでバーコードを表示してました
いかがでしょうか。なかなか便利なツールに仕上がったと自負しています。Excelでバーコード表示に挑戦する連載はこれで終了です。ありがとうございました!!