SkillStack Lab 運営者の「スタック」です。
日々の業務で商品管理台帳の整理や、イベント参加者のチケット管理などをしていると、エクセルにある数千件の顧客データやURLリストから、QRコードを一括で作成したいという場面に遭遇することはよくあります。
手作業で一つずつWebサイトで作って貼り付けるのは現実的ではありませんし、かといって専用の有料ソフトを導入する決裁も下りない……そんな時、多くの人がたどり着くのが「マクロ(VBA)での自動化」や「関数の活用」です。

しかし、いざ自分でやってみると、「アルファベットはできるのに日本語を入れた途端に文字化けする」「画面上では綺麗に見えるのに、スマホで読み取れない」「会社の別のPCで開いたらエラーが出た」といった、根深いトラブルに悩まされることも少なくありません。
特に、ネット上の古い情報を参考にActiveXコントロールを使ってしまい、後戻りできなくなるケースは非常に多いのです。
この記事では、技術的な落とし穴を回避し、現場で確実に使えるQRコード生成ノウハウを、失敗談も交えながら徹底的に解説します。
- Web API連携により、環境やバージョンに依存せず安定してQRコードを生成する具体的な手法
- 最新のIMAGE関数を活用し、VBAコードを一切書かずに大量作成するモダンな方法
- 「読み取れない」「文字化けする」といったトラブルの技術的な根本原因と解決策
- かつての主流「ActiveXコントロール」が、なぜ現在は非推奨とされるのかの技術的背景
エクセルでQRコード作成マクロを実装する推奨手法
エクセルで大量のQRコードを扱うアプローチはいくつか存在しますが、2020年代の現代において、安定性とコストパフォーマンスのバランスが最も取れているのは「Web API」を活用する方法です。
なぜローカル機能ではなくWeb技術を使うべきなのか、具体的な実装イメージと共に解説していきますね。

Web APIで無料かつ一括生成する方法
インターネット常時接続が当たり前の今、私が最も推奨するのはRESTful APIを利用した画像生成モデルです。
これは、エクセルを単なる「依頼者(クライアント)」として使い、複雑なQRコード生成処理は外部の専門サーバーに任せるという方法です。
この手法の最大のメリットは、「環境非依存性」にあります。
ローカルPCに特別なフォントやDLLファイルをインストールする必要がないため、作成したマクロ付きエクセルファイルを同僚に渡しても、「私のPCでは動かない」というトラブルが起きません。
推奨される主要APIプロバイダ比較
SEOの観点やサービスの持続性を考慮すると、利用するAPI選びは重要です。
かつて定番だったGoogle Chart APIは現在非推奨となっているため、以下の2つが現代のスタンダードと言えます。
| API名 | エンドポイント例 | 特徴・推奨理由 |
|---|---|---|
| QRServer | https://www.google.com/search?q=api.qrserver.com | 登録不要で利用でき、商用利用の制限も明確には設けられていません。パラメータがシンプルで扱いやすく、HTTPS対応でセキュアな通信が可能です。 |
| QuickChart | quickchart.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)

これだけで、A2セルの内容に対応したQRコードがB2セルに表示されます。オートフィル機能を使えば、1万件のデータでも数秒でQRコード化が完了します。これは革命的な便利さです。
IMAGE関数の制限事項
この関数で表示される画像は、セル内にレンダリングされているだけで、実体としての画像ファイル(オブジェクト)ではありません。
そのため、「画像を右クリックして保存」したり、「画像の位置を微調整して印刷レイアウトを作る」といった細かい制御には不向きです。あくまで「閲覧用・簡易リスト用」として割り切るのがコツです。

アドインを使わず画像を埋め込むメリット
「QR4Office」などの便利なアドインも存在しますが、私は業務利用においては「VBAを使って画像を埋め込む(Shapes.AddPicture)」手法をおすすめしています。
理由は大きく2つあります。
- セキュリティポリシーの壁: 多くの企業では、ストアアプリや勝手なアドインのインストールが情シス部門によってブロックされています。
- 完全なオフライン対応: IMAGE関数やAPIのURLリンクだけでは、ネット環境がない場所でファイルを開いた時に画像が表示されません。
VBAを使ってWeb APIから取得した画像データを、LinkToFile:=msoFalse、SaveWithDocument:=msoTrue という設定でシートに貼り付けると、画像データそのものがエクセルファイル内部に保存されます。
これにより、ファイルをメール添付で送付してもリンク切れを起こさず、完全に自立したファイルとして扱えるようになります。

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で一括作成する場合の具体的な処理フローを整理しましょう。
安定稼働のためには、単にループさせるだけでなく、いくつかの工夫が必要です。
- 画面更新の停止:
Application.ScreenUpdating = Falseを設定し、処理速度を向上させます。 - データ範囲のループ: 最終行を取得し、1行ずつ処理を行います。
- 同期通信でのダウンロード:
XMLHTTPオブジェクトなどを使い、APIから画像バイナリデータを取得します。 - 一時保存と挿入: 取得したデータを一時フォルダ(Temp)に保存し、
Shapes.AddPictureでシートに挿入します。 - 位置調整: セルの
Top,Left,Width,Heightプロパティを取得し、画像をセルの中央に配置する計算を行います。 - 待機処理(重要): サーバーへの負荷集中を防ぎ、かつ受信エラーを回避するため、0.1秒~0.5秒程度のウェイト(Sleep関数など)を必ず入れます。
このロジックを組むことで、1000件程度のデータであれば、コーヒーを飲んでいる間にミスなく生成が完了します。
💡 ネットのコードをコピペしても、エラーが出た時に自分で直せず困っていませんか?
ブログのテキストや分厚い専門書でVBAのコードを解読するのは、実は非常にハードルが高く、9割の人が途中で挫折してしまいます。
確実に実務で使えるスキルを身につけるなら、文字を追うのではなく「プロの画面の動きを動画でそのまま真似する」のが一番の近道です。
元社内SEの視点で、小難しい理論は抜きにして、明日からの面倒な手作業を劇的にラクにする「超・実践的なUdemy神講座」だけを厳選しました。
※Udemyは頻繁に90%OFFセール(1,500円前後)を行っています。絶対に定価では買わず、まずはセールが開催されていないかチェックして、賢く自己投資を始めてみてください!
\ 本でのVBA独学から卒業するなら /
エクセルQRコード作成マクロの不具合と解決策
自動化の仕組みができても、実際に運用を始めると「読み取れない」「文字化けする」といった壁にぶつかることがあります。
これらはエクセルの不具合ではなく、QRコードやWeb通信の技術的な仕様理解不足が原因であることがほとんどです。
日本語データが文字化けする原因と対策
「URLや英数字は問題ないのに、日本語を含めると読み取った時に文字化けする」。これは日本国内のユーザーが最も頻繁に遭遇する問題です。
原因は、VBA(Shift-JIS)とWeb API(UTF-8)の文字コードの不一致です。
VBA上の文字列「あ」をそのままAPIのURLパラメータとして送ると、サーバー側はそれを正しく解釈できません。

