Excel + design · A practical guide

How to make a waffle chart in Excel using a scatter plot

Build a movable Excel waffle chart with square scatter markers, a minimum and maximum value, and formulas that control how many squares fill in.

I used to avoid waffle charts made with conditional formatting in the worksheet grid. I found that approach inconvenient and not very flexible when I wanted to move a chart around a dashboard. So I looked for an alternative and came back to a scatter plot.

Other people had already figured this out. What I wanted to do was go a little deeper into how it works and make the inputs more flexible. You can put in a minimum, a maximum, and a current value instead of having to start with a percentage.

The result is a waffle chart you can move and resize as you arrange your dashboard. I’ll walk you through the cells and chart settings that make it work, so you can build one yourself and adjust it for your report.

When this method is useful

This waffle is a chart object. You can move it and resize it on a dashboard. You do not have to rebuild colored worksheet cells.

Use it for one part-to-whole value or progress toward a target. If readers need to compare many close values, a simple progress bar may be easier. Add the number beside the chart so nobody has to count squares.

In this article, the chart has 100 squares. One square equals one percentage point of the calculated progress.

Illustrated example

37% means 37 filled squares

A 10 by 10 grid has 100 squares. Exactly 37 are green, filled from the bottom left across each row. Current 74 between minimum 0 and maximum 200 gives 37 percent.
A 10 by 10 grid has 100 squares. Exactly 37 are green, filled from the bottom left across each row. Current 74 between minimum 0 and maximum 200 gives 37 percent.

1. Enter the three values

The nice thing about this method is that you can start with the values you actually have. We’ll turn the minimum, maximum, and current value into a percentage, then use that percentage to decide how many squares to fill.

Use three input cells and two result cells. Start on a blank sheet. Double-click its tab at the bottom, type Waffle, and press Enter. Put these labels in column A and values in column B:

CellLabelValue or result
B2Minimum0
B3Maximum200
B4Current value74
B5ProgressFormula below
B6Filled squaresFormula below

Click B5, type this formula, and press Enter:

=IF(OR(COUNT(B2:B4)<>3,B3<=B2),NA(),MAX(0,MIN(1,(B4-B2)/(B3-B2))))

With B5 selected, click Home → Percent Style (%). With B2 = 0, B3 = 200, and B4 = 74, B5 displays 37%.

Click B6 and type:

=ROUND(B5*100,0)

B6 displays 37. The first formula stops the chart if a value is missing, not numeric, or if the maximum is not greater than the minimum. In those cases, B5 shows #N/A. Fix the input cells. The formula also caps progress between 0% and 100%.

Illustrated example

Three inputs. Two results.

On Waffle, B2 minimum is 0, B3 maximum is 200, B4 current is 74. Formulas in B5 and B6 return 37 percent and 37 filled squares.
On Waffle, B2 minimum is 0, B3 maximum is 200, B4 current is 74. Formulas in B5 and B6 return 37 percent and 37 filled squares.

2. Make the 100 dot coordinates

A scatter plot simply puts a dot at an X coordinate and a Y coordinate. That is all we are doing here: choosing where each dot goes so the dots form a grid. X controls its position across the chart; Y controls its position up the chart.

Make a small table with these headings in A9:E9: Point, X, Y, Filled X, Filled Y. Column A is the fill order. The fill handle is the tiny square at the bottom right of the selected cells. Type 1 in A10 and 2 in A11, select both cells, and drag the fill handle down to A109. The last point is 100.

Column B is the horizontal position. X = 1 is the left side and X = 10 is the right side. Click B10, type the formula below, then drag the fill handle down to B109:

=MOD(A10-1,10)+1

Column C is the vertical position. Y = 1 is the bottom row and Y = 10 is the top row. Click C10, type this formula, and drag it down to C109:

=INT((A10-1)/10)+1

Point 1 is X=1, Y=1. Point 10 is X=10, Y=1. Point 11 starts the next row at X=1, Y=2.

Illustrated example

X goes across. Y goes up.

Coordinates for point 1 are X1 Y1; point 10 is X10 Y1; point 11 is X1 Y2; point 37 is X7 Y4. X is horizontal and Y is vertical.
Coordinates for point 1 are X1 Y1; point 10 is X10 Y1; point 11 is X1 Y2; point 37 is X7 Y4. X is horizontal and Y is vertical.

3. Choose which dots are colored

Column B/C contains all 100 gray dots. Columns D/E contain only the dots that should be colored. For each point, compare the point number in column A with B6.

Click D10, type this formula, and drag it down to D109:

=IF(A10<=$B$6,B10,NA())

Click E10, type this formula, and drag it down to E109:

=IF(A10<=$B$6,C10,NA())

For the example, B6 is 37, so points 1 through 37 have coordinates in D/E. Points 38 through 100 return #N/A. Those #N/A cells are intentional. Excel skips them in the colored-dot series, so no colored dots appear for points 38–100. Do not use zero for skipped points: zero is a real coordinate and may put unwanted dots at the chart origin.

Illustrated example

Stop the color after point 37

