Microsoft Excel nie ma wbudowanej funkcji, która zapisuje kwoty słownie po polsku. Możesz jednak użyć formatowania niestandardowego dla pojedynczych, stałych wartości, dodatku albo własnej funkcji VBA do automatyzacji faktur i innych dokumentów.
Którą metodę wybrać?
Wybór zależy przede wszystkim od tego, czy potrzebujesz jednorazowo wyświetlić konkretny napis, czy przeliczać wiele kwot pobieranych z komórek. Formatowanie zmienia wyłącznie sposób prezentacji, natomiast VBA i dodatki mogą rzeczywiście konwertować liczby na tekst.
| Metoda | Łatwość wdrożenia | Automatyzacja | Zastosowanie |
|---|---|---|---|
| Formatowanie niestandardowe | Bardzo łatwe | Brak konwersji | Stała kwota i prosty wydruk |
| VBA | Średnia | Wysoka | Faktury, zestawienia i własne funkcje |
| Dodatek Excel | Łatwa po instalacji | Wysoka | Gotowe funkcje bez pisania kodu |
Jak użyć formatowania niestandardowego?
Ta metoda sprawdzi się, gdy w komórce znajduje się konkretna kwota, na przykład 1500, a dokument ma pokazywać napis „tysiąc pięćset złotych”. Tekst wpisany w cudzysłowie jest wtedy tylko maską wyświetlania.
- Wpisz kwotę do komórki, na przykład 1500.
- Zaznacz komórkę i otwórz okno Formatowanie komórek. Możesz użyć skrótu Ctrl+1.
- Przejdź do kategorii Niestandardowe.
- W polu „Typ” wpisz format, na przykład
"tysiąc pięćset złotych", a następnie zatwierdź przyciskiem OK.

W arkuszu zobaczysz zapis słowny, ale pasek formuły nadal będzie zawierał liczbę 1500. To oznacza, że Excel wciąż może wykonywać na niej działania matematyczne.
Formatowanie niestandardowe nie zamienia liczby na tekst. Nie odmienia automatycznie słów, nie rozpoznaje groszy i nie utworzy poprawnego zapisu dla kolejnych kwot. Przy wartości 1500,50 nie otrzymasz więc automatycznie formy „tysiąc pięćset złotych 50/100”.
Jak stworzyć funkcję kwota słownie w VBA?
VBA, czyli Visual Basic for Applications, pozwala dodać do Excela własną funkcję. Po jej utworzeniu możesz używać jej podobnie jak standardowych funkcji arkusza, na przykład jako =LiczbaSlownie(A1).
Najpierw włącz kartę Deweloper, jeśli nie jest widoczna:
- Kliknij prawym przyciskiem myszy dowolną kartę wstążki i wybierz „Dostosuj wstążkę”.
- W sekcji „Karty główne” zaznacz „Deweloper”.
- Kliknij OK.
- Naciśnij Alt+F11, aby otworzyć edytor Visual Basic.
- W oknie projektu wybierz skoroszyt, kliknij go prawym przyciskiem myszy i wybierz „Insert” oraz „Module”.
- Wklej kod funkcji do otwartego modułu.

