エクセルQRコード作成マクロ!大量一括生成と文字化け対策

Web APIとVBAを活用して文字化けやエラーを防ぐエクセルQRコード自動作成のイメージ図

SkillStack Lab 運営者の「スタック」です。

日々の業務で商品管理台帳の整理や、イベント参加者のチケット管理などをしていると、エクセルにある数千件の顧客データやURLリストから、QRコードを一括で作成したいという場面に遭遇することはよくあります。

手作業で一つずつWebサイトで作って貼り付けるのは現実的ではありませんし、かといって専用の有料ソフトを導入する決裁も下りない……そんな時、多くの人がたどり着くのが「マクロ(VBA)での自動化」や「関数の活用」です。

手作業の限界や、日本語の文字化け、PC間の互換性トラブルを示すイラスト

しかし、いざ自分でやってみると、「アルファベットはできるのに日本語を入れた途端に文字化けする」「画面上では綺麗に見えるのに、スマホで読み取れない」「会社の別のPCで開いたらエラーが出た」といった、根深いトラブルに悩まされることも少なくありません。

特に、ネット上の古い情報を参考にActiveXコントロールを使ってしまい、後戻りできなくなるケースは非常に多いのです。

この記事では、技術的な落とし穴を回避し、現場で確実に使えるQRコード生成ノウハウを、失敗談も交えながら徹底的に解説します。

この記事で分かること
  • Web API連携により、環境やバージョンに依存せず安定してQRコードを生成する具体的な手法
  • 最新のIMAGE関数を活用し、VBAコードを一切書かずに大量作成するモダンな方法
  • 「読み取れない」「文字化けする」といったトラブルの技術的な根本原因と解決策
  • かつての主流「ActiveXコントロール」が、なぜ現在は非推奨とされるのかの技術的背景
目次

エクセルでQRコード作成マクロを実装する推奨手法

エクセルで大量のQRコードを扱うアプローチはいくつか存在しますが、2020年代の現代において、安定性とコストパフォーマンスのバランスが最も取れているのは「Web API」を活用する方法です。

なぜローカル機能ではなくWeb技術を使うべきなのか、具体的な実装イメージと共に解説していきますね。

エクセル(クライアント)がWeb APIサーバーにリクエストを送り、QR画像を受け取る仕組みの図解

Web APIで無料かつ一括生成する方法

インターネット常時接続が当たり前の今、私が最も推奨するのはRESTful APIを利用した画像生成モデルです。

これは、エクセルを単なる「依頼者(クライアント)」として使い、複雑なQRコード生成処理は外部の専門サーバーに任せるという方法です。

この手法の最大のメリットは、「環境非依存性」にあります。

ローカルPCに特別なフォントやDLLファイルをインストールする必要がないため、作成したマクロ付きエクセルファイルを同僚に渡しても、「私のPCでは動かない」というトラブルが起きません。

推奨される主要APIプロバイダ比較

SEOの観点やサービスの持続性を考慮すると、利用するAPI選びは重要です。

かつて定番だったGoogle Chart APIは現在非推奨となっているため、以下の2つが現代のスタンダードと言えます。

API名エンドポイント例特徴・推奨理由
QRServerhttps://www.google.com/search?q=api.qrserver.com登録不要で利用でき、商用利用の制限も明確には設けられていません。パラメータがシンプルで扱いやすく、HTTPS対応でセキュアな通信が可能です。
QuickChartquickchart.ioオープンソースベースで、旧Google Chart APIとの互換性が高いのが特徴。カスタマイズ性が高く、ロゴの埋め込みなども可能です。

これらのAPIに対して、https://api.qrserver.com/v1/create-qr-code/?data=テスト のようなリクエストを送るだけで、QRコード画像が生成されます。

VBAではこのURLを組み立てるだけで済むため、コード量が劇的に減ります。

IMAGE関数を活用した効率的な作成術

もしあなたの会社の環境が「Microsoft 365」や「Excel 2021」以降であれば、VBAマクロすら不要になる可能性があります。

新しく追加された IMAGE関数 を使えば、関数だけでWeb上の画像をセル内に表示できるからです。

使い方は非常にシンプルです。A列にURLやテキストデータがあるとして、B列に以下のような数式を入力します。

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

エクセルシート上でIMAGE関数とAPIを組み合わせてQRコードを表示している操作画面

これだけで、A2セルの内容に対応したQRコードがB2セルに表示されます。オートフィル機能を使えば、1万件のデータでも数秒でQRコード化が完了します。これは革命的な便利さです。

IMAGE関数の制限事項

この関数で表示される画像は、セル内にレンダリングされているだけで、実体としての画像ファイル(オブジェクト)ではありません。

そのため、「画像を右クリックして保存」したり、「画像の位置を微調整して印刷レイアウトを作る」といった細かい制御には不向きです。あくまで「閲覧用・簡易リスト用」として割り切るのがコツです。

セキュリティポリシー対応と完全オフライン対応(リンク切れ防止)のメリットを示す比較図

アドインを使わず画像を埋め込むメリット

