任意の情報を格納したQRコードを1クリックで複数作成
「VBAでQRコードが作成できると聞きました。本当ですか?」という質問をいただきました。
一定の条件が必要ですが技術的には可能です。
手作業でもVBAでもExcelを使ってQRコードを用意する事はできます。
しかしどうせVBAでやるなら作業を短縮したいですよね。質問者様も同じ考えの様で3つのポイントをいただきました。
- 複数のQRコードを1クリックで作成
- 作成したQRコードには固有の情報を格納したい
- 作成したQRコードを1クリックで削除できるようにしたい
3つともできますよ。
QRコードについて少し説明したあとに具体的な事例を使って説明、解説していきます。
関連記事
QRコードを扱うにはオブジェクト変数を理解している方が有利です。理解が進みます。
オブジェクト変数とはVBAで転記|ブック間で文字列をコピペするマクロの作り方を教えます
関連書籍
こちらの書籍には今回のQRコードの様に「普段VBAではやらない」事がたくさん用意されています。
バーコードリーダーを使ってバーコードを読み取るシステムを構築するなど本記事とも関連があるので掲載しました。
こちらは電子書籍です。
QRコードとは
現在のデンソーウェーブ(開発当時はデンソー)が1994年に開発した2次元コードです。
QRコード®の特長
4つの特徴があります。
特長1:大容量の情報を小さなコードに表現
QRコード®は、数字・英字・漢字・カナ・記号バイナリ・制御コード等のデータを扱うことが可能です。
特長2:小さなスペースに表示が可能
QRコード®は、縦・横両方でデータを表現しています。
バーコードと同じ情報量であれば、10分の1程度の大きさで表示できます。
特長3:360°どの方向からでも、読み取りが可能
QRコード®は、360°どの方向からでも、高速な読み取りが可能です。
背景模様の影響を受けない安定した高速読み取りができます。
特長4:汚れ・破損に強い
QRコード®は、「誤り訂正機能」をもっています。
コードの一部に汚れや破損があってもデータの復元が可能※です。
株式会社デンソーウェーブQRコードとはより引用、加工
※汚れ・破損の状況により復元できない場合があります。
近年は仕事の中でもQRコードが使われる様になりました。
製品、商品に情報を付与したり固定資産の明示などにも使われています。
生活の中ではモノを購入する際にも使われていますね。PayPayをはじめとした多くの決済システムが流行しています。
政府もキャッシュレス化を促進しているようで各社共通のQRコードを作るという話も進んでいる様です。
ExcelでQRコードを使うにはAccessが必要
冒頭で少しだけふれました前提条件を整理しておきます。
ExcelでQRコードを作成していくのですがまずはVBEで参照設定が必要です。
つまりライブラリからQRコードを作成する機能を持ってくる必要があります。(ライブラリの説明はこちら)
VBEの「ツール」タブ内の「参照設定」でダイアログボックスが表示されます。
ダイアログボックスの中央にある英文字の中から「Microsoft Access BarCode Control 14.0」をチェックしましょう。
Officeのライセンス次第ですがAccessが含まれていればこのコントロールを見つける事ができます。
Accessを持っていなくても大丈夫です
Accessをお持ちではない方はMicrosoft Access 2016 Runtimeをダウンロードしてインストールしましょう。
かんたんに説明すると「Accessのアプリケーションは使えませんが一部機能だけは使えますよ」というAppです。
事例
ここからはExcelVBAで「任意の情報を格納したQRコードを1クリックで複数作成」していきます。
アウトプットを見ていただくためにサンプルとなる事例を1つ用意しました。
ワークシートの状態
作業前と作業後の状態をご覧ください。
作業前
セルA2からA7は表題欄です。B列に用意してほしい情報を指示します。
セルB2からB7には都度必要な情報を入力することにします。今回はダミーで画像のようなデータを入力しました。
セルへの入力を終えたら「実行」ボタンをクリックします。
作業後
「実行」ボタンをクリックすると指定したロット分のQRコードが作成されます。
各QRコードには末尾に番号が付与されます。今回は1番から10番が付与されることになります。
C列に書いてある番号はQRコードに付与されたロット番号と同じ数値です。
見た目でどのロット番号のQRコードなのかを判別する為にあえてセルに数値を入れるようにしました。
QRコードをスキャンしてみる
1番のQRコードをiphoneでスキャンしてみました。
右側の画像はiphoneの画面をスクショしたものです。
セルに入力した情報が付与されていることが分かります。
一番最後の「1」がロットNoです。
今回は10個のQRコードを用意しています。
最後のQRコードには末尾に「10」が付与されます。
使用例
緊急時の物資に番号を付与するときなどで使えます。
(印刷してカットし段ボールに貼るなど)
作業内容
タイムラインを使って作業内容(操作内容)を整理しました。
- 1セルB2からB7に必要な情報を入力
B6、B7はロット番号です。B6からスタートしてB7までの番号分QRコードを作ります
- 2実行ボタンをクリック
各QRコードにはセルB2からB5の情報に加えロットNoが付与されます
QRコードの内容と重複しますがロットNoだけセルに記入する様にしています
(見た目で判断したい為)
- 3削除ボタンをクリック
QRコードとロットNoが削除されます
手順としては非常にかんたんです。セルに文字列を入力後ボタンを押すだけです。一括でQRコードが作成されます。
複数のオブジェクトを処理するとなると操作性(速度)が気になります。
非常に高速にQRコードを作成できるので動作も重くなることはないです。
コード
コードはこちらです。2つのプロシージャを用意しました。サブルーチンではないのでご注意下さい。
前半は「実行」ボタンに連動させるコードです。後半は「削除」ボタンに連動させるコードになります。
Sub QRコード生成()
Dim ws As Worksheet
Dim ObjOLE As OLEObject
Dim n As Long
Dim r As Long: r = 10
Application.ScreenUpdating = False
'QRコードを作成するシートを指定
Set ws = Sheets("QRコード")
For n = ws.Cells(6, 2) To ws.Cells(7, 2)
'「OLEObjectオブジェクト」を作成
Set ObjOLE = ws.OLEObjects.Add("BARCODE.BarCodeCtrl.1")
'「OLEObjectオブジェクト」をQRコードにする
With ObjOLE.Object
.Style = 11
.Value = ws.Cells(2, 2) & "," & ws.Cells(3, 2) & "," & ws.Cells(4, 2) & "," & ws.Cells(5, 2) & "," & n
End With
'QRコードのサイズ、位置、名前を指定
With ObjOLE
'縦と横のサイズ
.Height = 50
.Width = 50
'位置
.Top = ws.Cells(r, 4).Top
.Left = ws.Cells(r, 4).Left
End With
'QRコードのロット番号を表示(スキャンしないと分からなくなる為)
Cells(r + 1, 3) = n
r = r + 3
Next
'後片付け(この後にコードが続かないなら不要)
Set ObjOLE = Nothing
'作業完了のお知らせ
MsgBox "QRコードを用意できました", vbInformation, "作業完了"
Application.ScreenUpdating = True
End Sub
'*************************************************************************************
Sub QRコードの削除()
Dim ws As Worksheet
Dim ObjOLE As OLEObject
Dim r As Long
r = Cells(Rows.Count, 3).End(xlUp).Row
Set ws = Sheets("QRコード")
'指定シート上にある「OLEObjectオブジェクト」の数だけ繰り返し
For Each ObjOLE In ws.OLEObjects
ObjOLE.Delete
Next
'ロット番号の削除
If r > 11 Then
Range(Cells(10, 3), Cells(r, 3)).Delete
End If
End Sub
2つのプロシージャ(プログラム)は標準モジュールに配置していただくことをおすすめします。
解説
今回のコードのポイントはFor~Nextステートメントの中全てですね。コード内では3つに分けました。
- OLEObjectsオブジェクトのAddメソッド
- バーコードをQRコードに指定し情報を付与する
- サイズや位置、名前を指定
1_OLEObjectsオブジェクトのAddメソッド
Addメソッドの詳細はMicrosoftのドキュメントへのリンクを用意しました。しかし分かりにくいです。
このコードは手作業でやった時にどうなるのかを見ていただいた方が理解が進みます。よって画像を使って説明します。
まずは画像のようにActiveXコントロールから「コントロールの選択」ボタンをクリックしてください。
開発タブが出ていない人はこちらのリンクをご覧ください。
「コントロールの選択」というダイアログボックスが表示されます。
「Microsoft BarCode Control 16.0」を選択し「OK」ボタンをクリックしてください。
ワークシートの上で範囲指定できる状態になるのでマウスである程度の大きさを指定しマウスから指を離します。
すると指定した範囲の中にバーコードが用意されます。
関数バーを見ていただくとコードの中で指定した文字と同じだという事がわかります。
この作業をマクロで行う時に使用するのがOLEObjectsオブジェクトのAddメソッドです。
2_バーコードをQRコードに指定し情報を付与する
1番の作業でQRコードは用意できました。ここからはQRコードの仕様を変えます。
Styleプロパティに11番を代入することでバーコードをQRコードに変えます。(ほかの種類のバーコードも作成可能)
その後Valueプロパティにセルで用意した値を代入することでQRコードに情報を付与します。
手作業でやると以下画像のような作業になります。バーコードの上で右クリックしプロパティを表示させます。
プロパティウインドウの情報を適宜書き換えていただくことでQRコードに指示を与える事ができます。
3_サイズや位置を指定
最後はQRコードのサイズや位置を管理する工程です。
手作業の時は2番の作業と同様で各プロパティに値を入力してあげることでQRコードの大きさや位置を指定できます。
用途に応じてQRコードの大きさを変えたり表示させるセルの場所を柔軟に変更してください。
補足説明:ワークシートのQRコードを動かしたい時
コード実行後はQRコードを選択、移動することができません。
以下画像の様に対応していただくことでQRコードを選択、移動することができる様になります。
開発タブをクリックしてからコントロールのなかにある「デザインモード」をクリックしてください。
デザインモードのアイコンの背景が濃いグレーになったらデザインモードになっています。
これでQRコードを選択することができます。
まとめ
「任意の情報を格納したQRコードを1クリックで複数作成する」という作業を説明、解説してきました。
理論上100個、200個のQRコードを作ることも可能です。ボタン1つで簡単に削除できるので是非試してみてください。
実際に使うにはA4、A3の範囲に収まる様にQRコードが並ぶ様にした方が都合が良い(便利)かもしれません。
需要があれば別途記事にする予定です。