見出し画像

VBAでBarCode_出力

今回は、社員証にバーコードを埋め込んで「勤怠管理もどき」を作ろうと企んでいます。
まずシート「名簿」を作り、架空の社員を7~10名程度入力してください。
入力が済んだら、ついでに実行ボタンも作っておきましょう。

シート「名簿」

社員№は5桁の数字(重複がないように)。部署№は4桁の数字。
写真名は空白でも可。

次にシート「社員証」を作り、下表のように枠を作ってください。(できれば印刷プレビューを確認しつつ1ページに収める)

シート「社員証」

これから、名簿を基にバーコード付きの社員証を作ります。
それでは、前回の記事「箸休め_2」を参考に「シート社員証」のうえにバーコードを作ってください。
ここでは、「Sample」の状態までで良いです。

Sampleバーコード出現

次に、バーコードのうえで右クリックして、プロパティ>「LinkedCellの入力欄」に「B7」と入力して、7行目B列の値がコード化されていることが確認できたら、バーコードを7行目B列が隠れる位置に移動してください。

デザイン上の都合で番号を隠す

これで一人分が完成しました。あと1行目A列~8行目D列までを残り9人分コピーしてください。

1行目A列~8行目D列をコピー

その後、それぞれの「LinkedCell」を設定して、あと一息です。
最後の仕上げに、開発>デザインモードをクリックすると、バーコードがロックされて様式の完成です。

ここからが本題のVBAですが、その前にBreak Timにしましょう。

気持ちを入れ替えて、VBAの話になります。
バーコードで扱うデータは12桁の数字です。なので、まずどのようにして12桁の数字にするかを決めます。この行為を業界では、コード定義などと呼びます。
サンプル会社「○◎商事株式会社」の番号を適当に24とします。次に「◇□支店」を1として、「部署」4桁、社員№5桁と続けます。
これで12桁の完成です。
あとは、シート「名簿」のデータを社員証にはめ込むだけです。
これは、VBAでBingo5_3の算式を応用すれば、簡単にできます。
ここも、VBAの利点のひとつで「苦労して作ったものは、どこかで使いまわしが利く」ことです。(作り方にもよりますが)

繰り返す構文を
For n=1 to 10 (社員10人の場合)
Next n
として、「社員№」のCell(2行目1列、2行目5列、10行目1列、10行目5列・・・)を基準点とすると
行の位置aはFix((n - 1) / 2) * 8 + 2
列の位置bは(n-Fix((n - 1) / 2) * 2 -1)*4+1
となり、書出す位置が決まります。
それから、書出すデータは「シート名簿」の6行目からなので(n+5)行目の各列となります。

Sub 個票()

    For n = 1 To 10

      a = Fix((n - 1) / 2) * 8 + 2
      b = (n - Fix((n - 1) / 2) * 2 - 1) * 4 + 1

      Sheets("社員証").Cells(a, b + 1) = Cells(n + 5, "B")  '社員№
      Sheets("社員証").Cells(a, b + 3) = Cells(n + 5, "D")  '部署№
      Sheets("社員証").Cells(a + 1, b + 1) = Cells(n + 5, "C") '社員名
      
      BC = "241" & Cells(n + 5, "D") & Cells(n + 5, "B")
      Sheets("社員証").Cells(a + 5, b + 1) = BC 'BC№

    Next n
    Sheets("社員証").Select

End Sub

それでは「実行ボタン」をマクロ名「個票」に関連付けてクリックしてみてください。

社員証

社員№のコード化もうまくいっていますか?

今回は、書出すセル(左辺)にシート名を付けています。
これは、処理するときに「どのシートが見えているか」によります。
ここでは、書き出す処理が済んだ後に、シート「社員証」を選択しているため、処理中はシート「名簿」が見えています。
この「見えているシート」のことをAvectiSheetと呼び「ActiveSheet以外のセルにはシート名が必要となる」ことを約束事として覚えておいてください。

次回は、VBAでBarCode_読込を掲載します。
また、いつか気が向いたら社員証に「写真」を貼り付ける記事も掲載する予定です。

この記事が気に入ったらサポートをしてみませんか?