Pierwsze na rynku czasopismo, które stroni od teoretyzowania, natomiast wskazuje konkretne rozwiązania poparte przykładami z praktyki i opiniami wybitnych specjalistów.
Wykorzystanie Excela dla rozliczeń różnic kursowych na rachunku bankowym. |
Naturalnym rozwiązaniem, zgodnym z ustawa o rachunkowości jest przyjecie do rozliczenia kursu średniego NBP. Pozostaje jednak kolejny problem do rozwiązania, a mianowicie sposób naliczania kursu historycznego. W uproszczeniu możemy stwierdzić że każda wpłata na rachunek buduje nam kurs historyczny, natomiast wypłata ostatecznie rozlicza różnice kursowe. Na prostym przykładzie liczbowym wygląda to następująco:
Sytuacja z naliczeniem kursu wypłaty jest prosta ponieważ znamy kurs z danego dnia. Sytuacja komplikuje się przy naliczeniu kursu historycznego, zwłaszcza kiedy mamy wiele operacji na rachunku. W praktyce stosuje się dwa podejścia:
Pierwsza metoda polega na obliczeniu średnioważonego kursu ze wszystkich wpływów od momentu założenia rachunku do dnia rozliczanej operacji wypływu. Podstawową zaletą tej metody jest łatwość w użyciu. Druga metoda jest bardziej skomplikowana, ale z drugiej strony daje dokładniejsze wyniki i bardziej jest zgodna z logiką. Polega na takim obliczeniu kursu historycznego, aby do jego kalkulacji weszły ostatnie nie rozliczone wpłaty składające się kwotę rozliczanej obecnie wypłaty. W praktyce polega to na:
Jak łatwo można się domyśleć, najczęściej wykorzystywaną metoda jest metoda kursu średniego. Najważniejszym argumentem jest fakt, że aby stosować metodologie FIFO konieczne jest wdrożenie złożonego oprogramowania. Na tym przykładzie chciałbym zadać kłam takiemu twierdzeniu, pokazując jak samodzielnie można przygotować funkcję w arkuszu MS Excel, która zabezpieczy poprawne naliczenie różnic zgodnie z metodologią FIFO.
Pierwszym krokiem jest przygotowanie szablonu do ewidencji operacji na rachunku bankowym. Do każdej daty należy przypisać kurs średni NBP. Do tego celu można wykorzystać funkcję WYSZUKAJ.PIONOWO według daty notowania i połączyć nasz szablon z tabelą notowań.
Przykładowy szablon powinien wyglądać jak na obrazku poniżej:

Z punktu widzenia naszej analizy kluczowe są kolumny H, I, J. Kolumna H zawiera automatyczne wyliczenie salda rachunku na dzień, natomiast w kolumnach I i J wyliczane są różnice kursowe według dwóch metod.
Dla przykładu w wierszu 5 wprowadzono w tych kolumnach następujące formuły:
Kolumna |
Formuła |
|
H |
=H4+F5-G5 |
|
I |
=(Fifo_fx(B5;F$3:F5;G$3:G5;E$3:E5)-E5)*G5 |
|
J |
=(SUMA.ILOCZYNÓW(F$3:F5;E$3:E5)/SUMA(F$3:F5)-E5)*G5 |
Kalkulacja salda rachunku jest stosunkowo prosta i polega a dodaniu do salda poprzedniego (wiersz wyżej) różnicy pomiędzy wpływem i wypływem z danego dnia.
Kalkulacja różnicy w kolumnie J (według kursu historycznego) polega na:
Podobny algorytm wykorzystany został w kalkulacji FIFO, z tym, że kurs historyczny obliczony jest z wykorzystaniem tzw. funkcji użytkownika Fifo_fx. Funkcję taką buduje się w edytorze Visual Basic (wywoływany kombinacją ALT+F11):
Wygląd edytora przedstawia obrazek poniżej:

Aby przygotować funkcję musimy pamiętać o strukturze konstrukcji:
Function Nazwa_Funkcji (parametry)
End Function
Dzięki powyższemu zapisowi, przygotowana przez nas funkcja będzie widoczna w arkuszu tak jak każda inna funkcja Excela:

W kategorii funkcji użytkownika znajdziemy Naszą funkcję, co więcej program pomoże nam ją wprowadzić:

Żeby jednak funkcja była użyteczna, musimy przekazać programowi nasze intencje w języku dla niego zrozumiałym. Dlatego wchodzimy na pole programowania z użyciem Visual Basic for Application czyli popularnych makr. Wbrew pozorom nie jest to skomplikowane, a w przyszłości powoduje wręcz, że łatwiej jest napisać własną niż męczyć się ze złożonymi formułami. Szczególnie dotyczy to przypadku, kiedy mamy wiele różnych warunków.
Na przykładzie naszej funkcji kod budowany jest następująco:
wyplyw_rozliczany = zakres_cr(n)
wplyw_rozliczany = 0
suma_wyplywy = 0
For x = 1 To n - 1
suma_wyplywy = suma_wyplywy + zakres_cr(x)
Next x
fifo_kurs = 0
fifo_suma = 0
suma_wplywy = 0
For y = 1 To n - 1
suma_wplywy = suma_wplywy + zakres_dt(y)
If (suma_wplywy > suma_wyplywy And fifo_suma < zakres_cr(n)) Then
If (suma_wplywy - suma_wyplywy) >= zakres_dt(y) Then
If zakres_dt(y) > (zakres_cr(n) - fifo_suma) Then
fifo_kurs = fifo_kurs + (zakres_cr(n) - fifo_suma) * zakres_kurs(y)
fifo_suma = zakres_cr(n)
Else
fifo_kurs = fifo_kurs + zakres_dt(y) * zakres_kurs(y)
fifo_suma = fifo_suma + zakres_dt(y)
End If
Else
If (suma_wplywy - suma_wyplywy) > (zakres_cr(n) - fifo_suma) Then
fifo_kurs = fifo_kurs + (zakres_cr(n) - fifo_suma) * zakres_kurs(y)
fifo_suma = zakres_cr(n)
Else
fifo_kurs = fifo_kurs + (suma_wplywy - suma_wyplywy - fifo_suma) * zakres_kurs(y)
fifo_suma = (suma_wplywy - suma_wyplywy)
End If
End If
End If
Next y
If zakres_cr(n) > 0 Then
Fifo_fx = fifo_kurs / fifo_suma
Else
Fifo_fx = 0
End If
End Function
Tak jak wcześniej wspomniałem zaczynamy od ciała funkcji, czyli zamknięcia zapisów pomiędzy definicją nazwy (Function) oraz jej końcem (End Function). Logika powyższego algorytmu sprowadza się do:
W ten sposób w zmiennej fifo_kurs zbieramy wpłaty historyczne nierozliczone które składają się na rozliczaną wypłatę pomnożone przez odpowiadające im kursy. W zmiennej fifo_suma zbieramy wartości tych wpłat. Na końcu pozostaje obliczenie kursu historycznego jako ilorazu fifo_kurs i fifo_suma.
Tak przygotowana funkcja może być wykorzystana nawet z podstawową znajomością Excela, a jej użycie nie różni się w praktyce poziomem skomplikowania od innych „wbudowanych” funkcji. W ten sposób metoda FIFO może być wykorzystana przy użyciu arkusza kalkulacyjnego, bez dodatkowych nakładów na specjalistyczne oprogramowanie. Jak widać na analizowanym przykładzie w warunkach dużej zmienności kursów walut, zastosowanie tej metody jest bezpieczniejsze i bardziej opłacalne z punktu widzenia wyniku. Metoda kursu średniego zwróciła stratę na poziomie 11 315 zł, natomiast zastosowanie metody FIFO pozwoliło ograniczyć ją do 4 079 zł.
