こんにちは、SkillStack Lab運営者のスタックです。
Excelに並んだURLや管理番号から、「QRコードをまとめて作りたい」「数百件を1つずつWebサイトで作るのは面倒」と感じていませんか。
結論から言うと、現在のExcelでQRコードを作る方法は、大きくIMAGE関数・VBA+Web API・Python in Excelの3つに分けて考えると分かりやすくなります。
最も手軽なのはIMAGE関数ですが、対応するExcel環境やインターネット接続が必要です。
生成したQRコードを画像としてExcelファイルへ埋め込みたい場合は、VBAでWeb APIから画像を取得して貼り付ける方法があります。
ただし、外部のQRコード生成APIを使う場合は、QRコード化するデータが外部サービスへ送信される点を忘れてはいけません。
この記事では、QRコードを大量作成する方法、日本語やURLを正しく渡すためのURLエンコード、読み取れない場合の確認ポイント、ActiveXを新規利用しない方がよい理由まで順番に解説します。

顧客情報や機密情報を外部QR APIへ無条件に送信しないでください。
公開URLや外部送信して問題のない管理番号なら利用しやすい一方、氏名、メールアドレス、会員情報、社内限定URLなどをQRコード化する場合は、利用するAPIの規約・プライバシーポリシーと勤務先のセキュリティルールを確認してください。
- 手軽に表示:IMAGE関数+QRコードAPI
- 画像として埋め込み:VBA+QRコードAPI
- Microsoft 365内でPython利用:Python in Excelも候補
- 日本語・URL:文字列をURLエンコードしてAPIへ渡す
- 個人情報・機密情報:外部APIへ送信してよいか先に確認する
- ActiveX:新規構築では基本的に避ける
ExcelでQRコードを作る3つの方法を比較
最初に、現在使いやすい方法を比較しておきましょう。
| 方法 | 向いているケース | 主な注意点 |
|---|---|---|
| IMAGE関数+Web API | QRコードをセル内へ一覧表示したい | 対応Excel・ネット接続・外部コンテンツ許可が必要 |
| VBA+Web API | 大量生成して画像をブックへ埋め込みたい | Windows環境・マクロ管理・API利用条件を確認する |
| Python in Excel | 対応Microsoft 365環境でPythonを利用したい | クラウド実行で、ローカルPCやVBAへ直接アクセスできない |
| ActiveX | 既存ファイルの保守 | 現在のOfficeでは既定無効化が進んでいる |
単にQRコードを一覧表示したいだけなら、最初からVBAを書く必要はありません。
一方、QRコードを印刷帳票へ固定配置したい、別のPCへ渡しても表示できるよう画像をブックへ埋め込みたい、といった場合はVBAを検討します。
IMAGE関数でQRコードを作る最も簡単な方法
対応するExcelを利用しているなら、最初に試したいのがIMAGE関数です。
IMAGE関数はHTTPSで公開されている画像をセル内へ表示できます。
たとえばA2へQRコード化したいURLや文字列が入力されている場合、Windows版ExcelではENCODEURL関数と組み合わせて次のように作れます。
=IF(A2="","",IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=200x200&qzone=4&ecc=M&data="&ENCODEURL(A2),"QRコード",0))
この式を下へコピーすれば、A列の内容に応じたQRコードをB列などへ一覧表示できます。

IMAGE関数はMicrosoft 365やExcel 2024などの対応環境で利用できます。一方、上の数式で使用しているENCODEURL関数はExcel for the webやMac版Excelでは利用できません。
ENCODEURLを入れる理由
QRコード化する内容が単純な英数字だけなら、そのままでも動く場合があります。
しかし、日本語、空白、記号、URL内の「?」「&」「=」などが含まれると、APIのパラメータとQRコードへ格納したい内容の境界が正しく判定されない場合があります。
そのため、QRコードへ格納したい文字列全体をURLエンコードしてからAPIへ渡します。
IMAGE関数で表示されない場合の確認点
- IMAGE関数に対応したExcelを使用しているか
- インターネットへ接続できるか
- 組織のセキュリティ設定で外部画像がブロックされていないか
- APIのURLがHTTPSになっているか
- 参照先URLが認証を要求していないか
- QRコード化する文字列をURLエンコードしているか
IMAGE関数は、認証が必要な画像URLやリダイレクトされるURLでは表示できない場合があります。
また、会社のMicrosoft 365では外部コンテンツへの接続自体が管理者によって制限されている場合があります。その場合は、利用者が独断でセキュリティ設定を変更せず、情シスへ確認してください。
VBAでQRコードを一括生成して画像を埋め込む
IMAGE関数は便利ですが、外部URLから画像を読み込んで表示する仕組みです。
QRコード画像そのものをExcelブックへ埋め込みたい場合は、VBAで画像を一度取得し、Shapes.AddPictureで貼り付ける方法があります。

次のVBAはWindows版のデスクトップExcelを前提としたサンプルです。元ファイルを複製し、公開して問題のないダミーデータでテストしてください。
A列からQRコードを作りB列へ貼り付けるコード
次の例では、「QR一覧」シートのA2以降にある文字列からQRコードを作り、同じ行のB列へ貼り付けます。
Option Explicit
Private Const QR_SHEET As String = "QR一覧"
Private Const FIRST_ROW As Long = 2
Private Const SOURCE_COLUMN As String = "A"
Private Const QR_COLUMN As String = "B"
Sub CreateQRCodes()
Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
Dim sourceText As String
Dim apiUrl As String
Dim tempFile As String
Dim qrShape As Shape
Set ws = ThisWorkbook.Worksheets(QR_SHEET)
lastRow = ws.Cells(ws.Rows.Count, SOURCE_COLUMN).End(xlUp).Row
If lastRow < FIRST_ROW Then
MsgBox "QRコード化するデータがありません。", vbExclamation
Exit Sub
End If
If MsgBox("A列のデータを外部QR APIへ送信してQRコードを作成します。" & vbCrLf & _
"送信して問題のないデータであることを確認しましたか?", _
vbYesNo + vbQuestion) <> vbYes Then
Exit Sub
End If
Application.ScreenUpdating = False
Application.StatusBar = "QRコードを作成しています..."
On Error GoTo ErrorHandler
For r = FIRST_ROW To lastRow
sourceText = Trim$(CStr(ws.Cells(r, SOURCE_COLUMN).Value))
If Len(sourceText) > 0 Then
DeleteExistingQR ws, "QR_" & r
apiUrl = _
"https://api.qrserver.com/v1/create-qr-code/" & _
"?size=300x300" & _
"&qzone=4" & _
"&ecc=M" & _
"&data=" & UrlEncodeUtf8(sourceText)
tempFile = Environ$("TEMP") & _
Application.PathSeparator & _
"excel_qr_" & r & ".png"
DownloadFile apiUrl, tempFile
Set qrShape = ws.Shapes.AddPicture( _
Filename:=tempFile, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=ws.Cells(r, QR_COLUMN).Left, _
Top:=ws.Cells(r, QR_COLUMN).Top, _
Width:=-1, _
Height:=-1)
With qrShape
.Name = "QR_" & r
.LockAspectRatio = msoTrue
.Height = Application.Min( _
ws.Cells(r, QR_COLUMN).Height - 4, _
ws.Cells(r, QR_COLUMN).Width - 4)
.Left = ws.Cells(r, QR_COLUMN).Left + _
(ws.Cells(r, QR_COLUMN).Width - .Width) / 2
.Top = ws.Cells(r, QR_COLUMN).Top + _
(ws.Cells(r, QR_COLUMN).Height - .Height) / 2
.Placement = xlMoveAndSize
End With
If Len(Dir(tempFile)) > 0 Then
Kill tempFile
End If
End If
Application.StatusBar = _
"QRコード作成中: " & r - FIRST_ROW + 1 & _
" / " & lastRow - FIRST_ROW + 1
DoEvents
Next r
SafeExit:
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox "QRコードの作成が完了しました。", vbInformation
Exit Sub
ErrorHandler:
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox "QRコード作成中にエラーが発生しました。" & vbCrLf & _
"行: " & r & vbCrLf & _
Err.Description, vbExclamation
End Sub
Private Sub DownloadFile(ByVal fileUrl As String, _
ByVal savePath As String)
Dim http As Object
Dim stream As Object
Set http = CreateObject("MSXML2.XMLHTTP.6.0")
http.Open "GET", fileUrl, False
http.Send
If http.Status <> 200 Then
Err.Raise vbObjectError + 1000, , _
"QR APIから画像を取得できませんでした。HTTP " & http.Status
End If
Set stream = CreateObject("ADODB.Stream")
With stream
.Type = 1
.Open
.Write http.responseBody
.SaveToFile savePath, 2
.Close
End With
End Sub
Private Function UrlEncodeUtf8(ByVal sourceText As String) As String
Dim stream As Object
Dim byteData() As Byte
Dim i As Long
Dim currentByte As Long
Dim result As String
Set stream = CreateObject("ADODB.Stream")
With stream
.Type = 2
.Charset = "UTF-8"
.Open
.WriteText sourceText
.Position = 0
.Type = 1
' UTF-8 BOMの3バイトを読み飛ばす
.Position = 3
byteData = .Read
.Close
End With
For i = LBound(byteData) To UBound(byteData)
currentByte = byteData(i)
Select Case currentByte
Case 45, 46, 48 To 57, 65 To 90, _
95, 97 To 122, 126
result = result & Chr$(currentByte)
Case Else
result = result & "%" & _
Right$("0" & Hex$(currentByte), 2)
End Select
Next i
UrlEncodeUtf8 = result
End Function
Private Sub DeleteExistingQR(ByVal ws As Worksheet, _
ByVal shapeName As String)
On Error Resume Next
ws.Shapes(shapeName).Delete
On Error GoTo 0
End Sub
自分のファイルに合わせて、コード冒頭の「QR一覧」「A列」「B列」を変更してください。
また、QRコードを大きく表示したい場合は、B列の列幅と対象行の行高を事前に広げておきます。
- 日本語やURLをUTF-8でURLエンコードする
- QRコード画像を一時ファイルとして取得する
SaveWithDocument:=msoTrueでブックへ埋め込む- 同じ行で再実行した場合は既存QRを削除する
- APIエラー時は処理を停止して行番号を表示する
Excelへ画像を貼り付けるVBAそのものを詳しく知りたい場合は、写真を自動サイズ調整して貼り付けるExcelマクロで、Shapes.AddPictureや中央配置の仕組みを解説しています。
日本語QRコードが文字化けする原因
「英数字なら動くのに、日本語やURLを入れるとおかしくなる」という場合、まず確認したいのがAPIへ渡す文字列です。

Web APIのURLには、「&」や「=」などAPI側で意味を持つ記号があります。
QRコードへ保存したい文字列をそのままURLへ連結すると、その一部がAPIのパラメータとして解釈されたり、日本語や特殊文字が正しく渡らなかったりする場合があります。
重要なのは「VBAだからShift-JIS」という単純な問題ではなく、APIへ渡す文字列を適切な文字コードでURLエンコードすることです。
Windows版ExcelでIMAGE関数を使う場合はENCODEURL関数、VBAの場合は先ほどのようなUTF-8 URLエンコード関数を用意すると対応しやすくなります。
QRServerでは、入力文字列とQRコードへ格納する文字コードとしてUTF-8を指定できます。通常の日本語を扱う場合もUTF-8を基本にするとよいでしょう。
QRコードが読み取れないときの確認ポイント
QRコードが画面に表示されても、実際のスマートフォンや業務用スキャナーで読み取れるとは限りません。
特に印刷して利用する場合は、次の点を確認します。
- QRコードを小さくしすぎていないか
- 背景とQRコードのコントラストが十分か
- 周囲に余白(クワイエットゾーン)があるか
- 長すぎるURLや大量の文字を入れていないか
- 印刷時に画像がぼやけたり変形していないか
- 実際に使用するスマートフォン・スキャナーで読めるか
QRコードの周囲に余白を確保する
QRコードの周囲には、他の文字や罫線からQRコードを分離するための余白が必要です。
QRServerではqzoneパラメータで余白を指定できます。
この記事の例では次のように設定しています。
qzone=4
印刷帳票へQRコードを配置するときは、セルの罫線や周囲の文字がQRコードへ接近しすぎていないかも確認してください。
誤り訂正レベルは高ければよいわけではない

| レベル | 復元能力の目安 | 考え方 |
|---|---|---|
| L | 約7% | 情報量を抑えやすい |
| M | 約15% | 一般用途の候補 |
| Q | 約25% | 汚れ・欠損をある程度想定 |
| H | 約30% | より高い復元性が必要な場合 |
誤り訂正レベルを上げるほど復元性は高くなりますが、その分だけQRコードへ必要な情報量も増え、同じデータでもコードが複雑になりやすくなります。
そのため、最初からすべてをHに固定するのではなく、用途に合わせて設定し、最終的には実物をスキャンして確認してください。
QRServerとQuickChartを使う場合の違い
外部APIを利用するなら、QRServerやQuickChartなどが候補になります。
| サービス | 主な特徴 | 注意点 |
|---|---|---|
| QRServer | URLがシンプルで、文字コード・ECC・余白などを指定できる | 利用条件・外部送信データを確認する |
| QuickChart | QR生成、カスタマイズ、複数QRのバッチAPIなどがある | 利用条件・プラン・外部送信データを確認する |
どちらを使う場合でも、日本語やURLなどの文字列は正しくURLエンコードします。
また、無料で利用できる状態が今後も永続することを前提に、会社の重要業務を設計しない方が安全です。
大量のQRコードを毎日継続して生成するような業務では、API事業者の利用規約、リクエスト数、障害時の代替手段まで確認してください。
顧客情報を外部QR APIへ送ってよいか確認する
業務利用で最も重要なのは、QRコードを「作れるか」だけではありません。
たとえばA列へ次のような情報が入っている場合は注意が必要です。
- 顧客名や社員名
- メールアドレスや電話番号
- 会員番号と個人を結び付ける情報
- 社内システムの認証付きURL
- 未公開の商品情報
- パスワードや秘密情報
外部APIを利用すると、QRコード化する文字列はAPI事業者のサーバーへ送信されます。
スタック元情シスの視点では、「APIが無料だから使う」より先に「このデータを社外へ送ってよいか」を確認します。公開URLのQR化と、顧客・社員情報を含むQR化は、同じ方法で考えない方が安全です。
機密性の高いデータを扱う場合は、社内で承認されたサービス、ローカルで動くQR生成ツール、あるいは会社が管理するシステム側でQRコードを生成する方法を検討してください。
ActiveXでQRコードを作る方法を新規採用しない理由


古いExcel記事では、「Microsoft Barcode Control」などのActiveXコントロールを利用してQRコードやバーコードを作る方法が紹介されていることがあります。
既存ファイルを保守するためにActiveXの知識が必要になることはありますが、これから新しくQRコード生成の仕組みを作るためにActiveXを第一候補にすることはおすすめしません。
現在のOfficeではActiveXのセキュリティ制限が強化されており、Microsoft 365やOffice LTSC 2024では既定で無効化される環境があります。
そのため、「作成者のPCでは動くが、別の社員のPCではActiveXがブロックされる」という運用になりやすくなっています。
会社PCでActiveXがブロックされているからといって、利用者が独断でOfficeのセキュリティ設定を下げないでください。既存のActiveX業務が必要な場合は、管理者へ確認したうえで移行方法を検討します。
既存VBAやActiveXを今後も使い続けるべきか迷う場合は、VBAを残す業務と別の方法へ移行する業務の判断基準も確認してください。
Python in ExcelでQRコードを作る選択肢


対応するMicrosoft 365環境では、Python in ExcelもQRコード生成の候補になります。
MicrosoftがPython in Excelへ用意しているライブラリには、QRコード画像を生成するqrcodeも含まれています。
また、Python in Excelは値だけでなく画像をExcelへ返すことができます。
一方で、一般的なローカルPythonとは仕組みが異なります。
- PythonコードはMicrosoft Cloud上で実行される
- Pythonコード自体には外部ネットワークへのアクセスがない
- ローカルPCのファイルへ自由にアクセスできない
- ExcelのVBAやマクロへ直接アクセスできない
- 対応するMicrosoft 365環境が必要
そのため、「Python in ExcelならVBAの完全な代替になる」と考えるのではなく、ExcelのセルデータをPythonで分析・加工・画像化する新しい選択肢の1つとして使い分けるのが適切です。
PythonをExcel以外のファイル処理やAPI連携にも広げたい場合は、UdemyでPythonを学ぶ初心者向け講座の比較も参考にしてください。
大量のQRコードを作るときの実務上の注意点
100件程度で問題なく動いた仕組みでも、数千件になると別の問題が出てきます。
- APIの利用規約・リクエスト数を確認する
- 途中で通信エラーになった行を記録する
- 同じデータを二重生成しない仕組みにする
- QRコード生成後に元データ件数とQR件数を照合する
- ランダムに数件ではなく一定数を実機で読み取る
- 印刷する場合は実際のプリンターで確認する
- QRコード化した文字列そのものも保存しておく
外部APIが応答しない場合や仕様が変わった場合に業務が停止する可能性もあります。
停止すると顧客対応や出荷、入退場管理へ影響するような業務なら、「Excelファイルが動けばよい」という設計ではなく、障害時の代替方法まで決めておきましょう。
実務で使えるVBAコードの安全な考え方は、Excel便利マクロ8選と安全なテスト方法でも解説しています。
ExcelでQRコードを作る方法のよくある質問
まとめ|QRコードは作り方よりデータと運用まで設計する
ExcelからQRコードを大量作成する方法は、目的によって使い分けます。
- 手軽な一覧表示ならIMAGE関数を検討する
- 画像をブックへ埋め込むならVBAも候補
- 日本語やURLはURLエンコードしてAPIへ渡す
- QRコードの周囲に十分な余白を確保する
- 誤り訂正レベルは用途に合わせて選ぶ
- 顧客・社員・機密情報を外部APIへ送ってよいか確認する
- ActiveXは新規構築の第一候補にしない
- 対応環境ならPython in Excelも比較する
「QRコードを作れた」で終わらず、誰が使っても読み取れるか、外部へ送ってよいデータか、APIが停止しても業務を続けられるかまで確認することが実務では重要です。
QRコード以外にもExcelで繰り返している作業があるなら、VBAだけに決めず、Power Query、Office Scripts、Power Automate、Pythonなども比較してみてください。
\ 業務に合うExcel自動化を選ぶ /
Excel・Microsoft 365・外部APIの仕様、利用条件、セキュリティ設定は変更される可能性があります。本記事は2026年8月15日時点の公開情報を確認して更新しています。会社で使用する場合は、自社の情報セキュリティルールと各サービスの最新規約を確認してください。
参考:Microsoft IMAGE関数/Python in Excel対応ライブラリ/QRServer API/QuickChart QR API








