TOP > blog > バーコード JANコード 関数化
スクリプト
2022/05/31

バーコード JANコード 関数化

管理者用
blog

三栄NAVIの中に、バーコードの話をいくつか記載しております。
バリアブル印刷をお受けしている中で、バーコードが含まれる事もあります。

バーコードが可変の場合、色々な対応方法が考えられますが。
最終的には、文字フォントで対応するのが一番良いと言う事となります。

そんな流れで、バーコードフォントを自作した事がありました。

このNAVIの中でも、自作のバーコードフォントを公開しているものもあります。

自作フォントが、世の中で使用されているのか全く分かりませんでした。

昨日、このバーコードで問い合わせが入りました。
JANコードに対する物でした。

作成してから、大分経っており、即答できず、三栄NAVIを再確認!

先ほども述べましたが、そもそも、フォントを作ったのは、バリアブル印刷対応から、必要に攻められて作成した経緯があります。
しかし、問い合わせの有った、JANコードは、商品コードであり、その性質上バリアブル印刷で出てくる事は、まず無いでしょう。

その当時、パンフやシールなどの印刷依頼の中で、JANコードを扱う事がありました。
入稿される画像データに問題が多く、版下を綺麗にすると言う流れの中で、作ったように記憶してます。

JANコードは、数字13桁の商品コードですが、数字から実際のバーコードに変換するには、ルールに沿った変換を行う必要があります。
NAVIの記事の中では、エクセルのVBAで変換プログラムも合わせて紹介していました。

・・・・・大分思い出しました。

改めて、紹介しているエクセルファイルを見ましたが、シート上に、ボタンを配置したものです。
ボタンでスクリプトを起動してJANコードを生成します。
今、考えて見ると、使い勝手の悪い形で紹介していたようです。

スクリプトを2~3行、書き直して関数化しました。

これにより、ユーザ定義関数として使用可能です。

フォントと合わせてダウンロード出来るようにしました。

自分の作ったものが、使用されるってうれしいものですね!

 

 エクセル・フォントダウンロード ⇒ ここから

 なお、関数のVBA記述は、下記コードを参照してください。

 


Function JANHENKAN(CODE)

    'JANコード読み取り
    JAN_No = CODE
    If Len(JAN_No) = 12 Then
    Rem モジュラス10/ウェイト3 のチェックデジットの計算
    Rem 13桁の場合は、チェックデジットが含まれているとして、そのまま使用します。

        OD = 0
        EV = 0

        For a = 1 To 12 Step 1
            ChdCar = Mid(JAN_No, a, 1)
            If (a Mod 2) = 0 Then
                OD = OD + ChdCar
            Else
                EV = EV + ChdCar
            End If
    
            ChdCaA = EV + (OD * 3)
        Next

        ChdCarMoto = CInt(Right(Str(ChdCaA), 1))
        ChdCarMot = 1000 - CInt(Right(Str(ChdCarMoto), 1))
        ChdCarCODE = Right(Str(ChdCarMot), 1)

        JAN_No = JAN_No & ChdCarCODE

    Rem ===============================================
    End If

    F1stcar = Left(JAN_No, 1)
    mojityy = "000000"

        Select Case F1stcar
            Case "0"
               mojityy = "000000"
            Case "1"
               mojityy = "001011"
            Case "2"
               mojityy = "001101"
            Case "3"
               mojityy = "001110"
            Case "4"
               mojityy = "010011"
            Case "5"
               mojityy = "011001"
            Case "6"
               mojityy = "011100"
            Case "7"
               mojityy = "010101"
            Case "8"
               mojityy = "010110"
            Case "9"
               mojityy = "011010"
        End Select

    'スタートキャラ
    seikeiData = "("

    For a = 2 To 13 Step 1
        ChdCar = Mid(JAN_No, a, 1)
        If a <= 7 Then
            If Mid(mojityy, a - 1, 1) = "0" Then
                'seikeiData = seikeiData & ChdCar
            Else
                ChdCar = Replace(ChdCar, "0", "A")
                ChdCar = Replace(ChdCar, "1", "B")
                ChdCar = Replace(ChdCar, "2", "C")
                ChdCar = Replace(ChdCar, "3", "D")
                ChdCar = Replace(ChdCar, "4", "E")
                ChdCar = Replace(ChdCar, "5", "F")
                ChdCar = Replace(ChdCar, "6", "G")
                ChdCar = Replace(ChdCar, "7", "H")
                ChdCar = Replace(ChdCar, "8", "I")
                ChdCar = Replace(ChdCar, "9", "J")
            End If
        
            seikeiData = seikeiData & ChdCar
        Else
            If a = 8 Then
                seikeiData = seikeiData & "X"
            End If
    
            ChdCar = Replace(ChdCar, "0", "K")
            ChdCar = Replace(ChdCar, "1", "L")
            ChdCar = Replace(ChdCar, "2", "M")
            ChdCar = Replace(ChdCar, "3", "N")
            ChdCar = Replace(ChdCar, "4", "O")
            ChdCar = Replace(ChdCar, "5", "P")
            ChdCar = Replace(ChdCar, "6", "Q")
            ChdCar = Replace(ChdCar, "7", "R")
            ChdCar = Replace(ChdCar, "8", "S")
            ChdCar = Replace(ChdCar, "9", "T")
            seikeiData = seikeiData & ChdCar
        End If
    Next
            seikeiData = seikeiData & ")"
            JANHENKAN = seikeiData

End Function

関連記事