Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

Odsetki w Excelu jako dodatek ale inaczej

Giena 123 11 Lis 2009 21:47
  • #1 11 Lis 2009 21:47
    Giena 123
    Poziom 10  

    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 Lis 2009 22:51
    adamas_nt
    Moderator Programowanie

    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 Lis 2009 08:02
    Giena 123
    Poziom 10  

    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.

  Szukaj w 4mln produktów
Przeglądaj produkty