時間も手間もかかる在庫管理を、QRコードを使って効率化したい
Excelを使って、QRコードで在庫管理する
時間のかかる現品確認をする実地棚卸。
そんな棚卸作業を効率化するために、Excelのようなスプレッドシートを用いたQRコードによる在庫管理を自作しました。
棚卸の効率化のための、Excelを用いたQRコードによる在庫の管理の方法について、図も使って解説していきます。
自作のQRコードで在庫を管理する
棚卸の効率化のために、在庫品をQRコードで管理することにしました。
難しそうなQRコードですが、実はExcelやテプラで自動で作成できます。
自作のQRコードで在庫を管理する
- QRコードによる在庫管理に必要な物
- 棚卸リスト・表をExcelで作成する
QRコードによる在庫管理に必要な物
自作したQRコードによる在庫管理に必要な物は以下の通りです。
QRコードによる在庫管理に必要な物
- QRコードリーダー
- テプラ
- Excel・パソコン
QRコードをパソコンのカメラで読み込む方法もありますが、Pythonの導入が必要になります。
Pythonの導入がハードルが高いのと、使い勝手の良さから、QRコードリーダーを来入しました。
QRコードリーダーは有線よりもワイヤレスの方が便利なのでおすすめです。
QRコードはテプラで印刷しました。
テプラは下のような、Excelのデータから一括で印刷できるタイプを使うと、Excelで作成したQRコードをパソコン操作で一気にシール作成ができるので、ぜひ利用してください。

今回は在庫管理表やQRコードをExcelで作成するので、Excelとパソコンを用意してください。
自作QRコードによる在庫管理の方法
自作のQRコードを使って在庫管理を行う方法を説明いたします。
自作QRコードによる在庫管理の方法
- 棚卸リスト・表をExcelで作成する
- QRコードを操作するExcelファイルを作成する
- QRコードを作成する
- QRコードを管理在庫に貼る
- QRコードを読み込んで在庫管理をする
棚卸リスト・表をExcelで作成する

Excelで在庫管理表を作成します。
QRコードを操作するExcelファイルを作成する

QRコードを操作するExcelファイルを作成します。
QRコードを作成する
Excelの機能やテプラの機能を使って、QRコードを自作します。
QRコードを管理在庫に貼る
作成したQRコードを管理在庫に貼りつけます。
QRコードを読み込んで在庫管理をする
管理在庫に貼ってあるQRコードをQRコードリーダーで読み込み、Excelの在庫管理表に記入していきます。
QRコード操作ファイルの使い方
【QRコードを読み取り所定のセルにコードが入力されると自動で該当する管理在庫の記入箇所のセルに移動する】マクロ機能を持ったqQRコード操作ファイルを作成しました。
ダウンロードしてお使いください。
QRコード操作ファイルの使い方
- セルに必要な情報を入力
- QRコードを読み込み、在庫管理表を記入していく
セルに必要な情報を入力
QRコード操作ファイルのマクロ機能を使うためには、いくつか情報を入力する必要があります。
セルに必要な情報を入力
- Excelを保存しているフォルダ名
- Excelのファイル名
- Excelのシート名
- 検索する列
- 表示する列
- ①QRコードを読み込む

B5セルに【在庫管理表のExcelを保存しているフォルダ名】を入力してください。

B6セルに【在庫管理表のExcelのファイル名】を入力してください。

B4セルに【在庫管理表のExcelのシート名】を入力してください。

B7セルに、製品コードなどの【在庫管理表でQRコードに設定した読み込むデータが入力されているセル】を入力してください。

B8セルに、個数などの【在庫管理表でQRコードを読み込んだ後に書き込む必要があるセル】を入力してください。
QRコードを読み込み、在庫管理表を記入していく