「QR4Office」などの便利なアドインも存在しますが、私は業務利用においては「VBAを使って画像を埋め込む(Shapes.AddPicture)」手法をおすすめしています。

理由は大きく2つあります。

  1. セキュリティポリシーの壁: 多くの企業では、ストアアプリや勝手なアドインのインストールが情シス部門によってブロックされています。
  2. 完全なオフライン対応: IMAGE関数やAPIのURLリンクだけでは、ネット環境がない場所でファイルを開いた時に画像が表示されません。

VBAを使ってWeb APIから取得した画像データを、LinkToFile:=msoFalseSaveWithDocument:=msoTrue という設定でシートに貼り付けると、画像データそのものがエクセルファイル内部に保存されます。

これにより、ファイルをメール添付で送付してもリンク切れを起こさず、完全に自立したファイルとして扱えるようになります。

32bitと64bit Officeの不一致によるクラッシュやバージョン依存エラーの図解

ActiveXコントロールが非推奨な理由

ネットで検索すると、まだ多くの記事で「Microsoft Barcode Control 16.0」などのActiveXコントロールを使う方法が紹介されています。

しかし、これは現代のIT環境においては「互換性の地雷原」とも言える危険な選択肢です。

64bit環境とバージョン管理の複雑さ

最大の課題は、WindowsやOfficeの「ビット数(32bit/64bit)」と「バージョン」の組み合わせによる動作不良です。

ActiveXコントロールの多くは32bitアーキテクチャ時代に設計されており、現在の主流である64bit版Officeでは正常に動作しない、あるいはオブジェクト自体がロードできないという事例が多発しています。

よくあるトラブル事例

  • 自分のPC(Office 2016)で作ったファイルを上司(Microsoft 365)に送ったら、「クラスが登録されていません」とエラーが出て開けなかった。
  • セルのサイズを変更したら、QRコードの縦横比が勝手に変わり、読み取れなくなった。
  • マクロを実行したらエクセル自体が強制終了(クラッシュ)した。

これらの問題を回避するためにも、OS標準機能に依存するActiveXの使用は避け、Web技術ベースの手法に移行するのが賢明です。

VBAで大量データを自動処理する手順

では、APIを利用してVBAで一括作成する場合の具体的な処理フローを整理しましょう。

安定稼働のためには、単にループさせるだけでなく、いくつかの工夫が必要です。

  1. 画面更新の停止: Application.ScreenUpdating = False を設定し、処理速度を向上させます。
  2. データ範囲のループ: 最終行を取得し、1行ずつ処理を行います。
  3. 同期通信でのダウンロード: XMLHTTP オブジェクトなどを使い、APIから画像バイナリデータを取得します。
  4. 一時保存と挿入: 取得したデータを一時フォルダ(Temp)に保存し、Shapes.AddPicture でシートに挿入します。
  5. 位置調整: セルの Top, Left, Width, Height プロパティを取得し、画像をセルの中央に配置する計算を行います。
  6. 待機処理(重要): サーバーへの負荷集中を防ぎ、かつ受信エラーを回避するため、0.1秒~0.5秒程度のウェイト(Sleep関数など)を必ず入れます。

このロジックを組むことで、1000件程度のデータであれば、コーヒーを飲んでいる間にミスなく生成が完了します。

💡 ネットのコードをコピペしても、エラーが出た時に自分で直せず困っていませんか?

ブログのテキストや分厚い専門書でVBAのコードを解読するのは、実は非常にハードルが高く、9割の人が途中で挫折してしまいます。

確実に実務で使えるスキルを身につけるなら、文字を追うのではなく「プロの画面の動きを動画でそのまま真似する」のが一番の近道です。

元社内SEの視点で、小難しい理論は抜きにして、明日からの面倒な手作業を劇的にラクにする「超・実践的なUdemy神講座」だけを厳選しました。

※Udemyは頻繁に90%OFFセール(1,500円前後)を行っています。絶対に定価では買わず、まずはセールが開催されていないかチェックして、賢く自己投資を始めてみてください!

\ 本でのVBA独学から卒業するなら /

👉 本で挫折した人必見!実務直結のVBAをUdemyで学ぶおすすめ神講座3選

エクセルQRコード作成マクロの不具合と解決策

自動化の仕組みができても、実際に運用を始めると「読み取れない」「文字化けする」といった壁にぶつかることがあります。

これらはエクセルの不具合ではなく、QRコードやWeb通信の技術的な仕様理解不足が原因であることがほとんどです。

日本語データが文字化けする原因と対策

「URLや英数字は問題ないのに、日本語を含めると読み取った時に文字化けする」。これは日本国内のユーザーが最も頻繁に遭遇する問題です。

原因は、VBA(Shift-JIS)とWeb API(UTF-8)の文字コードの不一致です。

VBA上の文字列「あ」をそのままAPIのURLパラメータとして送ると、サーバー側はそれを正しく解釈できません。

Shift-JISとUTF-8の文字コード不一致による文字化けと、ADODB.Streamによる変換フローの図

ADODB.Streamによるエンコード処理