Poniższy kod obsługuje liczby od zera do 999 999 999,99, liczby ujemne oraz grosze zapisane w standardzie 00/100. W polskiej praktyce księgowej zapis ułamkowy, na przykład „50/100”, jest często stosowany na fakturach i przelewach.
Option Explicit
Public Function LiczbaSlownie(ByVal Kwota As Variant) As String
Dim wartosc As Currency
Dim zlote As Long
Dim grosze As Long
Dim wynik As String
Dim minus As String
If IsEmpty(Kwota) Or Not IsNumeric(Kwota) Then
LiczbaSlownie = "#Nieprawidłowa kwota"
Exit Function
End If
wartosc = CCur(Kwota)
If wartosc < 0 Then
minus = "minus "
wartosc = Abs(wartosc)
End If
wartosc = CCur(Application.WorksheetFunction.Round(wartosc, 2))
zlote = Fix(wartosc)
grosze = CInt((wartosc - zlote) * 100)
wynik = LiczbaDoTekstu(zlote) & " "
wynik = wynik & OdmianaZlotego(zlote) & " "
wynik = wynik & Format(grosze, "00") & "/100"
LiczbaSlownie = UCase(Left(minus & wynik, 1)) & _
Mid(minus & wynik, 2)
End Function
Private Function LiczbaDoTekstu(ByVal liczba As Long) As String
Dim jednosci As Variant
Dim nastki As Variant
Dim dziesiatki As Variant
Dim setki As Variant
Dim wynik As String
Dim reszta As Long
jednosci = Array("", "jeden", "dwa", "trzy", "cztery", _
"pięć", "sześć", "siedem", "osiem", "dziewięć")
nastki = Array("dziesięć", "jedenaście", "dwanaście", _
"trzynaście", "czternaście", "piętnaście", "szesnaście", _
"siedemnaście", "osiemnaście", "dziewiętnaście")
dziesiatki = Array("", "", "dwadzieścia", "trzydzieści", _
"czterdzieści", "pięćdziesiąt", "sześćdziesiąt", _
"siedemdziesiąt", "osiemdziesiąt", "dziewięćdziesiąt")
setki = Array("", "sto", "dwieście", "trzysta", "czterysta", _
"pięćset", "sześćset", "siedemset", "osiemset", "dziewięćset")
If liczba = 0 Then
LiczbaDoTekstu = "zero"
Exit Function
End If
If liczba >= 1000000 Then
wynik = LiczbaDoTekstu(liczba \ 1000000) & " milion"
If (liczba \ 1000000) Mod 10 >= 2 And _
(liczba \ 1000000) Mod 10 <= 4 Then wynik = wynik & "y"
If (liczba \ 1000000) Mod 10 = 0 Or _
(liczba \ 1000000) Mod 10 > 4 Then wynik = wynik & "ów"
reszta = liczba Mod 1000000
If reszta > 0 Then wynik = wynik & " " & LiczbaDoTekstu(reszta)
LiczbaDoTekstu = wynik
Exit Function
End If
If liczba >= 1000 Then
wynik = LiczbaDoTekstu(liczba \ 1000) & " tysiąc"
If (liczba \ 1000) Mod 10 >= 2 And _
(liczba \ 1000) Mod 10 <= 4 Then wynik = wynik & "e"
If (liczba \ 1000) Mod 10 = 0 Or _
(liczba \ 1000) Mod 10 > 4 Then wynik = wynik & "y"
reszta = liczba Mod 1000
If reszta > 0 Then wynik = wynik & " " & LiczbaDoTekstu(reszta)
LiczbaDoTekstu = wynik
Exit Function
End If
If liczba >= 100 Then
wynik = setki(liczba \ 100)
reszta = liczba Mod 100
Else
reszta = liczba
End If
If reszta >= 20 Then
wynik = wynik & " " & dziesiatki(reszta \ 10)
If reszta Mod 10 > 0 Then wynik = wynik & " " & jednosci(reszta Mod 10)
ElseIf reszta >= 10 Then
wynik = wynik & " " & nastki(reszta - 10)
ElseIf reszta > 0 Then
wynik = wynik & " " & jednosci(reszta)
End If
LiczbaDoTekstu = Trim(wynik)
End Function
Private Function OdmianaZlotego(ByVal liczba As Long) As String
Dim dwieOstatnie As Long
dwieOstatnie = liczba Mod 100
If liczba = 1 Then
OdmianaZlotego = "złoty"
ElseIf dwieOstatnie >= 12 And dwieOstatnie <= 14 Then
OdmianaZlotego = "złotych"
ElseIf liczba Mod 10 >= 2 And liczba Mod 10 <= 4 Then
OdmianaZlotego = "złote"
Else
OdmianaZlotego = "złotych"
End If
End Function
Po zamknięciu edytora wpisz w arkuszu formułę:
=LiczbaSlownie(A1)
Jeżeli komórka A1 zawiera wartość 1500,50, wynik będzie miał postać zbliżoną do „Tysiąc pięćset złotych 50/100”. Kod zaokrągla wartość do dwóch miejsc po przecinku, dlatego nie należy traktować go jako zamiennika kontroli księgowej dla nietypowych danych lub bardzo dużych sum.

Jak zainstalować dodatek do Excela?
Dodatek jest rozwiązaniem dla osób, które chcą korzystać z gotowej funkcji bez samodzielnego pisania kodu. Pliki dodatków Excela mogą mieć rozszerzenia .xla albo .xlam. Przykładowy dodatek slownie.xla udostępnia funkcje w rodzaju =slownie(A1), zależnie od wersji i dokumentacji konkretnego pliku.
- Pobierz dodatek wyłącznie ze źródła, któremu ufasz, i zapisz plik na dysku.
- W Excelu wybierz „Plik”, „Opcje”, „Dodatki”.
- W polu „Zarządzaj” wybierz „Dodatki programu Excel” i kliknij „Przejdź”.
- Wybierz „Przeglądaj”, wskaż pobrany plik i zatwierdź dodanie.
- Zaznacz dodatek na liście i kliknij OK.
Ścieżka folderu dodatków może różnić się zależnie od systemu i wersji pakietu Office. Dlatego bezpieczniej użyć przycisku „Przeglądaj” w oknie dodatków niż ręcznie kopiować plik do wskazanego katalogu. Po instalacji sprawdź w instrukcji dodatku, jak nazywa się jego funkcja i jakie argumenty przyjmuje.
Na co uważać przy makrach i dodatkach?
Makra dają Excelowi dodatkowe możliwości, ale jednocześnie mogą uruchamiać kod zapisany w skoroszycie lub dodatku. Przed użyciem gotowego pliku sprawdź jego pochodzenie i zakres działania.
- Zapisz skoroszyt z funkcją VBA jako .xlsm, czyli skoroszyt programu Excel z obsługą makr.
- Nie zapisuj pliku z kodem jako .xlsx, ponieważ ten format nie przechowuje makr.
- Nie włączaj makr w dodatkach pobranych z nieznanych stron.
- Używaj zaufanych lokalizacji Excela tylko dla plików, których pochodzenie i zawartość są znane.
- Przed wysłaniem faktury sprawdź kwotę cyfrową, zapis słowny, odmianę waluty i grosze.
Do dokumentów finansowych najczęściej stosuje się zapis groszy jako ułamek, na przykład „Dwa tysiące złotych 00/100” albo „Dwa tysiące złotych 50/100”. Jeżeli potrzebujesz tylko jednego stałego napisu, wybierz formatowanie. Przy regularnym tworzeniu dokumentów lepiej sprawdzi się funkcja VBA lub sprawdzony dodatek.
Artykuł nie stanowi porady finansowej ani księgowej. Przed zastosowaniem automatycznego zapisu w dokumentach firmowych sprawdź wynik i zgodność z procedurami obowiązującymi w Twojej organizacji.