のんびりよりみちきっぷ

考えた事や実施したことをのんびりと。

フォームで見た目スッキリ。エクセルのマクロでバーコードを作成する!

f:id:yorimichi_ticket:20180306081424j:plain
仕事でバーコードを簡単に表示させたいという事があって、エクセルVBAで作ってみました。
C#あたりでも考えてみましたが、バーコードの表示にコンポーネントやら必要で、有料っぽいのでやめました。
とりあえずやりたいことは出来ましたので、簡単なコードですが記録しときます。

概要

code39の表示
・名前を選択してcode39のバーコードを表示させる。
・名前には4桁の数字が紐付されている。
code128の表示
・10桁の数字を入力してcode128のバーコードを表示させる。
・10桁かつ数字の場合にバーコードを表示させる。


◆作成準備

  1. エクセルを開いてシート名を"ID"に変更
  2. A列に1から連番を振る
  3. B列に名前を記入
  4. C列に名前に対応するIDを記入
  5. [ctr]+[F11]でVBAを起動



◆フォームの作成

  1. [プロジェクトエクスプローラー]→[Microsoft Excel Objects]→右クリック→挿入→ユーザーフォーム
  2. プロパティからフォームのオブジェクト名を「barcode」に変更
  3. 各コントロールを配置する

f:id:yorimichi_ticket:20160708184554p:plain

名称 種類 内容
lbl1 ラベル 名前ラベル
cmdName コンボボックス エクセルのB1~B最下行を参照して選択
barcode39 バーコード cmdNameで選択した名前のIDをバーコード表示
frm1 フレーム code39用のフレーム
lbl2 ラベル №ラベル
txtNumber テキストボックス code128に変換する数字
barcode128 バーコード txtNumberに入力した数字をバーコード表示
frm2 フレーム code128用のフレーム
btnClose ボタン フォームを閉じるボタン



◆コードの記述

フォーム表示コード

  1. [プロジェクトエクスプローラー]→[Microsoft Excel Objects]→[ThisWorkbook]→右クリック→コードの表示
  2. 下のソースコードを記載
'ブックが開いたときにフォームをモードレス表示
Sub workbook_open()
    barcode.Show vbModeless
End Sub


メインコード

  1. [プロジェクトエクスプローラー]→[Microsoft Excel Objects]→[フォーム]→[barcode]→右クリック→コードの表示
  2. 下のソースコードを記載
Option Explicit

'閉じるボタンクリックでフォームを閉じる
Private Sub btnClose_Click()
    Unload Me
End Sub


'code39動作'
'コンボボックスが選択されたら実行'
Private Sub cmbName_Change()
    Dim target As Double
    Dim code As String
    
    '選択された名前のインデックスを格納
    target = cmbName.ListIndex + 1
    
    '名前に紐付されているIDを格納
    code = Cells(target, 3).Value
    If code <> "" Then
        barcode39.Value = code
    Else
        barcode39.Value = ""
    End If
End Sub


'code128動作'
'テキストボックスに値が入力されたら実行'
Private Sub txtNumber_Change()
    Dim Number As String
    Number = txtNumber.Value
    
    '数字(IsNumeric)かつ10桁(Len)かつ半角(StrConv)の場合にはバーコード表示'
    If (IsNumeric(Number)) And (Len(Number) = 10) And (Number = StrConv(Number, vbNarrow)) Then
        barcode128.Value = Number
    Else
        barcode128.Value = ""
    End If
End Sub


'ユーザーフォーム初期化'
Private Sub UserForm_Initialize()
    Dim lRow As Integer
    
    'A列の最下行を検索'
    lRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    'コンボボックスの表示内容格納'
    cmbName.RowSource = "ID" & "B1:" & "B" & lRow
    
    'バーコードの表示領域変更'
    With barcode39
        .Height = 55
        .Width = 200
        .Left = 12
    End With
    
    With barcode128
        .Height = 55
        .Width = 200
        .Left = 12
    End With
        
    
End Sub



完成状態

コンボボックスから名前選択するとバーコード表示
f:id:yorimichi_ticket:20160708184621p:plain

10桁の数字を入力するとバーコード表示
f:id:yorimichi_ticket:20160708184622p:plain