QRコードを読み、在庫管理表の該当箇所に記入していきます。
QRコードを読み込み、在庫管理表を記入していく
- ①QRコードを読み込む
- ②該当する数量等の情報を入力する
- ①と②を繰り返す
棚卸リストのQRコードを入力する欄をアクティブにします。
在庫のQRコードを読み込みます。
読み込んだ在庫の入力欄がアクティブになるので、必要な情報を入力します。
①と②を繰り返します。
自作QRコードによる在庫管理システムをカスタマイズする
今回ダウンロードできるExcelマクロの処理に機能を追加したい場合は、VBAのコードをカスタイマイズしてください。
VBAマクロのコードのカスタイマイズは、下記のようなサイトでプロに依頼することも可能です。
自作QRコードによる在庫管理の方法のQ&A
- QRコードを使った在庫管理は効率化が可能ですか?
-
一般的な在庫管理の場合、現物の在庫を目視で特定して在庫管理表と照らし合わせる作業が発生します。
この作業には時間も人もかかります。
QRコードを用いることで、この在庫管理表と照らし合わせる作業はQRコードを読み込むだけの一瞬で完了するため、在庫管理の劇的な効率化が可能になります。
- 在庫管理におけるQRコードの導入方法はどのようなものがありますか?
-
在庫管理ソフトウェアの導入: 在庫管理ソフトウェアを導入することで、QRコードを活用した在庫管理が可能となります。
このソフトウェアはQRコードを生成し、商品や在庫の情報を紐付けることができます。スキャンするだけで在庫の追跡や管理が効率的に行えます。
エクセルの管理方法: エクセルを利用してQRコードを管理する方法もあります。
エクセルで在庫管理表を作成し、各商品に対して固有のQRコードを割り当てます。
QRコードを印刷して商品に貼り付けることで、在庫の追跡や管理が簡単になります。
QRコードをスキャンしてエクセル上の在庫情報を更新することも可能です。
- QRコードを使った在庫管理は、どのようなメリットがありますか?
-
QRコードを使用することで、在庫管理作業が迅速かつ正確に行えます。
QRコードを読み込むだけで、商品や在庫の情報を瞬時に取得できます。
手作業に比べて作業時間が短縮され、人的ミスも減少します。
- QRコードを使った在庫管理は、どのようなデメリットがありますか?
-
QRコードを活用するためには、スキャンするための専用のハードウェア(スキャナーやスマートフォン)やソフトウェアが必要です。
これらの導入にはコストや学習コストがかかる場合があります。
- QRコードを導入した在庫管理は、どのような手順で行われますか?
-
「自作QRコードによる在庫管理の方法」をご覧ください。
- QRコードを使った在庫管理の導入において注意すべき点はありますか?
-
システムの整合性: QRコードを活用する在庫管理システムを導入する場合、既存のシステムとの整合性を確保する必要があります。
データの連携や統合、システムの互換性について検討し、スムーズなデータの流れを確保します。
QRコードの設計と配置: QRコードは正確にスキャンされるために適切な設計と配置が重要です。QRコードのサイズや印刷品質、配置位置などを検討し、スキャンの正確性を向上させるようにします。
トレーニングと教育: 新たな在庫管理システムやQRコードの導入に伴い、従業員へのトレーニングや教育が必要です。正しいQRコードのスキャン方法やシステムの操作方法を従業員に理解させることで、効果的な導入とスムーズな運用が可能になります。
まとめ:自作QRコードによる在庫管理で実地棚卸の効率化
自作のQRコードによる在庫管理によって、実地棚卸を効率化する方法でした。
読み取ったQRコードから該当する在庫の記入欄をアクティブにするVBAマクロのコード
このコードは、B1にQRコードで読み取った情報を入力されると、マクロが実行されます。
セルの変更により、FindAndActivateCellというサブルーチン(関数)が呼び出され、以下の一連の動作を開始します。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' B1セルが変更されたときにFindAndActivateCell関数を呼び出す
If Target.Address = "$B$1" Then
Call FindAndActivateCell
End If
End Sub
Sub FindAndActivateCell()
' 変数の定義
Dim wsQRCode As Worksheet
Dim wbDB As Workbook
Dim wsDB As Worksheet
Dim rngSearch As Range
Dim cellFound As Range
Dim searchColumn As String
Dim activateColumn As String
' ワークシートの参照設定
Set wsQRCode = ThisWorkbook.Worksheets("Sheet1")
' エラーハンドリングの開始
On Error GoTo ErrorHandler
' DBブックを開く
Set wbDB = Workbooks.Open(wsQRCode.Range("B3").Value)
Set wsDB = wbDB.Worksheets(wsQRCode.Range("B4").Value)
' QRコードワークブックから検索値、検索列、表示列を取得
Dim searchValue As Variant: searchValue = wsQRCode.Range("B1").Value
searchColumn = wsQRCode.Range("B7").Value
activateColumn = wsQRCode.Range("B8").Value
' DBワークブックの検索範囲設定
Set rngSearch = wsDB.Columns(searchColumn)
' 検索値を検索範囲内で探す
Set cellFound = rngSearch.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
' 検索値が見つかった場合、指定列の対応するセルをアクティブにする
If Not cellFound Is Nothing Then
wsDB.Range(activateColumn & cellFound.Row).Select
Else
MsgBox "検索値が見つかりませんでした。"
End If
' 処理が完了したらメッセージボックスを表示
MsgBox "処理が完了しました。"
' ここで処理を終了
Exit Sub
ErrorHandler:
' エラーが発生したらメッセージボックスで通知
MsgBox "エラーが発生しました。エラー内容: " & Err.Description
End SubOption Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' B1セルが変更されたときにFindAndActivateCell関数を呼び出す
If Target.Address = "$B$1" Then
Call FindAndActivateCell
End If
End Sub
Sub FindAndActivateCell()
' 変数の定義
Dim wsQRCode As Worksheet
Dim wbDB As Workbook
Dim wsDB As Worksheet
Dim rngSearch As Range
Dim cellFound As Range
Dim searchColumn As String
Dim activateColumn As String
' ワークシートの参照設定
Set wsQRCode = ThisWorkbook.Worksheets("Sheet1")
' エラーハンドリングの開始
On Error GoTo ErrorHandler
' DBブックを開く
Set wbDB = Workbooks.Open(wsQRCode.Range("B3").Value)
Set wsDB = wbDB.Worksheets(wsQRCode.Range("B4").Value)
' QRコードワークブックから検索値、検索列、表示列を取得
Dim searchValue As Variant: searchValue = wsQRCode.Range("B1").Value
searchColumn = wsQRCode.Range("B7").Value
activateColumn = wsQRCode.Range("B8").Value
' DBワークブックの検索範囲設定
Set rngSearch = wsDB.Columns(searchColumn)
' 検索値を検索範囲内で探す
Set cellFound = rngSearch.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
' 検索値が見つかった場合、指定列の対応するセルをアクティブにする
If Not cellFound Is Nothing Then
wsDB.Range(activateColumn & cellFound.Row).Select
Else
MsgBox "検索値が見つかりませんでした。"
End If
' 処理が完了したらメッセージボックスを表示
MsgBox "処理が完了しました。"
' ここで処理を終了
Exit Sub
ErrorHandler:
' エラーが発生したらメッセージボックスで通知
MsgBox "エラーが発生しました。エラー内容: " & Err.Description
End SubセルB3とB4から情報を取得し、それに基づいて特定のExcelワークブックを開き、特定のワークシートを選択します。
セルB1の値を検索値として使用し、B7セルの値を参照して検索範囲を設定します。
検索値を検索範囲内で探し、該当するセルが見つかった場合は、そのセルの行と同じ行にある、B8セルの値に対応する列のセルを選択(アクティブ化)します。
検索値が見つからなかった場合、エラーメッセージを表示します。
処理が完了したら、「処理が完了しました。」というメッセージを表示します。
また、このコードはエラーハンドリング機能を備えており、何らかのエラーが発生した場合はエラーの詳細をメッセージボックスで通知します。
マクロ実行時の注意点
データが大量にある場合、検索処理に時間がかかる可能性があります。これは、Findメソッドがセルを一つずつ調べていくためです。
エクセルファイルが他のプロセスによって開かれている場合、ワークブックを開く操作が失敗する可能性があります。
マクロを実行するための環境設定
このコードは、Sheet1に記載してください。
このコードは特定のセル(B1, B3, B4, B7, B8)の値を参照しますので、それぞれのセルに適切な値が入力されている必要があります。
セルB3には開きたいワークブックのフルパス(例:”C:\path\to\your\workbook.xlsx”)、B4にはそのワークブック内のワークシート名(例:”Sheet1″)、B7とB8には列の名前(例:”A”)が入力されていることを確認してください。
各コードの解説
以下に各コードの解説を行います。
各コードの解説
- セル変更の検知
- ワークシートの参照設定
- ブックの開き、ワークシートの選択
- 検索値と列の設定
- 検索範囲の設定と検索
- 完了メッセージの表示
- エラーハンドリング
ワークシート上の特定のセル(B1)が変更されたときに、FindAndActivateCellというサブルーチンを呼び出します。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
Call FindAndActivateCell
End If
End SubPrivate Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
Call FindAndActivateCell
End If
End SubFindAndActivateCellサブルーチンの中で、操作対象のワークシートを設定します。
Sub FindAndActivateCell()
Dim wsQRCode As Worksheet
Set wsQRCode = ThisWorkbook.Worksheets("Sheet1")Sub FindAndActivateCell()
Dim wsQRCode As Worksheet
Set wsQRCode = ThisWorkbook.Worksheets("Sheet1")セルB3とB4の値からワークブックのパスとワークシート名を取得し、そのワークブックを開き、指定のワークシートを選択します。
Dim wbDB As Workbook
Dim wsDB As Worksheet
Set wbDB = Workbooks.Open(wsQRCode.Range("B3").Value)
Set wsDB = wbDB.Worksheets(wsQRCode.Range("B4").Value)Dim wbDB As Workbook
Dim wsDB As Worksheet
Set wbDB = Workbooks.Open(wsQRCode.Range("B3").Value)
Set wsDB = wbDB.Worksheets(wsQRCode.Range("B4").Value)セルB1、B7、B8の値をそれぞれ検索値、検索列、アクティブ化する列として設定します。
Dim searchValue As Variant: searchValue = wsQRCode.Range("B1").Value
Dim searchColumn As String: searchColumn = wsQRCode.Range("B7").Value
Dim activateColumn As String: activateColumn = wsQRCode.Range("B8").ValueDim searchValue As Variant: searchValue = wsQRCode.Range("B1").Value
Dim searchColumn As String: searchColumn = wsQRCode.Range("B7").Value
Dim activateColumn As String: activateColumn = wsQRCode.Range("B8").Value検索範囲を設定し、その範囲内で検索値を探します。見つかった場合は、そのセルを選択します。
Dim rngSearch As Range
Set rngSearch = wsDB.Columns(searchColumn)
Dim cellFound As Range
Set cellFound = rngSearch.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
If Not cellFound Is Nothing Then
wsDB.Range(activateColumn & cellFound.Row).Select
Else
MsgBox "検索値が見つかりませんでした。"
End IfDim rngSearch As Range
Set rngSearch = wsDB.Columns(searchColumn)
Dim cellFound As Range
Set cellFound = rngSearch.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
If Not cellFound Is Nothing Then
wsDB.Range(activateColumn & cellFound.Row).Select
Else
MsgBox "検索値が見つかりませんでした。"
End If処理が完了したら、「処理が完了しました。」というメッセージを表示します。
MsgBox "処理が完了しました。"MsgBox "処理が完了しました。"エラーが発生した場合は、エラーの詳細をメッセージボックスで表示します。
On Error GoTo ErrorHandler
ErrorHandler:
MsgBox "エラーが発生しました。エラー内容: " & Err.DescriptionOn Error GoTo ErrorHandler
ErrorHandler:
MsgBox "エラーが発生しました。エラー内容: " & Err.DescriptionB1セルをアクティブにするVBAマクロのコードの解説
QRコードのSheet1をアクティブ(選択)すると、B1のセルがアクティブ(入力できる状態)になります。
Private Sub Workbook_Activate()
Sheets("Sheet1").Select
Range("B2").Select
End SubB1セルをアクティブにするVBAマクロのコードの解説
- マクロ実行時の注意点
- マクロを実行するための環境設定
Private Sub Workbook_Activate()
Sheets("Sheet1").Select
Range("B2").Select
End SubVBAエディタを開きます(Excel上部のメニューで「開発」タブを選択し、「Visual Basic」ボタンをクリックします。もしくは、Alt + F11キーを押します)。
プロジェクトエクスプローラでThisWorkbookを右クリックし、「表示コード」を選択します。
その後、上記のコードをコードウィンドウにペーストします。
マクロ実行時の注意点
マクロを実行するための環境設定
このコードはThisWorkBookに記載してください。
ExcelのセルのデータからQRコードを自動生成するVBAマクロのコードの解説
ExcelのセルのデータからQRコードを自動生成するVBAマクロのコードの解説
- アクティブなシートが対象
- ダイアログでオープンしたExcelファイルが対象
- マクロ実行時の注意点
- マクロを実行するための環境設定
- 各コードの解説
アクティブなシートが対象
Sub バーコードを生成する()
' 変数宣言
Dim intTop As Long
Dim intLeft As Long
Dim intSize As Long
Dim i As Long
Dim lastRow As Long
Dim objQR As Object
' エラー処理
On Error GoTo ErrorHandler
' スクリーンアップデートを無効化
Application.ScreenUpdating = False
' A列最終行を取得
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
' A列2行目から最終行までループ
For i = 2 To lastRow
' AQ列セルの位置とサイズ情報を取得
With ActiveSheet.Cells(i, 44)
intTop = .Top
intLeft = .Left
' QRコードを追加するセルのサイズを決定(幅と高さの小さい方)
intSize = WorksheetFunction.Min(.Width, .Height)
End With
' BARCODE.BarCodeCtrlタイプのOLEオブジェクトを追加
Set objQR = ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=intLeft + 2, Top:=intTop + 2, Width:=intSize - 2, Height:=intSize - 2)
' バーコードコントロールのプロパティ設定
With objQR.Object
.Style = 11 ' QRコード
.Value = ActiveSheet.Cells(i, 1).Value ' A列の値をValueプロパティに設定
End With
Next i
' スクリーンアップデートを有効化
Application.ScreenUpdating = True
' 完了メッセージ表示
MsgBox "完了しました", vbInformation, "情報"
Exit Sub
ErrorHandler: ' エラーハンドリング
' エラーメッセージ表示
MsgBox "エラーが発生しました。" & vbCrLf & Err.Description, vbCritical, "エラー"
' スクリーンアップデートを有効化
Application.ScreenUpdating = True
End Subアクティブなシートが対象
- 変数宣言
- エラーハンドリング設定
- スクリーンアップデート無効化
Sub バーコードを生成する()
' 変数宣言
Dim intTop As Long
Dim intLeft As Long
Dim intSize As Long
Dim i As Long
Dim lastRow As Long
Dim objQR As Object
' エラー処理
On Error GoTo ErrorHandler
' スクリーンアップデートを無効化
Application.ScreenUpdating = False
' A列最終行を取得
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
' A列2行目から最終行までループ
For i = 2 To lastRow
' AQ列セルの位置とサイズ情報を取得
With ActiveSheet.Cells(i, 44)
intTop = .Top
intLeft = .Left
' QRコードを追加するセルのサイズを決定(幅と高さの小さい方)
intSize = WorksheetFunction.Min(.Width, .Height)
End With
' BARCODE.BarCodeCtrlタイプのOLEオブジェクトを追加
Set objQR = ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=intLeft + 2, Top:=intTop + 2, Width:=intSize - 2, Height:=intSize - 2)
' バーコードコントロールのプロパティ設定
With objQR.Object
.Style = 11 ' QRコード
.Value = ActiveSheet.Cells(i, 1).Value ' A列の値をValueプロパティに設定
End With
Next i
' スクリーンアップデートを有効化
Application.ScreenUpdating = True
' 完了メッセージ表示
MsgBox "完了しました", vbInformation, "情報"
Exit Sub
ErrorHandler: ' エラーハンドリング
' エラーメッセージ表示
MsgBox "エラーが発生しました。" & vbCrLf & Err.Description, vbCritical, "エラー"
' スクリーンアップデートを有効化
Application.ScreenUpdating = True
End SubダイアログでオープンしたExcelファイルが対象
Sub バーコードを生成する()
' ファイルを選択
Dim strFilePath As String
strFilePath = Application.GetOpenFilename("Excelファイル(*.xls;*.xlsx),*.xls;*.xlsx")
' ファイルが選択されなかった場合は処理を終了
If strFilePath = "False" Then Exit Sub
' ワークブックを開く
Dim wb As Workbook
Set wb = Workbooks.Open(strFilePath)
' 処理対象のシートを選択(ここでは最初のシートを選択)
Dim ws As Worksheet
Set ws = wb.Sheets(1)
' 変数宣言
Dim intTop As Long
Dim intLeft As Long
Dim intSize As Long
Dim i As Long
Dim lastRow As Long
Dim objQR As Object
' エラー処理
On Error GoTo ErrorHandler
' スクリーンアップデートを無効化
Application.ScreenUpdating = False
' A列最終行を取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' A列2行目から最終行までループ
For i = 2 To lastRow
' AQ列セルの位置とサイズ情報を取得
With ws.Cells(i, 44)
intTop = .Top
intLeft = .Left
' QRコードを追加するセルのサイズを決定(幅と高さの小さい方)
intSize = WorksheetFunction.Min(.Width, .Height)
End With
' BARCODE.BarCodeCtrlタイプのOLEオブジェクトを追加
Set objQR = ws.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=intLeft + 2, Top:=intTop + 2, Width:=intSize - 2, Height:=intSize - 2)
' バーコードコントロールのプロパティ設定
With objQR.Object
.Style = 11 ' QRコード
.Value = ws.Cells(i, 1).Value ' A列の値をValueプロパティに設定
End With
Next i
' スクリーンアップデートを有効化
Application.ScreenUpdating = True
' 完了メッセージ表示
MsgBox "完了しました", vbInformation, "情報"
Exit Sub
ErrorHandler: ' エラーハンドリング
' エラーメッセージ表示
MsgBox "エラーが発生しました。" & vbCrLf & Err.Description, vbCritical, "エラー"
' スクリーンアップデートを有効化
Application.ScreenUpdating = True
End SubダイアログでオープンしたExcelファイルが対象
- 変数宣言
- エラーハンドリング設定
- スクリーンアップデート無効化
- A列最終行取得
Sub バーコードを生成する()
' ファイルを選択
Dim strFilePath As String
strFilePath = Application.GetOpenFilename("Excelファイル(*.xls;*.xlsx),*.xls;*.xlsx")
' ファイルが選択されなかった場合は処理を終了
If strFilePath = "False" Then Exit Sub
' ワークブックを開く
Dim wb As Workbook
Set wb = Workbooks.Open(strFilePath)
' 処理対象のシートを選択(ここでは最初のシートを選択)
Dim ws As Worksheet
Set ws = wb.Sheets(1)
' 変数宣言
Dim intTop As Long
Dim intLeft As Long
Dim intSize As Long
Dim i As Long
Dim lastRow As Long
Dim objQR As Object
' エラー処理
On Error GoTo ErrorHandler
' スクリーンアップデートを無効化
Application.ScreenUpdating = False
' A列最終行を取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' A列2行目から最終行までループ
For i = 2 To lastRow
' AQ列セルの位置とサイズ情報を取得
With ws.Cells(i, 44)
intTop = .Top
intLeft = .Left
' QRコードを追加するセルのサイズを決定(幅と高さの小さい方)
intSize = WorksheetFunction.Min(.Width, .Height)
End With
' BARCODE.BarCodeCtrlタイプのOLEオブジェクトを追加
Set objQR = ws.OLEObjects.Add(ClassType:="BARCODE.BarCodeCtrl.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=intLeft + 2, Top:=intTop + 2, Width:=intSize - 2, Height:=intSize - 2)
' バーコードコントロールのプロパティ設定
With objQR.Object
.Style = 11 ' QRコード
.Value = ws.Cells(i, 1).Value ' A列の値をValueプロパティに設定
End With
Next i
' スクリーンアップデートを有効化
Application.ScreenUpdating = True
' 完了メッセージ表示
MsgBox "完了しました", vbInformation, "情報"
Exit Sub
ErrorHandler: ' エラーハンドリング
' エラーメッセージ表示
MsgBox "エラーが発生しました。" & vbCrLf & Err.Description, vbCritical, "エラー"
' スクリーンアップデートを有効化
Application.ScreenUpdating = True
End Subマクロ実行時の注意点
データが大量にある場合、QRコードの生成に時間がかかる可能性があります。スクリーンアップデートを無効化しているため、Excelは処理が完了するまで応答しない可能性があります。
生成されたQRコードはOLEオブジェクトとしてシートに追加されるため、大量のQRコードを生成するとExcelファイルが重くなる可能性があります。
マクロ実行時の注意点
- 変数宣言
- エラーハンドリング設定
- スクリーンアップデート無効化
- A列最終行取得
- QRコード生成ループ
マクロを実行するための環境設定
BARCODE.BarCodeCtrl.1というActiveXコントロールを使用していますので、これがシステムにインストールされている必要があります。このコントロールはバーコードを生成するためのもので、通常は専用のソフトウェアをインストールすることで利用可能になります。
マクロを実行するための環境設定
- 変数宣言
- エラーハンドリング設定
- スクリーンアップデート無効化
- A列最終行取得
- QRコード生成ループ
- AQ列セル情報取得
各コードの解説
以下に各コードの解説を行います。
各コードの解説
- 変数宣言
- エラーハンドリング設定
- スクリーンアップデート無効化
- A列最終行取得
- QRコード生成ループ
- AQ列セル情報取得
- QRコードサイズ決定
必要な変数を宣言します。
Dim intTop As Long ... Dim objQR As ObjectDim intTop As Long ... Dim objQR As Objectエラーが発生した場合に、エラーメッセージを表示してスクリーンアップデートを再度有効化します。
On Error GoTo ErrorHandlerOn Error GoTo ErrorHandler処理中の画面のチラつきを防ぎ、パフォーマンスを向上させるためにスクリーンアップデートを無効化します。
Application.ScreenUpdating = FalseApplication.ScreenUpdating = FalseA列の最終行の行番号を取得します。
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).RowlastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).RowA列の2行目から最終行までループします。各ループで、A列の値に基づいたQRコードを生成し、AQ列の対応するセルに配置します。
For i = 2 To lastRow ... Next iFor i = 2 To lastRow ... Next iAQ列のセルの位置とサイズ情報を取得します。
With ActiveSheet.Cells(i, 44) ... End WithWith ActiveSheet.Cells(i, 44) ... End WithQRコードを追加するセルのサイズを決定します。幅と高さの小さい方を選びます。
intSize = WorksheetFunction.Min(cellWidth, cellHeight)intSize = WorksheetFunction.Min(cellWidth, cellHeight)BARCODE.BarCodeCtrlタイプのOLEオブジェクトを追加します。これがQRコードです。
Set objQR = ActiveSheet.OLEObjects.Add(...)Set objQR = ActiveSheet.OLEObjects.Add(...)バーコードコントロールのプロパティを設定します。スタイルを11(QRコード)に設定し、A列の値をValueプロパティに設定します。
With objQR.Object ... End WithWith objQR.Object ... End With処理が完了したため、スクリーンアップデートを再度有効化します。
Application.ScreenUpdating = TrueApplication.ScreenUpdating = True“完了しました”というメッセージを表示します。
MsgBox "完了しました", vbInformation, "情報"MsgBox "完了しました", vbInformation, "情報"















コメント