Sitemap

Business Model Canvas (Excel VBA)

3 min readNov 20, 2023

Alexander Osterwalder created a way to display how a business operates with nine building blocks: Key Partners, Key Activities, Value Propositions, Customer Relationships, Customer Segments, Key Resources, Channels
Cost Structure, and Revenue Streams.

Press enter or click to view image in full size

If you want to use Microsoft Excel to Create a printable .xslx document, do the following.

If you need to get Excel, it’s available here: https://www.microsoft.com/en-us/microsoft-365/excel

Create a Blank workbook.

Make sure the Developer Tab is visible.

Press enter or click to view image in full size
Developer Tab

If you can’t find the Developer Tab, follow these steps:

  1. On the File tab, go to Options > Customize Ribbon.
  2. Under Customize the Ribbon and under Main Tabs, select the Developer check box.
  3. Press OK.
Press enter or click to view image in full size

Click the [Visual Basic] button on the Developer Tab. It’s in the Code section.

Press enter or click to view image in full size
Developer Tab

Insert a Module.

Paste the following VBA code and paste it in the Excel Module.

Sub CreateBusinessModelCanvas()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = "Business Model Canvas"

' Set page layout to landscape and adjust print settings
With ws.PageSetup
.Orientation = xlLandscape
.CenterHorizontally = True
.CenterVertically = True
End With

' Adjust column widths to 11
ws.Columns.ColumnWidth = 11

' Define merged areas
Dim mergedAreas As Variant
mergedAreas = Array("A1:B1", "A2:B4", "C1:D1", "C2:D2", "E1:F1", "E2:F4", _
"G1:H1", "G2:H2", "I1:J1", "I2:J4", "C3:D3", "C4:D4", _
"G3:H3", "G4:H4", "A5:E5", "A6:E6", "F5:J5", "F6:J6")

Dim area As Variant
For Each area In mergedAreas
With ws.Range(area)
.Merge
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Font.Bold = True
.Borders.Weight = xlThin
End With
Next area

' Set row heights for specific rows
Dim row As Integer
For row = 2 To 6 Step 2
ws.Rows(row).RowHeight = 150
Next row

' Add titles to merged areas
ws.Range("A1").Value = "Key Partners"
ws.Range("C1").Value = "Key Activities"
ws.Range("E1").Value = "Value Propositions"
ws.Range("G1").Value = "Customer Relationships"
ws.Range("I1").Value = "Customer Segments"
ws.Range("C3").Value = "Key Resources"
ws.Range("G3").Value = "Channels"
ws.Range("A5").Value = "Cost Structure"
ws.Range("F5").Value = "Revenue Streams"
End Sub

This will give you a printable version of the Business Model Canvas for you to iterate and discover your needs and what works for you.

--

--

No responses yet