If you are spending more than 10 minutes creating each client invoice, you are wasting time that could be spent on billable work. An automatic invoice generator in Excel creates a professional, numbered, PDF-ready invoice in under 60 seconds — and you only need to build it once.
In this guide you will find complete step-by-step instructions to build your own automatic Excel invoice generator from scratch, including ready-to-use VBA code, a professional template design and an automatic invoice tracking log. Everything is free and works in Excel 2016, 2019, 2021 and 365.

Why Every Freelancer Needs an Automatic Invoice Generator
The Problem With Manual Invoicing
Most freelancers and small business owners create invoices manually — opening a Word document or old Excel file, updating the date, client name and amount, reformatting everything that broke, saving it, converting to PDF and finally sending it. That process takes 10-20 minutes per invoice.
Multiply that by 10-20 invoices per month and you are spending 3-4 hours every month on pure admin work. Over a year that is nearly two full working days lost to invoicing alone.
What an Automatic Invoice Generator Actually Does
A properly built Excel automation solution for invoicing does all of this in one click:
- Pulls client name, address and payment terms from your client list automatically
- Assigns the next sequential invoice number without duplicates
- Populates today’s date and due date automatically
- Calculates subtotal, tax and total instantly
- Exports a professionally formatted PDF named after the client
- Logs the invoice in your master tracking sheet
What You Need Before You Start
- Microsoft Excel 2016 or later (VBA is built in — no extra software needed)
- Basic familiarity with Excel sheets and cell references
- Your business logo as a PNG file
- Your business name, address, bank details and payment terms
- About 60-90 minutes for the initial setup
Step 1 — Set Up Your Client Data Sheet
Create a new Excel workbook and name the first sheet ClientData. This sheet stores all your client information and is the source that the invoice generator reads from automatically.
Required Columns for Your Client Sheet
Set up these columns starting from cell A1:
- Column A — Client ID (e.g. C001, C002)
- Column B — Client Name
- Column C — Company Name
- Column D — Email Address
- Column E — Address Line 1
- Column F — Address Line 2
- Column G — City
- Column H — Country
- Column I — Payment Terms (e.g. Net 14, Net 30)
- Column J — Currency (USD, GBP, AUD)
How to Format the Data Sheet Correctly
Press Ctrl + T to convert your data into an Excel Table. Name it ClientTable using the Table Design tab. This ensures the invoice macro can always find your client data regardless of how many clients you add over time.
Step 2 — Design Your Professional Invoice Template

