Overview
This documentation describes how the sheets that I developed can be used as a base by others to develop their own custom reports. I will be releasing a few solutions that use this same sort of setup.
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. If you want to go from active to inactive, you can simply hit backspace while the cell is highlighted.
- Expense - This is the name of the recurring expense. It is used as the value you would tag the transaction with (via a dropdown) when it comes into the
Transactions
sheet.- Do not use a Pipe (|) or at sign (@) in the expense name.
- You can have expenses with the same name, but they must not also have the same start date. This is to allow changes to a recurring expense while keeping record of the old settings. If duplicate expenses exist with the same start date, the names for both records will turn yellow.
- If you make an expense with the same name as an existing expense, set an End Date value for the existing (old) record. It is not recommended to have two expenses with the same name active during the same timespan.
- 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 weekday (Monday, Tuesday, etcâŚ) every week
- Bi-Weekly: Same weekday every other week
- Semi-Monthly: Twice a month on set days
- 1st & 15th, 14th & 22nd, etcâŚ
- Monthly: Once a month on the same day
- 1/13/2023, 2/13/2023, 3/13/2023, etcâŚ
- Bi-Monthly: Every other month on the same day
- 1/13/2023, 3/13/2023, 5/13/2023, etcâŚ
- Quarterly: Every 3rd month on the same date
- 1/13/2023, 4/13/2023, 7/13/2023, 10/13/2023, etcâŚ
- Semi-Annually: Twice a year: once on the same start date, and another 6 months later
- 3/13/2023, 9/13/2023, 3/13/2024, 9/13/2024, etcâŚ
- Annually: Yearly on the same date
- 3/13/2023, 3/13/2024, 3/13/2025, etcâŚ
- Bi-Annually: Every other year on the same date
- 3/13/2023, 3/13/2025, 3/13/2027, etcâŚ
- Start Date - The first date the expense is due.
- 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 like
12/5/2018
. Day value must be the 5th in this instance.
- 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 like
- End Date - Optional for all frequencies except Semi-Monthly. If you enter an expense with the same name of another expense, the old expense should have an end date earlier than the new expense start date.
- 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 like
5/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.
- 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 like
- 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 (see Notes if an account is missing from the selection)
- 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.
- Master Pay Method - If the Pay Method that you selected 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 in the
Credit Card Settings
sheet. Otherwise, it will be the pay method that you chose.
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.
Dependencies
The following Tiller core sheets are required:
- Transactions - Used to pull back if an expense has been Paid on
Generated Expenses
.
This solution has a dependency on the following Tiller Community Solutions:
- Recurring Expense Entry by myself - This solution allows the user to enter a list of recurring expenses, and set the metrics around when it will be due. This sheet serves as the data source that the
Generated Expenses
sheet will use to dynamically generate the expenses for a given period.- Note: This solution has dependencies on another custom solution, Credit Card Settings, which must be installed first. Please consult the documentation, and follow the installation instructions for this sheet.
Installation
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?
This solution is for personal use. I do not give permissions to modify or re-upload my work, in part or in full, to Tiller or any other site.
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.
Solution Link
Version changes
1.0 - Initial release
1.1 - I added the ability to allow for multiple expenses with the same name, as long as they have different start dates. This is to keep record of the values of an expense over time for potential historical reporting purposes. With version 1.0, you would have to replace any old values with new values for an expense instead of closing the record out and creating a new row.