Update date in Excel sheet trough VBA - excel

I have an Excel sheet where customers have option to pay by installments like in term of 1, 3, 6 and 12 monthly Payments, and the installment period is not fixed (like for some clients it is 3 months while for others 6 months)
So if a Customer Pays today. 5/10/2016 has Frequency of 6 Month I click a paid button and it Adds 6 month to the next Due Date (which is 01/10/2017)
Second thing is payment term should change when client pay. for example (if client have to pay in 6 months and he pay some amount after 2nd month then the payment term should be 4 month rather than 6 months)
Is there a way to do it through macros VBA Excel?

This can easily be done without VBA, using a formula.
First, I suggest you change the text values from "6 month" to numbers. It is easy to format a number to show with the word "month" after it, using custom format 0 \mo\nt\h. Then you can use a formula like
=EDATE(B2,A2)
If you don't want to change the text values, you can do it in-formula with a substitute function like this:
=EDATE(B2,SUBSTITUTE(A2," month","")+0)
Start in row 2 and copy down.
If you really need this in VBA, you can use Application.WorksheetFunction.EDate() to the same effect.

Related

MS Excel sorting formula

Microsoft money used to be a brilliant programme for keeping track of a pension portfolio in that it showed value change weekly, monthly, 3 monthly and year to date, now it is no longer supported I have been trying to find an alternative. I now have an I Mac with MS excel on but am trying to do a sort and display on the following and try keep track as per MS Money did.
[Sample][1]
This data is updated weekly and would like to know if it is possible to replicate MS Money.
[1]: https://i.stack.imgur.com/BLahL.png
ok so lets try the things you said about and see if we can get you close:
name the ranges (link) dates and values
weekly movement (current value / value 1 week ago):
=SUMIF(dates,MAX(dates),values)/SUMIF(dates,MAX(dates)-7,values)
1 month movement:
=SUMIF(dates,MAX(dates),values)/SUMIF(dates,MAX(dates)-ROUND((MAX(dates)-EDATE(MAX(dates),-1))/7,0)*7,values)
3 month movement:
=SUMIF(dates,MAX(dates),values)/SUMIF(dates,MAX(dates)-ROUND((MAX(dates)-EDATE(MAX(dates),-3))/7,0)*7,values)
ytd:
=SUMIF(dates,MAX(dates),values)/SUMIF(dates,MAX(dates)-ROUND((MAX(dates)-DATE(YEAR(MAX(dates)),1,1))/7,0)*7,values)
this assumes those named ranges and that the date is exactly every 7 days apart. if also looks for the closest date to 1 month ago, 3 months ago and start of year.
also it does a current value as percentage of the start value for the period

Reinvoice every 12 months

Trying to create an invoice to auto populate. Have done this in VBA previously, but now the sheet is going on the cloud, and being used by Excel online so, VBA is out, unfortunately!
Trying to make a membership fee reappear every 12 months based on their start date!
I was trying around with EDATE, and got it to work on my test subject, but then realized it wouldn't work as I'm only going off the first 12 months!
Need a fresh set of eyes to give me ideas, or walk me through a simple solution (if possible)
Currently have the following, which works for the first year, then it won't!
Cell X7 = =EDATE(TODAY(),3) <----- Creates the cut off for invoicing if Membership due before then.
Cell V12 = =VLOOKUP(O12,'Youth Details'!$A$4:$H$95,8,0) <---- Returns their start date. i.e 19-Nov-2020
Cell W12 = =IF(AND(V12>TODAY(),V12<X7),"True", "False") <---- Returns if they have been with us for 9 months to 12 months and needs to be invoiced!
That works, for their first year, then the following year it won't invoice them as they've been there for 24 months.
I was thinking about expanding my VLOOKUP in cell V12, that if there membership was over 12 months ago, to add 12 to it, but got confused!
Any suggestions on where to go from here?
One way to do it might be
Figure the number of months they've been a member, like say 34.
Use the MOD() modulus function with a divisor of 12 (months). This will discard the number of whole 12-month-periods (years) they've been a member and leave you with just the number of months since their last anniversary. So for 34, it'd give "10" months since their 2-year anniversary.
If the answer from #2 says they're getting close to renewal, like they're 9+ months in to their current membership year, invoice them.
Cell V12: =VLOOKUP(O12,'Youth Details'!$A$4:$H$95,8,0) <---- Returns their start date, like 1-Jan-2019
Cell V13: =DATEDIF(V12, TODAY(), "M") <---- Total # of months they've been a member, like 34
Cell W12: =IF(MOD(V13, 12) >= 9, "True", "False") <---- Returns if it's been 9+ months since their last anniversary and they need to be invoiced!
Of course, if you allow people to prepay, then like AakashM points out it's worth making sure you're not invoicing them for something they've already paid.

