Advertisement
Guest User

Untitled

a guest
Jul 12th, 2019
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Explicit
  2.  
  3. Sub Calculate()
  4.     Dim dataTable() As Variant
  5.     Dim resultTable() As Variant
  6.     Dim rowsNumber As Integer
  7.     Dim columsNumber As Integer
  8.     Dim i As Integer
  9.     Dim mon As Integer
  10.     Dim days_in_month As Integer
  11.     Dim days_in_year As Integer
  12.     Dim days_to_deposit As Integer
  13.     Dim days_from_deposit_to_fund As Integer
  14.     Dim days_from_fund_to_end As Integer
  15.     Dim intrest_to_deposit As Double
  16.     Dim intrest_from_deposit_to_fund As Double
  17.     Dim intrest_from_fund_to_end As Double
  18.     Dim intrest As Double
  19.     Dim rate As Double
  20.    
  21.     rowsNumber = ActiveWorkbook.Sheets(1).Cells(Rows.Count, "C").End(xlUp).Row - 1
  22.     columsNumber = ActiveWorkbook.Sheets(1).Cells(2, Columns.Count).End(xlToLeft).Column - 2
  23.    
  24.     ReDim Preserve dataTable(1 To rowsNumber, 1 To columsNumber)
  25.     ReDim Preserve resultTable(1 To rowsNumber, 1 To columsNumber)
  26.    
  27.     dataTable = ActiveWorkbook.Sheets(1).Range(Cells(2, 3), Cells(rowsNumber + 1, columsNumber + 2)).Value
  28.    
  29.     mon = MonthNumber()
  30.     days_in_month = Day(DateSerial(Year(Now()), mon + 1, 1) - 1)
  31.     days_in_year = DateDiff("d", DateSerial(Year(Now()), 1, 1), DateSerial(Year(Now()) + 1, 1, 1))
  32.    
  33.     For i = 1 To UBound(dataTable, 1)
  34.         rate = dataTable(i, 5) / days_in_year
  35.         If CDate(dataTable(i, 4)) > CDate(dataTable(i, 7)) Then
  36.             days_to_deposit = DateDiff("d", DateSerial(Year(Now()), mon, 1), dataTable(i, 7)) + 1
  37.             days_from_deposit_to_fund = DateDiff("d", dataTable(i, 7), dataTable(i, 4))
  38.             days_from_fund_to_end = DateDiff("d", dataTable(i, 4), DateSerial(Year(Now()), mon, days_in_month))
  39.            
  40.             intrest_to_deposit = dataTable(i, 1) * rate * days_to_deposit
  41.             intrest = dataTable(i, 2) + intrest_to_deposit - dataTable(i, 6)
  42.            
  43.             If intrest < 0 Then
  44.                 resultTable(i, 2) = 0
  45.                 resultTable(i, 1) = dataTable(i, 1) + intrest
  46.             Else
  47.                 resultTable(i, 2) = intrest
  48.                 resultTable(i, 1) = dataTable(i, 1)
  49.             End If
  50.            
  51.             intrest_from_deposit_to_fund = resultTable(i, 1) * rate * days_from_deposit_to_fund
  52.             resultTable(i, 2) = resultTable(i, 2) + intrest_from_deposit_to_fund
  53.            
  54.             intrest_from_fund_to_end = (resultTable(i, 1) + dataTable(i, 3)) * rate * days_from_fund_to_end
  55.             resultTable(i, 2) = resultTable(i, 2) + intrest_from_fund_to_end
  56.            
  57.         End If
  58.        
  59.         resultTable(i, 3) = dataTable(i, 3)
  60.         resultTable(i, 4) = "-"
  61.         resultTable(i, 5) = dataTable(i, 5)
  62.         resultTable(i, 6) = 0
  63.         resultTable(i, 7) = "-"
  64.     Next i
  65.  
  66.     ActiveWorkbook.Sheets(1).Range(Cells(2, 3), Cells(rowsNumber + 1, columsNumber + 2)) = resultTable
  67.  
  68. End Sub
  69.  
  70. Function MonthNumber() As Integer
  71.     Dim month_from_sheet As String
  72.     Dim mon As String
  73.    
  74.     month_from_sheet = ActiveWorkbook.Sheets(1).Range("K1").Value
  75.    
  76.     Select Case month_from_sheet
  77.     Case "Styczeñ"
  78.         mon = 1
  79.     Case "Luty"
  80.         mon = 2
  81.     Case "Marzec"
  82.         mon = 3
  83.     Case "Kwiecieñ"
  84.         mon = 4
  85.     Case "Maj"
  86.         mon = 5
  87.     Case "Czerwiec"
  88.         mon = 6
  89.     Case "Lipiec"
  90.         mon = 7
  91.     Case "Sierpieñ"
  92.         mon = 8
  93.     Case "Wrzesieñ"
  94.         mon = 9
  95.     Case "Pa¿dziernik"
  96.         mon = 10
  97.     Case "Listopad"
  98.         mon = 11
  99.     Case "Grudzieñ"
  100.         mon = 12
  101.     End Select
  102.    
  103.     MonthNumber = mon
  104. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement