X

Odsetki w Excelu jako dodatek ale inaczej

Giena 123 11 Nov 2009 21:47
  • #1 11 Nov 2009 21:47
    Giena 123
    Level 10  
    Helpful post? (0)
    Zwracam się z prośbą do osób którym napisanie kodu nie sprawia problemów a wręcz odwrotnie -przyjemność. Znalazłem w sieci kod (nie znam autora) dodatku do Excela i formułę dzięki którym można obliczać odsetki za dany okres. Mój problem polega na tym, że nie mam zielonego pojęcia jak zrobić (zmienić kod) aby odsetki można było liczyć nie od pojedynczej wpłaty ale od wpłat okresowych. Chodzi o to, że odsetki muszą być liczone jako suma kolejnych okresów tj. od daty A do daty B, od A + 1 m-c do daty B, od daty A + 2 m-ce do daty B itd. aż do chwili gdy miesiąc daty A + n = miesiąc daty B.

    Funkcja wygląda następująco

    =odsetki(A3;A1;A2;C1:D2)

    gdzie:
    - komórka A1 i A2 - okres za jaki liczymy odsetki
    - A3 - kwota podstawowa
    - C1 i kolejne komórki w kolumnie C tworzą tablicę początków kolejnych okresów obowiązywania zmienionej stawki
    - A5 - wynik obliczenia


    Kod jako dodatek dla pojedyńczej wpłaty




    Option Explicit
    Option Base 1
    Public Function Odsetki(Kwota, Data_Płatności As Date, Data_Wpłaty As Date, Tablica)
    '**********************************************************
    'Funkcja obliczjąca odsetki od zadanej kwoty
    'Tabela jest to zakres komórek gdzie umieściliśmy stopy odsetkowe
    'W 1 kolumnie początki dat obowiązywania - w 2 stopy procentowe
    'Uwaga excl.gif! - Tablica musi być posortowana w/g dat (rosnąco)
    '*************************************************************

    Dim Ile_dni As Integer 'ile dni zaległości
    Dim Ile_stawek As Integer 'ile wartości stóp odsetek
    Dim Dni As Integer 'Licznik dni
    Dim Stawki As Integer 'Licznik stawek odsetek
    Dim Stawka 'Stawka procentowa
    Dim suma
    Ile_dni = Data_Wpłaty - Data_Płatności
    Ile_stawek = Tablica.Count

    Odsetki = 0

    For Dni = 1 To Ile_dni

    For Stawki = 1 To Ile_stawek Step 2
    If Data_Płatności + Dni > Tablica(Stawki) Then
    Stawka = Tablica(Stawki + 1)
    Else
    Exit For 'co by nie leciało dalej jak już znajdzie
    End If

    Next

    Odsetki = Odsetki + (Kwota * Stawka / 365)
    Next

    Odsetki = Application.WorksheetFunction.Round(Odsetki, 6)
    'Z tego co wiem odsetki od zaległości podatkowych zaokrągla się do pełnych dziesiątek groszy
    End Function
  • #2 11 Nov 2009 22:51
    adamas_nt
    Moderator Programowanie
    Helpful post? (0)
    W związku z tym, że jest to funkcja użytkownika najprościej byłoby dołożyć jeszcze jeden, najlepiej opcjonalny argument typu integer jako liczba miesięcy i wpisywać go ręcznie do funkcji lub pobierać z komórki. Ilość dni jest różnicą dat, więc wewnątrz kodu wystarczy tylko dodać do daty płatności wartość argumentu (funkcja: DateSerial) przed linią "Ile_dni = Data_Wpłaty - Data_Płatności".

    Przykład użycia: W kolumnie F wpisujesz kolejne liczby (0,1,2,3 itd), W E1 umieszczasz funkcję z adresami bezwzględnymi poza ostatnim argumentem i przeciągasz w dół. Gdzieś wyjdzie zero...

    p.s No i zmieniłbym te polskie znaki. Na komputerze z innym językiem niż polski funkcja może się "wysypać"...
  • #3 12 Nov 2009 08:02
    Giena 123
    Level 10  
    Topic author Helpful post? (0)
    Dzięki za odpowiedź. Spróbuję wg Twojej podpowiedzi. Zobaczę czy będzie to wystarczające. Bardzo mi zależało aby cała funkcja była wpisana do jednej komórki w danym wierszu. Teraz pobieranie danych tj. daty początkowej i końcowej z danego wiersza - a dat, i stawek % mam w innym arkuszu tego samego skoroszytu więc może faktycznie dopiszę w nim inne dane pomocnicze.
    Cała formuła i dodatek w swojej wersji pierwotnej działają super. Sprawdzałem wyniki z kalkulatorami dostępnymi za stronach www. Problem polega na tym, że żaden nie umożliwia obliczenia odsetek dla wpłat okresowych (cyklicznych) tylko dla pojedynczej wpłaty. Myślałem, że można w kodzie napisać jakąś pętlę do wykonania, która załatwi całą sprawę. W VB jestem zielony.
    Jeszcze raz dzięki za reakcję. Pozdrawiam.
  Search 4 million + Products
Browse Products