Glad it’s working! I found I wasn’t really using budgeting, or at least I wasn’t benefiting from it. I’ve instead simplified a bit and now just have a couple Envelope Register’s setup for the categories I think are important to track.
if you want to create a code block like @jpfieber, you would enter ``` on the line above and below the code you want to make a block. I typically format the block of text I want to make code in another program (Notepad++), then paste it into the quote block. Pretty much what is below, but remove the space between the smart marks.
`` `
=IFERROR
(
QUERY
(
FILTER
(
{INDIRECT($CC$54), INDIRECT($CC$58), INDIRECT($CC$56)},
INDIRECT($CC$58) <> "", INDIRECT($CC$54) >= A7, INDIRECT($CC$54) < D7
),
"SELECT Col1, Col2, Col3, Col3+0 LABEL Col3+0''"
),
{"","","",""}
)
`` `
@jpfieber: I’m just now starting to dive into the Budget Plan and figure out how it works. I was hoping to marry the functionality of this sheet and my Recurring Expense Entry/Generated Expenses sheets. They’re ultimately holding the same data, and they’re surprisingly similar under the hood! It turns out that I use a lot of similar functions in my Generated Expenses sheet.
One of the similarities I find amusing is our conclusion to use the REPT() function iterated over an occurrence row (cell AF3 on your Budget Plan; cell M7 on my Generated Expenses - Upcoming sheet). Working that out was tedious, but ended up being the key to bust my solution wide open! Then going through your solution just now, I noticed you already did it. I reinvented the wheel for nothing! Lol. But I did notice that the formula I came up with was different than yours.
Your formula:
={"Description"; ARRAYFORMULA(
TRIM(
TRANSPOSE(
SPLIT(
QUERY(
IFERROR(REPT(
OFFSET(B4,0,0,COUNTA(B4:B),1)&"♥",
J4:J
)),
,
999^99
),
"♥"
)
)
)
)}
I also noticed that your formula spits out an extra row that’s being covered up by an IFERROR check. This also makes the “Occurrences” column show a 1 after the last occurrence row.
My formula does not do this, If you would like to give it a try and use it in your template? I replaced it in my local copy and everything looks great!
My formula:
={"Description";INDEX(
SPLIT(
FLATTEN(
SPLIT(
JOIN(
""
,INDEX(
REPT(
BYROW(
$B$4:INDEX($B$4:$B,MATCH("zzz",$B$4:$B))
,LAMBDA(x,TEXTJOIN("|",0,x))
)&"@"
,$J$4:INDEX($J$4:$J,MATCH(9^9,$J$4:$J))
)
)
)
,"@"
)
)
,"|"
)
)}
Ha! Yea, I actually didn’t come up with that from scratch, I copied it from another older template I found in the forums (can’t remember who to give credit to). If I revisit Budget Plan I may take another look at that code and consider updating it, but I haven’t been doing a lot of budgeting, so odds are it’ll stay as is unless someone else wanted to take the code forward and support it. Thanks for pointing that out, I’m sure if was frustrating, but I’m also sure you learned a lot in the process, so nothing lost.
I don’t personally do a lot of budgeting, either. My initial solution just focuses on generating recurring expenses so that I can track what needs paid, and by when.
But my partner really needs the budgeting part of things to keep her savings on track. It has been pretty bothersome to have her set up the individual recurring expenses on my sheet, then go to Categories and account for them there as well. So that got me to thinking about the underlying problem; categories need to be more granular, with the ability to set a category as a recurring expense, then roll up to the category budget. Your sheet does half, and my sheet does the other. So basically merging the two would be ideal, haha. I’m planning on doing this once I wrap up some other things I’ve been working on.
Interesting idea, I’m excited to see it if you plan on sharing!
I will for sure be sharing once completed ![]()
Hi! New to this template and some-what newer to really diving into Tiller capabilities.
Has there been any progress on this update to annual subscriptions required a date change? If not, do you have any resources on where I could start if I wanted to look at the code to update/troubleshoot myself?
I noted that this functionality works in the v 1.81 in the tiller community add-ons, but since there’s no formula in the V2 sheet, not sure where to start!
The code is either in hidden columns off to the right (expand column AE) or is in the heading cells in row 3.
@bunderson71 did @jpfieber’s suggestion help?
Hey @jpfieber ,
Sorry to bother you so long after your initial post. I think I read somewhere that you moved towards the envelope style of budgeting rather than using the budget plan anymore, but I was wondering if you ever got around to having a working version of the Budget Forecast sheet you were talking about.
I was curious if you could share what you had in mind for that sheet and what was it trying to do.
Thanks!
It’s been so long I don’t even recall. It doesn’t look like I created a template (can’t find one where I have all the others stored), I just found a few notes. Doubt it will be useful, but here’s what I found, sorry I can’t be of more help:
Formula to calculate the date of the transaction based on 1st payment
=IFS(
AND(AE7<>AE6,OR(AH7="Weekly-AVG-Year",AH7="Monthly-AVG-Year",AH7="Annually-AVG-Year",AH7="Past-Category-AVG-Year",AH7="Past-Description-AVG-Year",AH7="Workdays-AVG-Year")),DATE(YEAR(AN7),1,1),
AND(AE7<>AE6,AH7="Workdays"),WORKDAY(AN7-1,1),
AE7<>AE6,AN7,
AND(AE7=AE6,OR(AH7="Monthly")),EDATE(AP6,IF(ISNUMBER(AI7),AI7,1)),
AND(AE7=AE6,OR(AH7="Weekly-AVG-Period",AH7="Monthly-AVG-Period",AH7="Past-Category",AH7="Past-Description",AH7="SpreadOverPeriod",AH7="Weekly-AVG-Year",AH7="Monthly-AVG-Year",AH7="Annually-AVG-Year",AH7="Past-Category-AVG-Year",AH7="Past-Description-AVG-Year",AH7="Workdays-AVG-Year",AH7="Workdays-AVG-Period")),EDATE(AP6,1),
AND(AE7=AE6,AH7="Weekly"),AP6+(7*IF(ISNUMBER(AI7),AI7,1)),
AND(AE7=AE6,AH7="Workdays"),WORKDAY(AP6,1)
)
=IFS(
OR(AH6="Monthly",AH6="Weekly",AH6="Annually",AH6="Workdays"),VLOOKUP(AE6,{'Budget Plan'!$B$4:$B,'Budget Plan'!$M$4:$M},2,FALSE),
OR(AH6="Weekly-AVG-Period",AH6="Weekly-AVG-Year",AH6="Monthly-AVG-Period",AH6="Monthly-AVG-Year",AH6="Annually-AVG-Year",AH6="Past-Category",AH6="Past-Category-AVG-Year",AH6="Past-Description",AH6="Past-Description-AVG-Year",AH6="Workdays-AVG-Period",AH6="Workdays-AVG-Year",AH6="SpreadOverPeriod",AH6="SpreadOverYear"),VLOOKUP(AE6,{'Budget Plan'!$B$4:$B,INDIRECT("'Budget Plan'!$"&SUBSTITUTE(ADDRESS(1,MATCH(#REF!,INDIRECT("'Budget Plan'!$3:$3"),0),4),1,"")&"$4:$"&SUBSTITUTE(ADDRESS(1,MATCH(#REF!,INDIRECT("'Budget Plan'!$3:$3"),0),4),1,""))},2,FALSE)
)
Thanks I’ll give it a look and try to decipher



