Proper Spreadsheets

Templates › Clubs

Club Subs & Fixtures

Made for treasurers and secretaries of small clubs.

A workbook for a small club: who has paid their subs, who still owes, and how the season is going on the pitch. The summary carries a chart that redraws itself as you type.

Of the 25 columns, you fill in 18 and the other 7 work themselves out, and all 18 figures on the summary do too. There is room for 830 rows of your own.

£4.99one payment, yours to keep

  • Opens in Excel, Google Sheets and Numbers
  • Delivered straight away
  • No macros, nothing to install
  • Change it free before you buy

Payment is handled by Stripe. Your card details go to them and never to us. Sales are final, which is why every tab, column and calculation is shown on this page first.

Already have a spreadsheet of your own? Check it for mistakes, free.

The workbook's summary and the table behind it
A row typed into the real file. Every figure that changes is the spreadsheet's own arithmetic. What the film shows, in order:
  1. A new row is typed into the Members tab, one cell at a time, in the white cells a person fills in.
  2. The shaded cells in that row fill themselves in.
  3. The figures on the Summary tab change to include the new row.
  4. The chart, Subs due by membership category, redraws with it.
The chart, drawn from the totals in the table beside it. See it full size
Where you type, and the shaded columns that work themselves out. See it full size

Everything inside, before you pay

This is the whole design: every tab, every column and how each calculated one is worked out. White cells are yours to fill in; the shaded ones work themselves out and are locked so a formula cannot be overwritten by accident. There is room for 830 rows. Open any tab to see its columns.

Members

9 columns

One row per member, with the subs they owe for the season and what has been paid so far. Ready for 150 rows, every one with its formulas in place.

ColumnWhat goes in itWorked out as
Member NamePayments are matched to this name, so keep it spelled the same way on the Payments tab.Type any text.
CategoryPick one: Senior, Junior, Student, Concession, Family or Life.
Subs DueType an amount in £.
Date JoinedType a date.
MembershipPick one: Active, Lapsed or Resigned.
ContactPhone or email, whichever you use most.Type any text.
Paid To DateFills itself in.

The total of Amount on Payments where Member matches this row's Member Name.

The formulaIF(ISBLANK([full_name]), "", SUMIF([Payments!member], [full_name], [Payments!amount]))
Still OwingFills itself in.

Worked out from this row's Member Name and Subs Due, using Member and Amount on Payments.

The formulaIF(OR(ISBLANK([full_name]), ISBLANK([subs_due])), "", ROUND([subs_due] - SUMIF([Payments!member], [full_name], [Payments!amount]), 2))
Subs StatusFills itself in.

Worked out from this row's Member Name and Subs Due, using Member and Amount on Payments.

The formulaIF(OR(ISBLANK([full_name]), ISBLANK([subs_due])), "", IF(SUMIF([Payments!member], [full_name], [Payments!amount]) >= [subs_due], "Paid", IF(SUMIF([Payments!member], [full_name], [Payments!amount]) > 0, "Part paid", "Unpaid")))

Payments

6 columns

One row per subs payment received. Pick the member from the dropdown so the Members tab adds it up. Ready for 600 rows, every one with its formulas in place.

ColumnWhat goes in itWorked out as
Date ReceivedType a date.
MemberPick one of the Member Name entries on Members.
AmountType an amount in £.
MethodPick one: Bank transfer, Cash, Card, Cheque or Standing order.
ReferenceBank reference or receipt number, if you have one.Type any text.
MonthFills itself in.

Worked out from this row's Date Received.

The formulaIF(ISBLANK([payment_date]), "", TEXT([payment_date], "MMM YYYY"))

Fixtures

10 columns

The season fixture list. Leave the scores blank until a game has been played. Ready for 80 rows, every one with its formulas in place.

ColumnWhat goes in itWorked out as
DateType a date.
OpponentType any text.
Home or AwayPick one: Home, Away or Neutral.
CompetitionPick one: League, Cup or Friendly.
Our ScoreType a number.
Their ScoreType a number.
ResultFills itself in.

Worked out from this row's Our Score and Their Score.

The formulaIF(OR(ISBLANK([goals_for]), ISBLANK([goals_against])), "", IF([goals_for] > [goals_against], "Win", IF([goals_for] = [goals_against], "Draw", "Loss")))
Goal DifferenceFills itself in.

The Our Score minus the Their Score.

The formulaIF(OR(ISBLANK([goals_for]), ISBLANK([goals_against])), "", [goals_for] - [goals_against])
ScorelineFills itself in.

Worked out from this row's Our Score and Their Score.

The formulaIF(OR(ISBLANK([goals_for]), ISBLANK([goals_against])), "", [goals_for] & " v " & [goals_against])
NotesType any text.

Summary

18 figures

The headline answers: subs collected, who still owes and the season record.

FigureWorked out as
Members on the list

The number of rows on Members with Member Name filled in.

The formulaCOUNTA([Members!full_name])
Total subs due for the season

The total of Subs Due on Members.

The formulaSUM([Members!subs_due])
Total collected so far

The total of Amount on Payments.

The formulaSUM([Payments!amount])
Still outstandingSubs due less everything received.

The total of Still Owing on Members.

The formulaSUM([Members!balance])
Share of subs collected

Worked out from Amount on Payments and Subs Due on Members.

The formulaIFERROR(SUM([Payments!amount]) / SUM([Members!subs_due]), 0)
Members who still owe

Worked out from Subs Status on Members.

The formulaCOUNTIF([Members!payment_status], "Unpaid") + COUNTIF([Members!payment_status], "Part paid")
Members fully paid up

The number of rows on Members where Subs Status is “Paid”.

The formulaCOUNTIF([Members!payment_status], "Paid")
Members who have paid nothing

The number of rows on Members where Subs Status is “Unpaid”.

The formulaCOUNTIF([Members!payment_status], "Unpaid")
Largest amount owed by one member

The largest Still Owing on Members.

The formulaIFERROR(MAX([Members!balance]), 0)
Payments received this month

Worked out from Amount and Date Received on Payments.

The formulaSUMIFS([Payments!amount], [Payments!payment_date], ">=" & EOMONTH(TODAY(), -1) + 1, [Payments!payment_date], "<=" & EOMONTH(TODAY(), 0))
Fixtures played

The number of rows on Fixtures with Our Score filled in.

The formulaCOUNT([Fixtures!goals_for])
Fixtures still to play

Worked out from Date and Our Score on Fixtures.

The formulaCOUNTA([Fixtures!fixture_date]) - COUNT([Fixtures!goals_for])
Season record

Worked out from Result on Fixtures.

The formulaCOUNTIF([Fixtures!result], "Win") & " won, " & COUNTIF([Fixtures!result], "Draw") & " drawn, " & COUNTIF([Fixtures!result], "Loss") & " lost"
Win rate

Worked out from Result and Our Score on Fixtures.

The formulaIFERROR(COUNTIF([Fixtures!result], "Win") / COUNT([Fixtures!goals_for]), 0)
Goals scored

The total of Our Score on Fixtures.

The formulaSUM([Fixtures!goals_for])
Goals conceded

The total of Their Score on Fixtures.

The formulaSUM([Fixtures!goals_against])
Goal difference

Worked out from Our Score and Their Score on Fixtures.

The formulaSUM([Fixtures!goals_for]) - SUM([Fixtures!goals_against])
Next fixtureEarliest date on the fixture list. Remove past fixtures or sort by date to keep this useful.

The smallest Date on Fixtures.

The formulaIF(COUNT([Fixtures!fixture_date])=0, "", MIN([Fixtures!fixture_date]))