ExcelでQRコードを作成したいときはないでしょうか。
けど、そんな中で悩むことは、
・VBAでQRコードを一括作成ししたいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・VBAでQRコードを一括作成する方法
についてまとめます!
もくじ
ExcelでQRコードを作成するイメージ
ExcelでQRコードを作成するイメージについて説明をします。
まずは標準機能でExcelのシートから手動でバーコードを挿入していきます。
バーコードを設置できたら手動でバーコードの種類(QRコード)を変更したり、値を設定したりします。
次にVBAでバーコードを一括で作成していきます。
値をA列に設定し、バーコードのサイズはB列の縦横の幅に自動調整するようにします。
一括でバーコードが作成できると便利ですよね!
早速試してみましょう。
QRコードについて
QRコードとは
QRコードは Quick Response の頭文字で、高速読み取りを目的としたコードです。
自動車部品メーカーのデンソーが開発しました。
英数字、記号、漢字、かな、など1000文字以上記録することが可能です。
誤り訂正ができるので、コードに汚れや欠損があってもある程度は文字の読み取りが可能です。
最近ではURL記録用途でよく使われています。
手動でQRコードを作成する
手動でQRコードを作成する方法について説明をします。
Officeでは「Microsoft BarCode Control」というライブラリが用意されていて、それを使うことによりバーコードのオブジェクトを追加することができます。
QRコードを作成する
「開発」タブををクリックし、「挿入」>「コントロールの選択」ボタンをクリックします。
コントロールの選択ウインドウが表示されたら「Microsoft BarCode Control 16.0」を選択し「OK」をクリックします。
バーコードを貼り付けたい箇所へドラッグし、同時にサイズを調整していきます。
マウスをはなすとバーコードが生成されシートに表示されたら
再度選択し右クリックします。
「Microsoft BarCode Control 16.0オブジェクト」>「プロパティ」をクリックします。
スタイル「11-QRコード」を選択し、「OK」をクリックします。
次に、バーコードのコード(値)を設定していきます。
先ほど貼り付けたバーコードオブジェクトを右クリックします。
「プロパティ」ウインドウの「value」プロパティにバーコードの値を英数字混合文字列で入力します。
※サンプルは弊サイトのURLを値に指定しています。
バーコードの内容が変われば完成です。
VBAでQRコードを一括作成する
VBAでQRコードを一括作成する方法について説明をします。
今回は値をA列に設定し、バーコードのサイズはB列の縦横の幅に自動調整するようにします。
VBAコード
VBAは以下の通りです。
Sub バーコードを生成する()
Dim intTop As Integer
Dim intLeft As Integer
Dim intWidth As Integer
Dim intHeight As Integer
Dim objBarCodeSetup As BarCodeCtrl
Dim i As Integer
'Excel表示シートのA列2行目以降にある値の件数分処理を繰り返します。
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
'B列セルの位置、サイズ情報を取得し変数へ代入します。
With Cells(i, 2)
intTop = .Top 'セル上部の位置
intLeft = .Left 'セル左側の位置
intWidth = .Width 'セル幅のサイズ
intHeight = .Height 'セル高さのサイズ
End With
'BARCODE.BarCodeCtrlタイプのOLEオブジェクトを追加し、選択状態にします。
ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=intLeft + 2, Top:=intTop + 2, Width:=intWidth - 2, Height:=intHeight - 2).Select
'選択したバーコードオブジェクトをオブジェクトにセットします。
Set objBarCodeSetup = Selection.Object
'バーコード コントロールのプロパティを設定します。
With objBarCodeSetup
.Style = 11 '11はQRコードとなります。
.Value = Cells(i, 1).Value 'A列の値をバーコードのValueプロパティへ設定します。
End With
Next
'オブジェクトを解放します。
Set objBarCodeSetup = Nothing
End Sub
VBAの設定
Excel表示シートのA列2行目からの指定となっていますが、行数を変更する場合は変数iの数値を変えてください。
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
バーコードの貼り付け先はB列となっていますが、C列など別の列にする場合はCellsの第二引数を変更してください。C列の場合は3、D列は4を指定します。
With Cells(i, 2)
VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
VBAを実行
VBAを実行しましょう。
はい、B列にQRコードのバーコードが一括で作成されましたね!
値も反映されています!
VBAの説明
VBAについて説明をします。
Excel表示シートのA列2行目以降にある値の件数分処理を繰り返します。
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
B列セルの位置、サイズ情報を取得し変数へ代入します。
With Cells(i, 2)
intTop = .Top 'セル上部の位置
intLeft = .Left 'セル左側の位置
intWidth = .Width 'セル幅のサイズ
intHeight = .Height 'セル高さのサイズ
End With
BARCODE.BarCodeCtrlタイプのOLEオブジェクトを追加し、選択状態にします。
バーコードの貼り付け位置とサイズは先ほどのセルの情報をベースに設定します。
ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=intLeft + 2, Top:=intTop + 2, Width:=intWidth - 2, Height:=intHeight - 2).Select
選択したバーコードオブジェクトをオブジェクトにセットします。
Set objBarCodeSetup = Selection.Object
バーコード コントロールのプロパティを設定します。
With objBarCodeSetup
.Style = 5 '5は5 - QRコードとなります。
.Value = Cells(i, 1).Value 'A列の値をバーコードのValueプロパティへ設定します。
End With
Styleプロパティはバーコード シンボルのスタイルを指定するプロパティとなりますので、以下の表を参考に設定したいスタイルを指定します。
今回はQRコードなので11を指定します。
バーコード コントロールStyle プロパティ一覧
Style | 説明 |
---|---|
0 – UPC-A | 商品のマーキングに広く使用されている POS シンボルです (米国とカナダ)。 |
1 – UPC-E | UPC の短縮バージョンです。標準バージョンのシンボルが印刷できないような小さい商品に使用します。 |
2 -JAN-13 | 国際的な規格の POS シンボルです。書籍や雑誌などを含め、すべての商品に使用します。 |
3 – JAN-8 | JAN の短縮バージョンです。標準バージョンのシンボルが印刷できないような小さい商品に使用します。 |
4 – Casecode | 製造会社や卸し売り会社が小売り店に商品を出荷するとき、梱包箱の外側に表示するシンボルです。 |
5 – NW-7 | 英数字を表すことができるバーコード シンボルです。コンピュータ機器など、特殊な商品のパッケージに表示します。 |
6 – Code-39 | 英数字を表すことができるバーコード シンボルです。FA (Factory Automation) をはじめ、工業用として広く使用されています。 |
7 – Code-128 | フル ASCII の 128 文字をコード化したバーコード シンボルです。 |
8 – US Postnet | 処理を自動化するため、郵便物に表示するバーコード シンボルです (米国)。 |
9 – US Postal FIM | 処理を自動化するため、郵便物に表示する特殊なバーコード シンボルです (米国)。 |
10 – カスタマバーコード | 処理を自動化するため、郵便物に表示するバーコード シンボルです (日本)。 |
11 – QRコード | QRバーコード シンボルです。 |
参考:https://docs.microsoft.com/ja-jp/previous-versions/office-development/cc427155(v=msdn.10)
Valueプロパティはバーコードのデータを指定するプロパティなので、セルの値を指定します。
その他のバーコード コントロールのプロパティは以下の通りです。
プロパティ | 説明 |
---|---|
Style | バーコード シンボルのスタイルを指定します。 |
SubStyle | さらに細かいスタイルを指定します。 |
Validation | データの有効性を確認するかどうかを指定します。 |
LineWeight | バーコード シンボルの線の太さを指定します。 |
Direction | バーコード シンボルの表示方向を指定します。 |
ShowData | 数値データを表示するかどうかを指定します。 |
ForeColor | バーコード シンボルの前景色を指定します。 |
BackColor | バーコード シンボルの背景色を指定します。 |
Value | 作成するバーコード シンボルのデータを指定します。 |
参考:https://docs.microsoft.com/ja-jp/previous-versions/office-development/cc427149(v=msdn.10)?redirectedfrom=MSDN
オブジェクトを解放します。
Set objBarCodeSetup = Nothing
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・VBAでQRコードを一括作成する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
QRコードに記憶させるデータを漢字にすると、QRコードが作成できませんでした。
漢字を記憶させることは可能でしょうか?
いつもご利用ありがとうございます。
QRコードに記憶させるデータを漢字にするとQRコードが作成できない件につきまして、
今回使用しているOfficeのバーコードジェネレータ”BARCODE.BarCodeCtrl.1″OLEオブジェクトが
漢字をサポートしていないことが原因となります。
※QRコードの規格は漢字のエンコードもサポートしています。
対処としては、”BARCODE.BarCodeCtrl.1″を使う前提ですと、漢字の文字列のまま変換することは難しく、
例えばURLエンコードを行うなどして漢字を半角英数字に変換する対応が必要になります。
エクセルに入力した漢字文字列をURLエンコードする方法については以下の記事にまとめていますので、
よろしければご参考ください。
https://extan.jp/?p=5309
こんにちは
大変勉強になりましてものすごく感謝しております。
一点教えて頂きたいのですが、QRコードが隣接していてリーダーで狙いずらい場合QRコードの配置を1列目はB、2列目は離した例えばE、3列目は元に戻りBに配置のように奇数列はBに配置、偶数列はEに配置のようにすることは可能でしょうか?
いつもご利用ありがとうございます。
ご質問のQRコードを偶数/奇数行(列を行として読み替えました)で配置する列を変える件につきまして、
対応可能としております。
以下のようにコードを変更し検証いただけますでしょうか。
■変更前
‘B列セルの位置、サイズ情報を取得し変数へ代入します。
With Cells(i, 2)
intTop = .Top ‘セル上部の位置
intLeft = .Left ‘セル左側の位置
intWidth = .Width ‘セル幅のサイズ
intHeight = .Height ‘セル高さのサイズ
End With
■変更後
If i Mod 2 = 0 Then
‘偶数行の場合B列セルの位置、サイズ情報を取得し変数へ代入します。
With Cells(i, 2)
intTop = .Top ‘セル上部の位置
intLeft = .Left ‘セル左側の位置
intWidth = .Width ‘セル幅のサイズ
intHeight = .Height ‘セル高さのサイズ
End With
Else
‘奇数行の場合E列セルの位置、サイズ情報を取得し変数へ代入します。
With Cells(i, 5)
intTop = .Top ‘セル上部の位置
intLeft = .Left ‘セル左側の位置
intWidth = .Width ‘セル幅のサイズ
intHeight = .Height ‘セル高さのサイズ
End With
End If
簡単に大量にQRコードが作成でき、大変ありがたいです。
一つ質問ですが、
作成したQRコードは一切動かせません。
一部を個々に修正したい場合はどうすれば良いでしょうか?
いつもご利用ありがとうございます。
作成したQRコードを修正する件につきまして、公開しているマクロは更新機能を設けておりませんので、
お手数ですが、新規作成を行い、既存のQRコードと差し替えていただきたくお願いいたします。