When B6 is 37, Filled X and Filled Y for points 36 and 37 are 6,4 and 7,4. Points 38 and 39 show #N/A in both filled-coordinate columns and are not plotted.
When B6 is 37, Filled X and Filled Y for points 36 and 37 are 6,4 and 7,4. Points 38 and 39 show #N/A in both filled-coordinate columns and are not plotted.

4. Insert and format the scatter chart

These menu names are for Windows desktop Excel. Start with the sheet named Waffle so you can use the references below exactly.

Make the two groups of dots

  1. Select B9:C109. Click Insert → Scatter (X, Y), then choose the first option: dots with no connecting lines.
  2. Click the chart. Choose Chart Design → Select Data. Under Legend Entries (Series), select the existing series and click Edit.
  3. Type Background in Series name. Set Series X values to =Waffle!$B$10:$B$109 and Series Y values to =Waffle!$C$10:$C$109. Click OK. Remove any extra series Excel created.
  4. Click Add. Name this series Filled. Set X values to =Waffle!$D$10:$D$109 and Y values to =Waffle!$E$10:$E$109. Click OK.

You should now see exactly two series: Background first, Filled second. A series is one group of dots. The Filled group is drawn over the Background group.

Illustrated example

First series: Background

In Edit Series, use name Background, X values Waffle!$B$10:$B$109, and Y values Waffle!$C$10:$C$109.
In Edit Series, use name Background, X values Waffle!$B$10:$B$109, and Y values Waffle!$C$10:$C$109.

Illustrated example

Second series: Filled

In Edit Series, use name Filled, X values Waffle!$D$10:$D$109, and Y values Waffle!$E$10:$E$109.
In Edit Series, use name Filled, X values Waffle!$D$10:$D$109, and Y values Waffle!$E$10:$E$109.

Make the dots square

  1. Click the chart. On the Format tab, open Current Selection. Choose Series “Background”, then click Format Selection. This selects every Background dot, not just one.
  2. In the Format Data Series panel, open Fill & Line → Marker → Marker Options → Built-in. Choose Square and start with Size 12.
  3. Under Marker Fill, choose a solid gray. Set the marker border to No line. Under Line, choose No line.
  4. Use Current Selection to choose Series “Filled”. Use the same square shape and size, with an accent fill such as green.

Illustrated example

Format every dot in the series

Select the whole Background series through Format, Current Selection. In Marker Options choose Built-in, Square, Size 12 as a starting point. Repeat for Filled with the same size and another color.
Select the whole Background series through Format, Current Selection. In Marker Options choose Built-in, Square, Size 12 as a starting point. Repeat for Filled with the same size and another color.

Set the space around the dots

  1. Right-click the numbers along the bottom of the chart. Choose Format Axis → Axis Options.
  2. Set Bounds Minimum to 0.5, Maximum to 10.5, and Units Major to 1.
  3. Repeat those settings for the vertical numbers along the left edge.
  4. Use Format → Current Selection → Plot Area. Drag the handles of this inner rectangle until it is square. The outer chart can be wider if it includes a title.

The axis numbers are dot positions, not percentages. B5 supplies the percentage. Keep the axes while checking the dots; afterward you can select the axes and gridlines and press Delete for a cleaner chart. Keep a visible 37% label beside it.

On Mac, use the corresponding Scatter, Select Data, and formatting controls in your version. Microsoft’s scatter chart guide explains the X/Y setup. You can also link a movable text box to B5 for a label that updates.

Illustrated example

Use these settings on both axes

For both horizontal and vertical axes, set Bounds minimum 0.5, maximum 10.5, and Units major 1. These values are dot coordinates, not percentages.
For both horizontal and vertical axes, set Bounds minimum 0.5, maximum 10.5, and Units major 1. These values are dot coordinates, not percentages.

Illustrated example

Make the inner plot area square

The outer chart can contain a title. The inner plot area holding the dots must be square, with equal horizontal and vertical spacing.
The outer chart can contain a title. The inner plot area holding the dots must be square, with equal horizontal and vertical spacing.

5. Resize it and test the numbers

When you make the chart smaller, square markers may overlap. Use Format → Current Selection to select each series in turn, then lower its marker size in Format Data Series. Keep both series the same size. Keep the inner plot area square so the horizontal and vertical gaps look equal.

Test these values before sharing:

InputExpected result
Current = minimum0 filled squares
Current = maximum100 filled squares
Current 74, minimum 0, maximum 20037 filled squares
Current below minimum or above maximum0 or 100 squares because B5 is capped
Maximum ≤ minimum, or a missing inputB5 shows #N/A; fix the input

You can also make one row of dots: keep Y at 1, change the X positions, and use circle markers. Ten X positions give ten steps; 100 positions give 100 steps.

Illustrated example

Keep gaps between the squares

When markers are too large they overlap. Reduce the marker size equally in Background and Filled until the grid has visible gaps.
When markers are too large they overlap. Reduce the marker size equally in Background and Filled until the grid has visible gaps.

Related guides

Microsoft documentation

The documentation below covers the Excel and PowerPoint features used in this guide. Choose the platform tab that matches your version.