# How to make a QR code in Excel

> In Microsoft 365 Excel, =IMAGE("https://useqr.app/api/v1/qr?data="&ENCODEURL(A2)) renders a QR code in the cell; fill down for one per row. Older Excel versions lack IMAGE(), so use a VBA routine or upload the workbook to a bulk generator: UseQR reads .xlsx directly and works offline in the browser.

Source: https://useqr.app/docs/how-to/how-to-make-a-qr-code-in-excel · Last reviewed 2026-08-21 · UseQR is free forever, no signup.

---

## 1. The IMAGE() formula (Microsoft 365)

Excel's `IMAGE()` function (Microsoft 365 only, rolled out from 2022) displays an image
from a URL inside a cell. Point it at the
[keyless UseQR API](/docs/developers/free-qr-code-api-no-key) and a cell becomes a QR
code. With a link or any text in `A2`:

```
=IMAGE("https://useqr.app/api/v1/qr?data="&ENCODEURL(A2))
```

Fill down and every row gets its own code. `ENCODEURL()` (Excel 2013+) is essential,
without it, payloads containing `&`, `#` or spaces truncate silently and the code encodes
half your URL.

Optional refinements:

```
=IMAGE("https://useqr.app/api/v1/qr?size=300&data="&ENCODEURL(A2), "QR for "&A2, 1)
```

The second argument is alt text; the third is sizing mode (1 = fit cell, keep aspect).
Codes need to stay square, so avoid mode 2 (fill).

## 2. Not on Microsoft 365? Your three options

| Situation | Route |
|---|---|
| Excel 2016/2019/2021, one-off codes | Generate at UseQR, download PNG, Insert → Pictures |
| Older Excel, many codes, scriptable | [VBA that calls the API and places images](/docs/developers/generate-a-qr-code-in-excel-vba) |
| Any Excel, many codes, no code | Save the workbook and upload it to the [bulk tool](/bulk). It reads **.xlsx directly** |

The bulk route is usually the right answer for volume: it runs client-side in your
browser (the workbook is never uploaded to a server), maps columns with merge fields, and
returns a ZIP of files or Avery label sheets
with every code decode-verified: the full walkthrough is
[QR codes from a spreadsheet](/docs/how-to/how-to-make-qr-codes-from-a-spreadsheet).

## 3. Know what in-cell codes are for

`IMAGE()` cells are **screen resolution**: right for dashboards, pick lists, and quick
sharing; wrong for print. Labels and packaging need files generated at
[300 DPI or as SVG](/docs/how-to/how-to-make-a-high-resolution-qr-code), which the bulk
tool produces. Also:

- Each cell fetches its image over HTTP; enormous sheets get throttled and show
  placeholder icons until retries land.
- `IMAGE()` needs connectivity to display (the underlying QR payload is static and would
  keep working; the *picture in the cell* needs the fetch).
- You cannot save an `IMAGE()` cell as a file. It is display only.

## 4. Typed payloads from columns

The API's typed endpoints compose from multiple columns: WiFi from SSID and password
columns, UPI from a VPA column:

```
=IMAGE("https://useqr.app/api/v1/wifi?ssid="&ENCODEURL(A2)&"&password="&ENCODEURL(B2))
```

Pause before doing this with secrets: formula URLs send cell values to the API to render.
For WiFi passwords and personal data, prefer the client-side
generator or bulk tool, where
[data never leaves the browser](/docs/security/client-side-vs-server-side-qr-generation).

## 5. Verify a sample

Scan two or three rendered cells straight off the monitor with a phone, or run one code's
URL through the [validator](/validate). For printed output, verify the exported files at
final size: the bulk tool has already decode-verified them, but scan one
physical print anyway.

## Gotchas

- **`#CALC!` or a broken-image icon**: usually a typo'd URL or a blocked connection,
  corporate proxies sometimes block image fetches from formulas.
- **Leading zeros**: format serial columns as Text before building codes, or `00123`
  becomes `123` inside the payload.
- **Workbook recalculation** re-fetches images; on metered or offline machines cells go
  blank. The bulk-file route has no such dependency.

Start with one formula cell, or take the whole workbook to the [bulk tool](/bulk).

## FAQ

### What is the Excel formula for a QR code?
In Microsoft 365: =IMAGE("https://useqr.app/api/v1/qr?data="&ENCODEURL(A2)). Fill it down for one code per row. Earlier Excel versions lack IMAGE() and need VBA or an external bulk tool.

### Can I make QR codes in Excel without Microsoft 365?
Yes: either a VBA macro that fetches codes from a QR API, or save the .xlsx and upload it to a bulk generator. UseQR's bulk tool reads Excel files directly in the browser, free.

### Are Excel IMAGE() QR codes good enough to print?
No: they render at screen resolution. For labels or packaging, generate real files at 300 DPI or SVG from the same spreadsheet using a bulk tool, then print those.

### Why does my Excel QR code encode only part of the URL?
The payload was concatenated without ENCODEURL(), so characters like & were read as API parameters. Wrap every cell reference in ENCODEURL() inside the formula.

## Try it

- https://useqr.app/url
- https://useqr.app/bulk
- https://useqr.app/validate