この問題を解決するには、VBA標準の関数ではなく、ADODB.Stream オブジェクトを使用して、文字列を明示的にUTF-8のバイト列に変換する必要があります。

その上で、Webで使える形式(%E3%81%82…のようなパーセントエンコーディング)に変換する自作関数をマクロに組み込むのが定石です。

これを実装しない限り、APIを使った日本語QRコードの生成は不可能です。

作成したコードが読み取れない時の確認点

「印刷したQRコードが読み取れない」というクレームが現場から来た場合、疑うべきはデータではなく「QRコードの物理的な仕様設定」です。

QRコードには、汚れや破損があってもデータを復元できる「誤り訂正機能」が備わっていますが、APIのデフォルト設定(通常はレベルM)では、現場の過酷な環境(擦れ、汚れ、照明の反射)に耐えられないことがあります。

汚れがあるQRコードでもレベルHならスキャン可能であることを示す比較イメージ
レベル復元能力(目安)推奨用途
Level L約7%データ量を最小にしたい場合(名刺など)
Level M約15%一般的なオフィス環境、Web表示
Level Q約25%少し汚れが予想される配布物
Level H約30%工場、物流ラベル、屋外掲示物

業務利用、特に印刷して配布する場合は、APIのパラメータで必ず ecc=H (プロバイダにより異なる)を指定し、最高レベルの堅牢性を確保してください。

(出典:デンソーウェーブ『QRコードの特長 誤り訂正機能』

URLエンコードを正しく実装するコツ

前述の文字化け対策と関連しますが、URLエンコードの実装には「BOM(Byte Order Mark)」という隠れた罠があります。

ADODB.Streamを使ってUTF-8に変換すると、データの先頭に目に見えない3バイトの識別コード(BOM)が付加されることがあります。

これをそのままURLエンコードしてしまうと、QRコードリーダー側で「読み取れるけど先頭に変な記号が入る」という現象が起きます。

実装のポイント

VBAでストリーム処理を行う際は、.Position = 3 のようにストリームの読み出し位置をずらして、先頭のBOMをスキップしてからデータを取得するロジックを組み込むことが、プロの品質を担保する秘訣です。

BOMの回避、待機処理(Sleep)、レイトバインディングなどの実装のコツをまとめた図

バージョン依存によるエラーを回避する方法

最後に、マクロ配布時のトラブルを避けるための心構えをお伝えします。

どれだけ優れたコードを書いても、受け取る側のExcelのバージョンが古すぎたり、設定が異なっていれば動きません。

  • 参照設定を避ける: 外部ライブラリを使う際は、ツールメニューからの「参照設定」ではなく、CreateObject("MSXML2.XMLHTTP") のように実行時にオブジェクトを生成する(レイトバインディング)方式で記述すると、バージョンの不一致エラーが起きにくくなります。
  • 32bit/64bit両対応記述: API宣言が必要な場合は、#If VBA7 Then ... PtrSafe ... といった条件付きコンパイル記述を必ず行いましょう。
Web APIとVBAの組み合わせのまとめと、次世代のPython in Excelへの展望を示す図

💡 「エクセルでの業務効率化」に限界を感じていませんか?

マクロを使った一括処理は非常に強力ですが、自作ツールの不具合対応や、OSアップデート時のメンテナンスを「作った本人」だけが抱え込み続ける(属人化する)のは、実はかなりの時間と労力(コスト)がかかります。

「関数やマクロのエラーに怯える日々から抜け出したい」
「誰かが休むと業務が回らない『エクセル属人化』を根本から解消したい」

そう感じたことのある総務・経理・バックオフィス担当者に向けて、元社内SE・現役管理職の視点で「日々の定型業務を劇的に楽にする脱エクセル(SaaS)ツール」を厳選しました。

いきなり会社で稟議を通す必要はありません。時間を無駄にせず業務を効率化したい方は、まずはノーリスクの無料登録や資料請求を活用して、専用ツールの圧倒的な「ラクさ」をご自身の目で確かめてみてください。

\ エクセルの手作業を今日でやめるなら /

👉 【元社内SEが警告】バックオフィス向け脱エクセルツールの決定版!無料で試せる神アプリ5選

エクセルQRコード作成マクロのまとめと展望

エクセルでのQRコード一括作成は、適切な技術選定さえ行えば、劇的な業務効率化をもたらします。

古びたActiveXコントロールにしがみつくのではなく、Web APIやIMAGE関数といった現代的なアプローチを採用することで、「誰でも使えて」「文字化けせず」「読み取り精度の高い」ツールを作ることができます。

さらに現在では、エクセル内でPythonコードを直接実行できる「Python in Excel」機能も登場し始めています。

これを使えば、VBAよりも遥かに高速かつシンプルなコード(qrcode ライブラリなど)で生成が可能になります。将来的にはこちらが主流になっていくでしょう。

まずは、今回紹介したWeb API連携の手法から試してみて、あなたの業務フローを自動化してみてください。

きっと「もっと早くやっておけばよかった!」と感じるはずですよ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次