Number of times an event occurs per year depending on start date and frequency (excel)

I'm trying to develop a formula in MS Excel that will give me the number of occurrences a task will happen in a year (or month), based on a start date, frequency and schedule in a table. I am looking to produce a table like the following (assuming the start date is 01/01/YR1):
I'm open to VBA suggestions also.
The minimum frequency is completing the task every week. Not taking into account daily tasks here. The data is held in a table. I calculated the 'times per year' using :
=IF([#Schedule]="Months",(12/[#Frequency]), IF([#Schedule]="Weeks",(52/[#Frequency]),IF([#Schedule]="Years",1/[#Frequency],0)))
I may look to take this onto a monthly schedule also, i.e. number of occurrences for each month across 5 years. It would also be useful to specify an overall end date for when the tasks would stop. (e.g. sometimes it would be year 3, sometimes year 5)
Your help is much appreciated!
=IF(D$2=1,ROUND(D$2*$C3-0.45,0),ROUND(D$2*$C3-0.45,0)-SUM($D3:OFFSET($C3,0,D$2-1)))
The formula is dragable so just place it in D3 then drag across then down. Also note the change in format of the table so the year numbers are usable in the calculations.
Note: I would suggest that the value the 5th year of the 2.5 year frequency is incorrect.
In the 3rd year you would do it and have a half year remaining. Then add that to years 4 & 5 and you get 2.5 time to do it again.

Excel Formula for calculating time in round numbers with hours text

I'm trying to figure out a way to create an excel spreadsheet that will allow me to keep track of how many hours I've earned per each paid holiday my company offers, then keep track of how many hours I've used and what's remaining. But I'm unsure how to calculate this properly.
I could easily do the math my self as it's a simple lay out, but I'm trying to find a way that will just let me enter the numbers for earned and used and walk away from anything else.
What I'm trying to do is the follow:
Have multiple sections. In the first section it'll be my holidays. So in like Column A, working down I'd have New Years, Memorial Day, July 4th, etc. Column B working down would be time earned. But this would be labeled in each cell as "8 Hrs" or "4 hrs". Column C would be time used in the same format "4 hrs" "8 hrs". Then Column D would simple be hours remaining.
Now in the second section I'd have holiday hours earned, which is 2 weeks. Not too sure how to lay it out, and then I still have my sick days, but not sure if I should include that in section 2 or not with the vacation time.
I'd like a way to be able to simply Calculate B2 - C2 = D2. So 8 Hrs - 4 Hrs = 4 Hrs (to show 4 Hrs remaining for each line item.)
Problem is I'm unsure how to calculate remaining time simply because of the Hrs suffix. And with that I also can't calculate total time still remaining, both for holiday hours earn and vacation/sick hours.
Yes, it's easier for me to track it as 8 Hrs rather than 1 day, etc.
Any advice on how to formulate this. Or if anyone knows of a premade template that fits this type of scenario, that I could then just take and integrate into my own spreadsheet.
Sorry if this is confusing in any way.
Also, As I'm no excel wizard, unsure if this is relevant or not, but I'm using Excel 2016, as part of the Office suite.
Another option is to just leave the number as it is and label the column accordingly. Do you really need to see "hrs" in every cell when you know you are tracking hours?
Use a custom number format of,
[>1]0 \H\r\s;[=1]0 \H\r_);0 \H\r\s;[Red]#
... and treat all hours as integers.

Time series mock data generation for 16 years of quarterly data in Excel or Matlab

I would like to generate a mock time series quarterly dataset from, say, 2000-2016 for a variable (quarterly credit growth) that averages around a certain value (say, 30%). Can anyone give a suggestion on how to do this in principle?
Edit: what I was implying were the actual data values for each time period, i.e. data with a certain mean and variance.
Found a solution with a code in Matlab, for anyone interested, see below in answers.
Excel approach:
You can make column A your date list. In A1, or A2 or more if you have header rows, you will have to seed your list by providing the first start date. Lets assume you put your seed date in A2. I would then go about adding 3 month to you start date using a formula, and copy down until you have hit your desired date. In order to add the 3 months I would use the following in A3.
=date(year(A2),Month(A2)+3,day(A1)
that will give you the first day of the month every 3 months. If you want the first day of the month every 3 months, set the day to 1 like so:
=date(year(A2),Month(A2)+3,day(A1)
And end of month could be calculated as:
=eomonth(date(year(A2),Month(A2)+3,day(A1)),0)
however I would prefer to do the end of month calculation based on the row you are in so I would do it more like:
=EOMONTH($A$2,(rows($A$2:A3)-1)*3)

Resources