Create a second sheet named InvoiceTemplate. This is the visual design of your invoice — the macro will fill in the data fields automatically each time.
Essential Elements Every Invoice Must Include
- Your logo — top left corner
- Your business name and address — top left below logo
- Invoice number — top right (e.g. INV-0001)
- Invoice date and due date — top right
- Client name and address — middle left
- Services table — description, quantity, rate, amount columns
- Subtotal, tax and total — bottom right
- Payment instructions — bank details or PayPal
- Thank you note — bottom
How to Brand Your Invoice With Your Logo
Insert your logo by going to Insert → Pictures → This Device. Resize it to approximately 150×60 pixels and place it in cell A1. Merge cells across the top row to create space for your business name next to the logo. Use your brand colours for header rows and the total section.
Step 3 — Add the VBA Macro That Builds Invoices Automatically
Press Alt + F11 to open the VBA Editor. Right-click your workbook name in the left panel, select Insert → Module and paste this complete invoice generator macro:
Sub GenerateInvoice()
Dim dataSheet As Worksheet
Dim invoiceSheet As Worksheet
Dim logSheet As Worksheet
Dim clientName As String
Dim clientRow As Long
Dim lastRow As Long
Dim invoiceNum As String
Dim savePath As String
Dim invoiceDate As Date
Dim dueDate As Date
' Set sheet references
Set dataSheet = ThisWorkbook.Sheets("ClientData")
Set invoiceSheet = ThisWorkbook.Sheets("InvoiceTemplate")
' Get client name from dropdown or input
clientName = InputBox("Enter client name exactly as in ClientData sheet:", "Generate Invoice")
If clientName = "" Then Exit Sub
' Find client row in ClientData
lastRow = dataSheet.Cells(dataSheet.Rows.Count, 2).End(xlUp).Row
clientRow = 0
Dim i As Long
For i = 2 To lastRow
If LCase(dataSheet.Cells(i, 2).Value) = LCase(clientName) Then
clientRow = i
Exit For
End If
Next i
If clientRow = 0 Then
MsgBox "Client not found. Please check the name.", vbExclamation
Exit Sub
End If
' Generate sequential invoice number
invoiceNum = GetNextInvoiceNumber()
' Set dates
invoiceDate = Date
Dim paymentTerms As String
paymentTerms = dataSheet.Cells(clientRow, 9).Value
If InStr(paymentTerms, "14") > 0 Then
dueDate = invoiceDate + 14
ElseIf InStr(paymentTerms, "30") > 0 Then
dueDate = invoiceDate + 30
Else
dueDate = invoiceDate + 14
End If
' Populate invoice template
invoiceSheet.Range("H5").Value = invoiceNum
invoiceSheet.Range("H6").Value = invoiceDate
invoiceSheet.Range("H7").Value = dueDate
' Client details
invoiceSheet.Range("B12").Value = dataSheet.Cells(clientRow, 2).Value
invoiceSheet.Range("B13").Value = dataSheet.Cells(clientRow, 3).Value
invoiceSheet.Range("B14").Value = dataSheet.Cells(clientRow, 5).Value
invoiceSheet.Range("B15").Value = dataSheet.Cells(clientRow, 6).Value & ", " & dataSheet.Cells(clientRow, 7).Value
invoiceSheet.Range("B16").Value = dataSheet.Cells(clientRow, 8).Value
' Save as PDF
savePath = Environ("USERPROFILE") & "\Desktop\Invoices\"
If Dir(savePath, vbDirectory) = "" Then MkDir savePath
Dim fileName As String
fileName = savePath & invoiceNum & "_" & clientName & "_" & Format(invoiceDate, "YYYYMMDD") & ".pdf"
invoiceSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fileName, Quality:=xlQualityStandard
' Log the invoice
LogInvoice invoiceNum, clientName, invoiceDate, dueDate
MsgBox "Invoice " & invoiceNum & " created and saved!" & vbNewLine & "Location: " & fileName, vbInformation
End Sub
Function GetNextInvoiceNumber() As String
Dim logSheet As Worksheet
Dim lastRow As Long
Dim nextNum As Long
On Error Resume Next
Set logSheet = ThisWorkbook.Sheets("InvoiceLog")
On Error GoTo 0
If logSheet Is Nothing Then
Set logSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
logSheet.Name = "InvoiceLog"
logSheet.Range("A1").Value = "Invoice Number"
logSheet.Range("B1").Value = "Client Name"
logSheet.Range("C1").Value = "Invoice Date"
logSheet.Range("D1").Value = "Due Date"
logSheet.Range("E1").Value = "Amount"
logSheet.Range("F1").Value = "Status"
nextNum = 1
Else
lastRow = logSheet.Cells(logSheet.Rows.Count, 1).End(xlUp).Row
If lastRow = 1 Then
nextNum = 1
Else
Dim lastInv As String
lastInv = logSheet.Cells(lastRow, 1).Value
nextNum = CLng(Mid(lastInv, 5)) + 1
End If
End If
GetNextInvoiceNumber = "INV-" & Format(nextNum, "0000")
End Function
Sub LogInvoice(invNum As String, clientName As String, invDate As Date, dueDate As Date)
Dim logSheet As Worksheet
Dim nextRow As Long
Set logSheet = ThisWorkbook.Sheets("InvoiceLog")
nextRow = logSheet.Cells(logSheet.Rows.Count, 1).End(xlUp).Row + 1
logSheet.Cells(nextRow, 1).Value = invNum
logSheet.Cells(nextRow, 2).Value = clientName
logSheet.Cells(nextRow, 3).Value = invDate
logSheet.Cells(nextRow, 4).Value = dueDate
logSheet.Cells(nextRow, 5).Value = "Pending"
logSheet.Cells(nextRow, 6).Value = "Unpaid"
logSheet.Cells(nextRow, 3).NumberFormat = "DD/MM/YYYY"
logSheet.Cells(nextRow, 4).NumberFormat = "DD/MM/YYYY"
End SubHow to Install the Invoice Macro
- Press Alt + F11 to open VBA Editor
- Right-click your workbook name in left panel
- Select Insert → Module
- Paste the complete code above
- Press F5 to run or close VBA Editor
- Go back to Excel and press Alt + F8
- Select GenerateInvoice and click Run
- Save your file as .xlsm format
How to Customise the Macro for Your Business
Update these three lines in the macro to match your invoice template layout:
' Change H5, H6, H7 to match where your invoice number and dates are
invoiceSheet.Range("H5").Value = invoiceNum ' Your invoice number cell
invoiceSheet.Range("H6").Value = invoiceDate ' Your invoice date cell
invoiceSheet.Range("H7").Value = dueDate ' Your due date cell
' Change B12-B16 to match where client details appear on your template
invoiceSheet.Range("B12").Value = ... ' Client name cellStep 4 — Add Invoice Numbering That Never Duplicates
Sequential Invoice Number Code
The GetNextInvoiceNumber() function in the macro above automatically reads the last invoice number from your InvoiceLog sheet and increments it by one. Your invoice numbers will always follow the format INV-0001, INV-0002, INV-0003 and so on — never duplicating, never skipping.
If you prefer a different format such as year-based numbering like 2026-001, replace the format line with:
GetNextInvoiceNumber = Year(Date) & "-" & Format(nextNum, "000")Step 5 — Save Each Invoice as PDF Automatically

