非プログラマーでもできる!業務の自動化

【Excelでできる】QRコードを用いた在庫管理の方法と効率化|自作・フリーソフト・無料

当ページのリンクの一部に広告が含まれています。

時間も手間もかかる在庫管理を、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 Sub
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 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 Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
Call FindAndActivateCell
End If
End Sub

FindAndActivateCellサブルーチンの中で、操作対象のワークシートを設定します。

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").Value
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").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 If
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 If

処理が完了したら、「処理が完了しました。」というメッセージを表示します。

MsgBox "処理が完了しました。"
MsgBox "処理が完了しました。"

エラーが発生した場合は、エラーの詳細をメッセージボックスで表示します。

On Error GoTo ErrorHandler
ErrorHandler:
MsgBox "エラーが発生しました。エラー内容: " & Err.Description
On Error GoTo ErrorHandler
ErrorHandler:
MsgBox "エラーが発生しました。エラー内容: " & Err.Description

B1セルをアクティブにするVBAマクロのコードの解説

QRコードのSheet1をアクティブ(選択)すると、B1のセルがアクティブ(入力できる状態)になります。

Private Sub Workbook_Activate()
    Sheets("Sheet1").Select
    Range("B2").Select
End Sub

B1セルをアクティブにするVBAマクロのコードの解説

  • マクロ実行時の注意点
  • マクロを実行するための環境設定
Private Sub Workbook_Activate()
    Sheets("Sheet1").Select
    Range("B2").Select
End Sub

VBAエディタを開きます(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 Object
Dim intTop As Long ... Dim objQR As Object

エラーが発生した場合に、エラーメッセージを表示してスクリーンアップデートを再度有効化します。

On Error GoTo ErrorHandler
On Error GoTo ErrorHandler

処理中の画面のチラつきを防ぎ、パフォーマンスを向上させるためにスクリーンアップデートを無効化します。

Application.ScreenUpdating = False
Application.ScreenUpdating = False

A列の最終行の行番号を取得します。

lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row

A列の2行目から最終行までループします。各ループで、A列の値に基づいたQRコードを生成し、AQ列の対応するセルに配置します。

For i = 2 To lastRow ... Next i
For i = 2 To lastRow ... Next i

AQ列のセルの位置とサイズ情報を取得します。

With ActiveSheet.Cells(i, 44) ... End With
With ActiveSheet.Cells(i, 44) ... End With

QRコードを追加するセルのサイズを決定します。幅と高さの小さい方を選びます。

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 With
With objQR.Object ... End With

処理が完了したため、スクリーンアップデートを再度有効化します。

Application.ScreenUpdating = True
Application.ScreenUpdating = True

“完了しました”というメッセージを表示します。

MsgBox "完了しました", vbInformation, "情報"
MsgBox "完了しました", vbInformation, "情報"
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次