PC・仕事メモ
PR

【Excel】QRコードのサイズが勝手に変わる原因と対処法|BarCode Control

まなび
記事内に商品プロモーションを含む場合があります

Excelの「Microsoft BarCode Control」で作ったQRコードが、ファイルを開いたら勝手に大きくなったり小さくなったりしていることはありませんか?

私も仕事でQRコード入りのExcelを使っていて、この現象に何度も悩まされました。この記事では、原因と、実際に私が使っている対処法をまとめます。

この記事でわかること

  • QRコードのサイズが変わる原因
  • Excelの設定で防ぐ方法
  • VBAで開くたびに元のサイズに戻す方法(コピペで使えます)
  • ActiveXを使わずにQRコードを作る方法

QRコードの作り方は「Excelでセルの値をQRコードにする方法」で解説しています。

QRコードのサイズが変わる症状

ファイルを作ったときはきれいな正方形だったのに、


↑ こう作ったのに

次に開くと、こうなってしまいます。


↑ こうなってしまう

毎回起きるわけではなく、ときどき起きるのが厄介なところです。別のパソコンで開いたとき、ノートパソコンを外部モニターにつないだときなどに起きやすい印象です。

原因:ActiveXコントロールと画面の解像度

BarCode Controlは「ActiveXコントロール」という古い仕組みの部品です。ActiveXコントロールは、画面の解像度や拡大率が違うパソコンでファイルを開くと、サイズが変わってしまうことがあり、Microsoftも不具合として情報を出しています。

特に次のような環境で起きやすくなります。

  • ノートパソコン+外部モニターなど、複数のディスプレイを使っている
  • Windowsの表示の拡大率(125%、150%など)がパソコンによって違う
  • 作ったパソコンと開くパソコンが違う

そのため、完全に防ぐのは難しく、「起きにくくする」「起きても自動で直す」の組み合わせで対処するのが現実的です。

対処法1:Excelの表示設定を変える

複数のディスプレイを使っている場合は、まずこの設定を試してください。

  1. Excelの[ファイル]→[オプション]→[全般]を開く
  2. 「ユーザーインターフェイスのオプション」の[複数ディスプレイを使用する場合]で、**[互換性に対応した最適化]**を選ぶ
  3. [OK]を押して、Excelを再起動する

これだけで直ることもあります。

対処法2:QRコードをセルに合わせて動かないようにする

行の高さや列の幅を変えたときに、QRコードがつられて伸び縮みしないようにする設定です。

  1. [開発]タブの[デザインモード]をオンにする
  2. QRコードを右クリック →[コントロールの書式設定]
  3. [プロパティ]タブで**[セルに合わせて移動やサイズ変更をしない]**を選ぶ

対処法3:VBAで開くたびにサイズを元に戻す(おすすめ)

1と2をやっても変わってしまう場合は、ファイルを開くたびにVBAでサイズを設定し直す方法が確実です。私はこの方法で運用していて、それ以降サイズが変わる問題は起きていません。

使い方

  1. [Alt]+[F11]でVBAの画面を開く
  2. 左側の「ThisWorkbook」をダブルクリック
  3. 下のコードを貼り付ける
  4. ファイルを**「Excel マクロ有効ブック(*.xlsm)」**形式で保存する

vb

Private Sub Workbook_Open()

    Const QR_SIZE_CM As Double = 2.4   'QRコードの一辺の長さ(cm)。ここを変えればサイズ変更できます

    Dim ws As Worksheet
    Dim oo As OLEObject

    'すべてのシートのQRコードを探してサイズを設定
    For Each ws In ThisWorkbook.Worksheets
        For Each oo In ws.OLEObjects
            If TypeName(oo.Object) = "BarCodeCtrl" Then   'BarCode Controlか?
                If oo.Object.Style = 11 Then              '11 = QRコード
                    oo.Width = Application.CentimetersToPoints(QR_SIZE_CM)
                    oo.Height = Application.CentimetersToPoints(QR_SIZE_CM)
                End If
            End If
        Next oo
    Next ws

End Sub

ポイント

  • サイズは QR_SIZE_CM の数字を変えるだけで調整できます(例:3cmなら 3)
  • 全シートのQRコードが対象なので、シート名を書き換える必要はありません
  • QRコード以外のバーコードはサイズを変えません

マクロが動かないときは
ファイルを開いたときに「セキュリティの警告」が出たら、[コンテンツの有効化]を押してください。メールやネットからダウンロードしたファイルはマクロがブロックされることがあるので、ファイルを右クリック →[プロパティ]→[許可する]にチェックを入れてから開いてください。

QRコードのプロパティが開けないとき

サイズが変わったあとに、QRコードのプロパティが開けなくなることもあります。その場合は、[開発]タブの**[デザインモード]がオンになっているか**確認してください。デザインモードがオフのままだと、右クリックしてもプロパティを選べません。

ActiveXを使わない方法(Microsoft 365)

Microsoft 365のExcelなら、IMAGE関数でQRコードを表示する方法もあります。BarCode Controlを使わないので、サイズが変わる問題やAccessのインストールも不要です。

=IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" & ENCODEURL(A2))

A2セルの内容がQRコードになります。

ただし、次の点に注意してください。

  • インターネットにつながっていないと表示されません
  • QRコードにする内容が外部のサービスに送信されるので、個人情報や社外秘の情報には使わないでください
  • 古いバージョンのExcelではIMAGE関数が使えません

社内で使う場合は、BarCode Control+VBAの方法のほうが安心です。

まとめ

  • QRコードのサイズが変わるのは、ActiveXコントロールが画面の解像度や拡大率の違いに弱いため
  • まずは[互換性に対応した最適化]と[セルに合わせて移動やサイズ変更をしない]を設定
  • それでもだめなら、VBAで開くたびにサイズを戻すのが確実
  • Microsoft 365ならIMAGE関数で作る方法もある

関連記事

記事URLをコピーしました