ADODB.Streamによるエンコード処理
この問題を解決するには、VBA標準の関数ではなく、ADODB.Stream オブジェクトを使用して、文字列を明示的にUTF-8のバイト列に変換する必要があります。
その上で、Webで使える形式(%E3%81%82…のようなパーセントエンコーディング)に変換する自作関数をマクロに組み込むのが定石です。
これを実装しない限り、APIを使った日本語QRコードの生成は不可能です。
作成したコードが読み取れない時の確認点
「印刷したQRコードが読み取れない」というクレームが現場から来た場合、疑うべきはデータではなく「QRコードの物理的な仕様設定」です。
QRコードには、汚れや破損があってもデータを復元できる「誤り訂正機能」が備わっていますが、APIのデフォルト設定(通常はレベルM)では、現場の過酷な環境(擦れ、汚れ、照明の反射)に耐えられないことがあります。

| レベル | 復元能力(目安) | 推奨用途 |
|---|---|---|
| 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をスキップしてからデータを取得するロジックを組み込むことが、プロの品質を担保する秘訣です。

バージョン依存によるエラーを回避する方法
最後に、マクロ配布時のトラブルを避けるための心構えをお伝えします。
どれだけ優れたコードを書いても、受け取る側のExcelのバージョンが古すぎたり、設定が異なっていれば動きません。
- 参照設定を避ける: 外部ライブラリを使う際は、ツールメニューからの「参照設定」ではなく、
CreateObject("MSXML2.XMLHTTP")のように実行時にオブジェクトを生成する(レイトバインディング)方式で記述すると、バージョンの不一致エラーが起きにくくなります。 - 32bit/64bit両対応記述: API宣言が必要な場合は、
#If VBA7 Then ... PtrSafe ...といった条件付きコンパイル記述を必ず行いましょう。

💡 「エクセルでの業務効率化」に限界を感じていませんか?
マクロを使った一括処理は非常に強力ですが、自作ツールの不具合対応や、OSアップデート時のメンテナンスを「作った本人」だけが抱え込み続ける(属人化する)のは、実はかなりの時間と労力(コスト)がかかります。
「関数やマクロのエラーに怯える日々から抜け出したい」
「誰かが休むと業務が回らない『エクセル属人化』を根本から解消したい」
そう感じたことのある総務・経理・バックオフィス担当者に向けて、元社内SE・現役管理職の視点で「日々の定型業務を劇的に楽にする脱エクセル(SaaS)ツール」を厳選しました。
いきなり会社で稟議を通す必要はありません。時間を無駄にせず業務を効率化したい方は、まずはノーリスクの無料登録や資料請求を活用して、専用ツールの圧倒的な「ラクさ」をご自身の目で確かめてみてください。
\ エクセルの手作業を今日でやめるなら /
エクセルQRコード作成マクロのまとめと展望
エクセルでのQRコード一括作成は、適切な技術選定さえ行えば、劇的な業務効率化をもたらします。
古びたActiveXコントロールにしがみつくのではなく、Web APIやIMAGE関数といった現代的なアプローチを採用することで、「誰でも使えて」「文字化けせず」「読み取り精度の高い」ツールを作ることができます。
さらに現在では、エクセル内でPythonコードを直接実行できる「Python in Excel」機能も登場し始めています。
これを使えば、VBAよりも遥かに高速かつシンプルなコード(qrcode ライブラリなど)で生成が可能になります。将来的にはこちらが主流になっていくでしょう。
まずは、今回紹介したWeb API連携の手法から試してみて、あなたの業務フローを自動化してみてください。
きっと「もっと早くやっておけばよかった!」と感じるはずですよ。
