こんにちは、今回の記事はExcelで配置したQRコードのサイズが勝手に変わってしまう件についてです。
とある日に、ExcelでQRコードをMicrosoft Barcode Contorol 16.0を利用して作成・配置して保存しました。次の日に開くと勝手に大きくなっているではないですか!割と長い時間悩んだんで、この件を記事にすることにしました。
具体的な事象としては、以下の通りです。
- QRコードを作成して配置、保存するとQRコードのサイズが変わる(縦横93.75になる)
- 複数シートが存在し、QRコードが配置してあると事象が起こりやすい気がする
- デザインモードに切り替えると一時的にサイズは戻るが、デザインモードを終了するとまたサイズが変わる
手動でサイズを戻す方法とマクロで対処する方法をまとめてみました。それでは、いってみましょう!
手動でサイズを戻す運用対処
マクロを使わず手作業で対処した時の手順を載せています。QRコード配置から記載していますので、不必要なところは読み飛ばしていただければと思います。
①QRコード配置
まずは、QRコードを配置する手順からです。※既に配置済の場合は必要ない手順となりますが、一応載せておきます。
- [開発]タブ > [挿入] > [コントロールの選択](ドライバのようなツールマーク)
- [Microsoft Barcode Contorol 16.0]を選択 > [OK]ボタン
- バーコードをドラッグ&ドロップで配置
- 配置したバーコードを右クリック > [Microsoft Barcode Contorol 16.0オブジェクト] > [プロパティ]
- [スタイル]を[11-QRコード]で選択 > [OK]ボタン
- 配置したQRコードを右クリック > [プロパティ] > 値などを設定
ここで、配置したQRコードのサイズをドラッグ&ドロップのマウス操作で変更したのですが、プロパティ値が「93.75」のデフォルト値?のままになっているという事に気付きました。(93.75=3.13cmで明らかにそのサイズではない。)
恐らく、マウス操作で大きさを変更したにも関わらず、プロパティのHeight・Width値が合わせて変更されなかったことが原因っぽいのですが。見た目のサイズとサイズ情報として持っている値が違うみたいなイメージです。
プロパティのHeightとWidthをピクセル単位で指定しても良いですが、マウス操作の方がサイズを感覚的に指定しやすいので、その方向で戻していきたいと思います。
②変わってしまったQRコードのサイズを戻す
この時点でExcelの画面上に表示されているサイズと、プロパティ情報として保持している値が異なる状態なので、ここを整えます。
- [開発]タブ > [デザインモード]をクリックで一旦デザインモードを終了※デザインモードでない場合は、この手順は必要ないです。
- [開発]タブ > [デザインモード]をクリックでもう一度デザインモードへ
- QRコードを少し移動させてみる
- [開発]タブ > [デザインモード]でデザインモードを終了する
これで、プロパティ値が更新されサイズが元にもどりました。ですが、新しいシートやQRコード配置のタイミングなのか、ふとした瞬間にまた93.75サイズに戻ってしまうという事も起きました。
VBAマクロでサイズを整える対処
VBAマクロでQRコードのサイズを整えるサンプルマクロを紹介します。
QRコードの名前を指定してサイズを指定するサンプルマクロ
OLEオブジェクトの縦・横のサイズを60に指定するサンプルマクロです。
Worksheets("シート名").OLEObjects("QRコードの名前").Height = 60
Worksheets("シート名").OLEObjects("QRコードの名前").Width = 60
シート名とQRコードの名前(オブジェクト名)を具体的に指定してみると、「Worksheets("Sheet1").OLEObjects("BarCodeCtrl1").Width = 60」といった感じです。Sheet1というシートに配置された"BarCodeCtrl1"という名前のQRコードをサイズは60にしています。60の値を変更することでサイズ変わります。
QRコードの名前の確認方法は?
どうすれば良いのか気になる方もいらっしゃるかもしれません。簡単な方法は、デザインモードでQRを選択します。画面左上のセルA1の上に名前が表示されます。

シートに配置されたQRコードすべてを同じサイズに整えるサンプルマクロ
先ほどは、ピンポイントでQRコードを指定してのサイズ変更でしたが、今回はシートの中のQRコードのサイズを60に設定するマクロです。
Dim OLEObj As OLEObject
For Each OLEObj In Worksheets("シート名").OLEObjects
If OLEObj.Name Like "BarCodeCtrl*" Then
OLEObj.Height = 60
OLEObj.width = 60
End If
Next
サイズを整えたいQRコードが配置されているシート名をシート名の所に。また、オブジェクト名は、"BarBarCodeCtrl1", "BarBarCodeCtrl2"と割り当てられることが多いので、オブジェクト名が"BarBarCodeCtrl"+任意文字だったらという条件にしていますが、オブジェクト名を変更している場合、それに合わせて変えれば良いかなと思います。
さいごに
いかがだったでしょうか。同じような疑問を持たれている方の参考になれば幸いです。