Overview
Write a brief description of what the template does.
Essentially, this template takes a user supplied list of inter-grain recurring expenses on one sheet (Recurring Expense Entry
), and then dynamically generates a row for every expected due date of those expenses that fall between two user supplied dates on another sheet (Generated Expenses
).
It works with 10 frequency grains: One-Time, Weekly, Bi-weekly, Semi-monthly, Monthly, Bi-Monthly, Quarterly, Semi-Annually, Annually, and Bi-Annually. When a user flags an expense as paid in the transactions sheet, it will be flagged as paid in the generated list as well.
What is the goal of your workflow? What problem does it solve?
This workflow is mainly for developers to use as a base for building dashboards/reports to view past, present, or future recurring expenses. End users can use this sheet, but it cannot be sorted in any way due to the logic used to generate it. So viewing it directly isn’t the best experience. I’ve supplied a basic report sheet with it to show how the data can be pulled into another sheet for viewing that could be useful.
You would pass your report start and end dates to the correct fields on the Generated Expenses
sheet (or enter dates directly if you just want to use it with no report), and a list of expenses from Recurring Expense Entry
would generate between those dates. You could then query that generated list to be displayed in your report.
- I have supplied a really basic ‘report’ example sheet with the solution so you can see how to pull the data into another sheet for your purposes.
The problem that this solution solves is that it allows for use of a more granular expense list. I’ve seen a few solutions that have aimed to tackle recurring expenses, but the smallest grain they all allow for an expense frequency is monthly. This workflow breaks that barrier by adding weekly, bi-weekly, and semi-monthly frequency options.
How did you come up with the idea for your workflow?
I built these sheets for a custom report I’ve been working on (and hope to release soon). The report takes any past, present, or future paycheck date as an input, and then displays a series of paychecks and the expenses that fall between them. For this, I needed a list of expenses, along with the actual dates they should be due. The expense list needed to handle different grains, display the correct due dates, and cover any period that I wanted to look at. Thus, the Generated Expenses
sheet was born.
After building out my solution, I realized that this sheet, along with the Recurring Expense Entry
sheet that it pulls data from, could be offered as a separate solution for anybody else that has this base need to generate a list of expected expenses between given dates.
Please describe your workflow. What are the sheets? Does it use any custom scripts or formulas?
- There are two custom sheets required:
Recurring Expense Entry
andGenerated Expenses
- There is one custom sheet that is optional:
Credit Card Settings
- The solution also requires an extra column be added to the
Transactions
sheet named Expense Tag, and a data validation rule set on it that points to the Expense column on theRecurring Expense Entry
sheet (see install instructions).
Recurring Expense Entry
- Required. Takes a user supplied list of recurring expenses, and displays a few metrics for that expense pertaining to the current month. All green fields are required, unless stated otherwise. The fields to enter are:
- Active - You can toggle this on and off if you want to temporarily stop an expense from generating rows. Active is checked, inactive leave blank.
- Expense - This is the name of the Expense. It must be unique within this column, but can be set to anything you’d like.
- Frequency - How often is the expense due? There are 10 grains to choose from the dropdown:
– One-Time: Occurs on the start date only
– Weekly: Same day every week
– Bi-Weekly: Same day every other week
– Semi-Monthly: Twice a month
– Monthly: Once a month
– Bi-Monthly: Every other month
– Quarterly: Every 3rd month
– Semi-Annually: Twice a year
– Annually: Yearly
– Bi-Annually: Every other year - Start Date - The first date the expense is due. This will determine the dates that are assigned to the expense in the
Generated Expenses
sheet.
– For Semi-Monthly: The first day of the month that needs paid is calculated from the Start Date. The day value must be the first day of the month that the expense is due. So if something is due on the 5th and 20th, the start date should be like5/5/2018
. Day value must be the 5th in this instance. - End Date - Optional for all frequencies except Semi-Monthly.
– For Semi-Monthly: The second day of the month that needs paid is calculated from the End Date. If the expense has a real end date, enter the month and year of the end date, but use the second day of the month that needs paid as the day value. If there is no end date, set the month to 12 and year to 2999 (or some other far off future date). So if something is due on the 5th and 20th, the end date would be like5/20/2025
if it ends, or12/20/2999
if there is no end date. If no end date is selected, the last day of each month will be used instead. - Amount Per Occurrence - Budgeted amount planned each time the expense is due.
- Pay Method - The credit card or checking account responsible for paying the expense.
- Auto-Pay - Optional. Choose an option from the dropdown if the expense is set up for Auto-pay
= auto-pay is set up to pay the full amount due
● = auto-pay is setup for either the minimum due balance, or a set amount that may or may not cover the expense - Notes - Optional. Enter whatever you want here.
The automatic calculated metrics on this sheet are:
- Last Paid On - The date of the most recent transaction on
Transactions
that has an Expense Tag matching the expense name. - Occurrences in { month } - Will calculate how many occurrences of that expense to expect in the current month. This will automatically update on the 1st of every month.
- Total Monthly Amount - Will be the amount per occurrence multiplied by the expected occurrences that month. This will automatically update on the 1st of every month.
– If the expense is set to end in the current month, or started in the current month, this will likely be off. It is looking for how many times that this expense will occur in the entire month, and not taking into account start/end dates. Adding that in may be possible, but would be challenging and have little payoff. - Master Pay Method - If the
Credit Card Settings
sheet is installed and the Pay Method for an expense is set to a credit card, this will retrieve the checking account that is set as the payment method for that credit card. If the sheet is not installed, it will mirror the pay method you set in this sheet.
Generated Expenses
- Required. Takes the expense list entered in Recurring Expense Entry
and dynamically generates a row for every expected due date of those expenses falling between two supplied dates. The only two cells that should ever change here are the View Start and View End dates at the top.
– These dates can be entered directly into the sheet, but can also be fed from start & end date fields on a report page. The latter is preferred, as this sheet cannot be sorted in any way, due to the logic used to generate it. See the number list below for a rundown of that logic.
For any solution you build, the name of Generated Expenses
should be changed to reflect the report that it’s feeding. (“Quarterly Projected Generated Expenses”, etc…) Then, that name should be referenced in the report you build. This way, if a user wants two solutions that both use this solution as a base, there won’t be any sheet naming conflicts. They would just have two instances of this sheet, with different names, driving different reports, both using the same Recurring Expense Entry
sheet as a base.
The dynamic list on Generated Expenses is built in multiple steps. This is all automatic. The only manual step is step 1. This info is not necessary for use, but is added as a “How does it work” section. You can skip to the next screengrab/section if you’d like.
- The View Start and View End dates are supplied at the top. Typically, these cells would reference user input cells in a report, but you can enter data directly here as well. Must be valid dates, and the start date must be before the end date.
- The amount of Total Months that fall within the view time frame are generated to the right of the start/end dates.
- The Expense list on the left is generated from
Recurring Expense Entry
. This is every expense entered that is:
– Active
– The start/end dates of the expense overlap the view start and end dates from above. - Depending on the frequency for each expense, the number of Occurrences between the view dates for the expense will be generated.
- The dynamic list starts to generate. The Expense Name from the left is repeated however many times the corresponding Occurrences column says using a custom formula that utilizes the REPT and BYROW functions.
- Amount, Pay Method, Start Date, and Auto-Pay are pulled into the generated section next to the Expense using Vlookups.
– I could pull these all in with the expense name, but the rept function has an upper character limit (due to each cell having a character limit), so I kept that part as lean as possible. - The Date for the expenses are generated, depending on the frequency set. Each frequency calculates this differently. All frequencies use the expense Start date in some fashion. Semi-Monthly(2x a month) also uses the expense End Date to calculate the second due day of the month.
- RowNumber is Generated using a simple formula. This is not used for anything.
- Paid column is generated next. It uses a query that looks to see if the Expense name was entered into the new Expense Tag column in the
Transactions
sheet on a date near the generated date. The window that the query looks for expenses is also dependent on the frequency. - Active is calculated: If the date we generated falls between the view start and end dates, it will be 1. Otherwise, it’s zero (0)
– If an expense starts or ends halfway through the dates set in the view start/end, the process will still generate out the full amount of instances needed to cover the view start/end, along with the generated due dates. This then looks at that generated date and makes sure it falls within the expense Start/End dates. You would query the list where Active = 1 to get a list of all the true expense dates.
Credit Card Settings
- Optional. Used to pull back the checking account set to pay a credit card if the card is selected as a pay method for an expense. If the Credit Card Settings
sheet is not installed, Master Pay Method will mirror the pay method you set in Recurring Expense Entry
. More information on the Credit Card Settings
sheet can be found here.
Installation
Only two Tiller core sheets are required for this to work:
- Accounts - Used to pull back checking and credit card accounts for use in the Pay Method dropdown on
Recurring Expense Entry
. - Transactions - Used to pull back the Last Paid On date on
Recurring Expense Entry
, as well as if an expense has been Paid onGenerated Expenses
The following solutions have a dependency on this template:
- No solutions currently have a dependency on this template.
To install:
- Add a column to your Transactions sheet named Expense Tag
- Open the attached workflow
- Optional - Right click on
Credit Card Settings
and copy to your Tiller solution
– Rename from Copy of Credit Card Settings to Credit Card Settings - Right click on the
Recurring Expense Entry
sheet and copy to your Tiller solution
– Rename from Copy of Recurring Expense Entry to Recurring Expense Entry - Right click on the
Generated Expenses
sheet and copy to your Tiller solution
– Rename from Copy of Generated Expenses to whatever you’d like, as it is the end of the dependency chain for this template. If you want to build a report on top of it, It is suggested that you rename this sheet to reflect what report it feeds. - Remove all sample data from the sheet.
- Populate
Credit Card Settings
&Recurring Expense Entry
sheet fields that are green. - While on the
Transactions
sheet, go to Data > Data Validation
– Enter the following rule for the entirety of your new Expense Tag column (mine is onF2:F
):
–='Recurring Expense Entry'!$B$7:$B
– Change column B in the formula if you move the Expense column onRecurring Expense Entry
!
To Uninstall:
- Right-click and delete the installed sheets above.
- Delete added Expense Tag column on the
Transactions
sheet.
Install notes:
Please follow the installation order path above. Install a sheet, rename it to remove "Copy of ", then install the next sheet in the list. Each sheet references the previous one in some way. If you install a sheet out of order, Google Sheets will not recognize these reference formulas and throw a #REF
error, even after the sheet has been added and is currently present. The only way I’ve found to get the reference to re-validate is to cut the formula out of the cell completely and paste it back in. Once this is done, Google Sheets has an “Oh yeah!” moment and recognizes the sheet is there and the formula is now valid.
Setup
Once installed using the above instructions, you can enter values into the green fields on Credit Card Settings
& Recurring Expense Entry
. Then, you can hook into the View Start and View End dates by referencing date fields in your report. After feeding dates to View Start and View End on Generated Expenses
, You should see that sheet come to life with your projected expense data.
For the included solution, the View Start and View End dates are controlled by the Sample Report
sheet.
- If you would like to install the sample report into your own solution:
– Right click on it and rename from Copy of Sample Report to Sample Report
– Change the value in cellN2
fromGenerated Expenses
to whatever you named that sheet
– OnGenerated Expenses
, paste the following formula into cellL4
:='Sample Report'!C2
– OnGenerated Expenses
, paste the following formula into cellL5
:='Sample Report'!C3
Usage
There is no real upkeep for this solution outside of adding/updating expenses and credit cards.
You change the View Start and End Dates, and the generated expenses change to reflect the timeframe.
Permissions
Is it ok for others to copy, use, and modify your workflow?
No. This permission has been revoked as of 9/29/2023. All who already have the solution are free to keep it for personal use. But I do not give permissions to modify or re-upload my work, in part or in full, to Tiller or any other site. Truthfully, I spent too much time and effort on it to have somebody else re-upload it and receive more of a reward than I did for designing the original. I will also not be releasing the documentation I’ve been building to describe all formula functions in detail.
Notes
-
If more rows are required on the
Generated Expenses
sheet, you just have to add them to the bottom, then drag formulas in three cells down to populate the new rows. The cells you need to do this to are dark grey: Date, RowNumber, and Paid. All other formulas are wrapped in array functions, and automatically handle new rows.
-
The accounts that can be selected on the
Credit Card Settings
sheet are filtered down to accounts with a Type of ‘Credit’ on theAccounts
sheet. Unfortunately, account types are set by the institution, and cannot be changed. If your institution sends an account through as a different type (i.e: “OTHER”), there is a section in the hidden area (Y7:Y
) that will allow you to select additional types. Adding a type to the list will add all accounts of that type to the dropdown.
-
The accounts that can be selected on the
Recurring Expense Entry
sheet are filtered down to accounts with a Type of ‘Credit’ or ''Checking on theAccounts
sheet. Unfortunately, account types are set by the institution, and cannot be changed. If your institution sends an account through as a different type (i.e: “OTHER”), there is a section in the hidden area (U7:U
) that will allow you to select additional types. Adding a type to the list will add all accounts of that type to the dropdown.
FAQ
Please ask any questions you have below and I will reply, and update this section accordingly.