The PDF Export Code
The macro automatically saves each invoice as a PDF file named using the invoice number, client name and date — for example INV-0001_Acme_Corp_20260519.pdf. All PDFs are saved to an Invoices folder on your Desktop which the macro creates automatically if it does not exist.
To change the save location update this line in the macro:
' Change this to save to a different location
' Example: OneDrive
savePath = Environ("USERPROFILE") & "\OneDrive\Invoices\"
' Example: Google Drive (if mapped as G:)
savePath = "G:\My Drive\Invoices\"Step 6 — Track All Invoices in a Master Log
Auto-Populate the Invoice Log
Every time you run the macro an entry is automatically added to your InvoiceLog sheet showing the invoice number, client name, invoice date, due date and payment status. You can add conditional formatting to highlight unpaid invoices in red and paid invoices in green.
Add this one-time conditional formatting to your InvoiceLog sheet:
- Select the entire Status column in InvoiceLog
- Go to Home → Conditional Formatting → New Rule
- Select Format cells that contain specific text
- Type Unpaid and set fill colour to red
- Add another rule for Paid with green fill
Common Invoice Generator Mistakes to Avoid
Mistake 1 — No Invoice Number System
Skipping invoice numbers or reusing them creates serious accounting problems and looks unprofessional to clients. The sequential numbering system in this guide ensures every invoice has a unique, traceable number that accountants and tax authorities expect.
Mistake 2 — Wrong Date Format for International Clients
DD/MM/YYYY is standard in UK and Australia while MM/DD/YYYY is used in the USA. Ambiguous dates like 05/06/2026 could mean 5th June or 6th May depending on your client’s location. Use the full month name format 19 May 2026 to eliminate ambiguity with international clients.
Mistake 3 — Not Saving PDF Copies
Never send the Excel file itself to clients. Always export as PDF to prevent clients from editing figures. The macro handles this automatically — every invoice is saved as a locked PDF that clients cannot modify.
When to Upgrade to Professional Invoice Software
This Excel invoice generator covers the majority of freelancer and small business needs. However consider upgrading to dedicated software like QuickBooks or Xero when:
- You are generating more than 50 invoices per month
- You need automatic payment reminders sent to clients
- You need to accept online payments directly on the invoice
- You need invoicing integrated with your accounting software
- Multiple team members need to create invoices simultaneously
At DataAdminPro we offer both custom Excel automation solutions and QuickBooks setup services for small businesses in the USA, UK and Australia. We will assess your invoicing volume and recommend the right solution for your specific situation — free consultation available.

Frequently Asked Questions
Is this invoice generator free to use?
Yes. The entire invoice generator uses free built-in Excel features — VBA, Excel Tables and PDF export. You need Microsoft Excel 2016 or later which most businesses already have. There is no subscription, no add-in and no third-party software required.
Will this work on Mac Excel?
The core invoice template and PDF export work on Mac Excel. However the automatic email sending feature requires Microsoft Outlook on Windows. Mac users can still generate and save the PDF automatically then send it manually via their email client.
Can I add my logo to the invoice template?
Yes. Go to Insert → Pictures and select your logo PNG file. The logo is embedded in the template permanently — it will appear on every invoice generated without any additional steps.
How do I send the invoice to the client?
After the macro generates the PDF, navigate to your Invoices folder on the Desktop, attach the PDF to your usual email and send it. For advanced users the macro can be extended to send the PDF automatically via Outlook — contact DataAdminPro if you need this feature added.
Can I track which invoices are paid and unpaid?
Yes. The InvoiceLog sheet tracks every invoice with a Status column set to Unpaid by default. When a client pays, simply open InvoiceLog and change the status to Paid. With conditional formatting applied the paid and unpaid invoices are colour-coded for instant visibility.
Final Thoughts
An automatic invoice generator in Excel is one of the most practical automation projects any freelancer or small business owner can build. You invest 60-90 minutes setting it up once and save hours every month for as long as you use it. The VBA code in this guide is production-ready — copy it, customise the cell references and your invoicing is automated from today.
Need help setting up the invoice generator for your specific template, or want it extended to send emails and track payments automatically? Contact DataAdminPro for a free consultation — we build custom Excel automation solutions starting from $25.
