Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option Explicit
- Sub Calculate()
- Dim dataTable() As Variant
- Dim resultTable() As Variant
- Dim rowsNumber As Integer
- Dim columsNumber As Integer
- Dim i As Integer
- Dim mon As Integer
- Dim days_in_month As Integer
- Dim days_in_year As Integer
- Dim days_to_deposit As Integer
- Dim days_from_deposit_to_fund As Integer
- Dim days_from_fund_to_end As Integer
- Dim intrest_to_deposit As Double
- Dim intrest_from_deposit_to_fund As Double
- Dim intrest_from_fund_to_end As Double
- Dim intrest As Double
- Dim rate As Double
- rowsNumber = ActiveWorkbook.Sheets(1).Cells(Rows.Count, "C").End(xlUp).Row - 1
- columsNumber = ActiveWorkbook.Sheets(1).Cells(2, Columns.Count).End(xlToLeft).Column - 2
- ReDim Preserve dataTable(1 To rowsNumber, 1 To columsNumber)
- ReDim Preserve resultTable(1 To rowsNumber, 1 To columsNumber)
- dataTable = ActiveWorkbook.Sheets(1).Range(Cells(2, 3), Cells(rowsNumber + 1, columsNumber + 2)).Value
- mon = MonthNumber()
- days_in_month = Day(DateSerial(Year(Now()), mon + 1, 1) - 1)
- days_in_year = DateDiff("d", DateSerial(Year(Now()), 1, 1), DateSerial(Year(Now()) + 1, 1, 1))
- For i = 1 To UBound(dataTable, 1)
- rate = dataTable(i, 5) / days_in_year
- If CDate(dataTable(i, 4)) > CDate(dataTable(i, 7)) Then
- days_to_deposit = DateDiff("d", DateSerial(Year(Now()), mon, 1), dataTable(i, 7)) + 1
- days_from_deposit_to_fund = DateDiff("d", dataTable(i, 7), dataTable(i, 4))
- days_from_fund_to_end = DateDiff("d", dataTable(i, 4), DateSerial(Year(Now()), mon, days_in_month))
- intrest_to_deposit = dataTable(i, 1) * rate * days_to_deposit
- intrest = dataTable(i, 2) + intrest_to_deposit - dataTable(i, 6)
- If intrest < 0 Then
- resultTable(i, 2) = 0
- resultTable(i, 1) = dataTable(i, 1) + intrest
- Else
- resultTable(i, 2) = intrest
- resultTable(i, 1) = dataTable(i, 1)
- End If
- intrest_from_deposit_to_fund = resultTable(i, 1) * rate * days_from_deposit_to_fund
- resultTable(i, 2) = resultTable(i, 2) + intrest_from_deposit_to_fund
- intrest_from_fund_to_end = (resultTable(i, 1) + dataTable(i, 3)) * rate * days_from_fund_to_end
- resultTable(i, 2) = resultTable(i, 2) + intrest_from_fund_to_end
- End If
- resultTable(i, 3) = dataTable(i, 3)
- resultTable(i, 4) = "-"
- resultTable(i, 5) = dataTable(i, 5)
- resultTable(i, 6) = 0
- resultTable(i, 7) = "-"
- Next i
- ActiveWorkbook.Sheets(1).Range(Cells(2, 3), Cells(rowsNumber + 1, columsNumber + 2)) = resultTable
- End Sub
- Function MonthNumber() As Integer
- Dim month_from_sheet As String
- Dim mon As String
- month_from_sheet = ActiveWorkbook.Sheets(1).Range("K1").Value
- Select Case month_from_sheet
- Case "Styczeñ"
- mon = 1
- Case "Luty"
- mon = 2
- Case "Marzec"
- mon = 3
- Case "Kwiecieñ"
- mon = 4
- Case "Maj"
- mon = 5
- Case "Czerwiec"
- mon = 6
- Case "Lipiec"
- mon = 7
- Case "Sierpieñ"
- mon = 8
- Case "Wrzesieñ"
- mon = 9
- Case "Pa¿dziernik"
- mon = 10
- Case "Listopad"
- mon = 11
- Case "Grudzieñ"
- mon = 12
- End Select
- MonthNumber = mon
- End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement