Excel funkcija: Skaičių konvertavimas į lietuvių kalbos žodžius

Turinys 

Programoje MS Excel vis dar ( metais) nėra numatytosios default funkcijos, kuri leistų skaičius rodyti lietuvių kalbos žodžiais (angliškai taip pat nėra). Tačiau panaudojus VBA kodą, galima pačiam lengvai pasidaryti tokią vartotojo funkciją.

Trumpai apie vartotojo funkcijas 

Excel vartotojo funkcija User Defined Function veikia taip pat kaip ir įprastos default programos funkcijos, kurios paima duomenis, atlieka skaičiavimus ir grąžina norimą rezultatą. Duomenų šaltiniais gali būti skaičiai, tekstai, datos, loginės reikšmės, masyvai. Funkcijos (skaičiavimų) rezultatas gali būti bet kokia reikšmė, su kuria dirba Excel, arba tų reikšmių masyvas.

Tokios funkcijos kuriamos norint išplėsti programos galimybes, kai įprastinių funkcijų galimybių neužtenka. Yra keletas būdų sukurti vartotojo funkciją:

  1. Naudojant VBA Visual Basic for Applications*
  2. Naudojant funkciją LAMBDA
  3. Naudojant scenarijus Office Scripts

* 

Toliau rašoma tik apie šį būdą, kaip jį naudojant pačiam pasidaryti funkciją (arba atsisiųsti jau padarytą), kuri užrašys jūsų nurodytą skaičių (pinigų sumą) žodžiais lietuviškai.

Susiraskite ir perskaitykite instrukcijas 

Panaudojant tą patį VBA kodą, Excel vartotojo funkciją galima sukurti ir įdiegti 2 skirtingais būdais*:

  1. Veiks tik faile, kuriame ji įdiegta, tačiau persiuntus tokį failą kitam vartotojui funkcija veiks ir pas jį. Tokių failų jūs galite turėti kiek jums reikia.
  2. Veiks visuose jūsų (tik!) kompiuterio Excel failuose. Atskiruose failuose nieko įdiegti nereikės.

* 

Jeigu norėsite vienu metu naudoti abu būdus, reikės pasidaryti VBA kodo kopiją ir joje pakeisti funkcijos pavadinimą.

1 būdas. Instrukcija

Trumpai: atsidaryti reikiamą (bet kurį .xlsx ar .xlsm) Excel failą, to failo VBA modulyje įdiegti VBA kodą, failą išsaugoti .xlsm formatu. Paieškos frazės kaip Excel pasidaryti vartotojo funkciją viename faile*:

  • ensupport.microsoft+Convert numbers to words
  • ltsupport.microsoft+Skaičių konvertavimas į žodžius – angliško teksto mašininis vertimas

* 

Tose instrukcijose viskas detaliai ir aiškiai aprašyta, tik žingsnyje kur reikalingas kodas, naudokite čia žemiau pateiktą kodą.

2 būdas. Instrukcija

Trumpai: atsidaryti tuščią .xlsx failą, įdiegti į kodą (kaip 1 būde), o išsaugoti failą .xlam formatu. Tada šį failą, kaip priedą add-in* įdiegti į Excel programą savo kompiuteryje. Paieškos frazės kaip Excel pasidaryti vartotojo funkciją, kuri veiks visuose vartotojo failuose:

  • ensupport.microsoft+Add or remove add-ins in Excel
  • enHow to Install (or Uninstall) a VBA add-in (.xlam file) for Microsoft Excel
  • enBuild an Excel Add-In in Microsoft Excel

* 

Excel prieduose add-in gali būti įdiegtas kenksmingas kodas. Būkite atsargūs jeigu nežinote kas viduje.

Patys pasidarykite savo vartotojo funkciją 

Pateikto kodo* aprašymas:

  • Vartotojo funkcijos pavadinamas SumaZodziais
  • Užrašo skaičių piniginiu formatu lietuvių kalba. Pinigų formatas – eurai**
  • Sveikus skaičius rašo žodžiais,centus – skaičiais. Pavyzdžiai:
    • 0,01 – Nulis EUR 01 ct
    • 1234,00 – Vienas tūkstantis du šimtai trisdešimt keturi EUR 00 ct
    • 9876,54 – Devyni tūkstančiai aštuoni šimtai septyniasdešimt šeši EUR 54 ct
  • Sintaksė SumaZodziais(number), pvz. SumaZodziais(A1), kur A1 celės koordinatės
  • Rodo skaičius žodžiais nuo 0,01 iki 999 999,99

* 

VBA kodas atliekantis tą pačią funkciją gali būti parašytas labai įvairiai ir atrodyti labai skirtingai.

** 

Eurus galima pakeisti kita valiuta. Kaip tai padaryti parašyta čia

Jeigu naudojatės nurodytomis instrukcijomis tai žingsnyje kuriame reikia nukopijuoti kodą, kopijuojate žemiau pateiktą kodą*. Visa kita darote kaip instrukcijose. Jeigu jums reikia, kad skaičių verstų į anglų kalbą, galite pabandyti kodą iš Microsoft instrukcijos, tačiau joje (33 ir 196 eilutėse) ir jų neištaisius funkcija neveiks.

* 

Tose instrukcijose viskas detaliai ir aiškiai aprašyta, tik žingsnyje kur reikalingas kodas, naudokite čia žemiau pateiktą kodą.

Nukopijuokite ir naudokite šias kodo eilutes.

Function SumaZodziais(x)
'Kodo aprašymas (paiimta iš https://www.sisla.lt/):
'Vartotojo funkcijos pavadinamas: SumaZodziais.
'Užrašo skaičių piniginiu formatu lietuvių kalba. Pinigų formatas – eurai.
'Sveikus skaičius rašo žodžiais, centus – skaičiais.
'Sintaksė: SumaZodziais(number), pvz. SumaZodziais(A1), kur A1 celės koordinatės.
'Rodo skaičius žodžiais nuo 0,01 iki 999 999,99.
SumaZodziais = ""
If x >= 1000000 Or x <= 0 Then
Else
s = Format(Int(x), "000000")
c = Format((x - Int(x)) * 100, "00")
Select Case Mid(s, 1, 1)
Case "1"
SumaZodziais = SumaZodziais + " vienas" & " " & ChrW(353) & "imtas"
Case "2"
SumaZodziais = SumaZodziais + " du" & " " & ChrW(353) & "imtai"
Case "3"
SumaZodziais = SumaZodziais + " trys" & " " & ChrW(353) & "imtai"
Case "4"
SumaZodziais = SumaZodziais + " keturi" & " " & ChrW(353) & "imtai"
Case "5"
SumaZodziais = SumaZodziais + " penki" & " " & ChrW(353) & "imtai"
Case "6"
SumaZodziais = SumaZodziais + "" & " " & ChrW(353) & "e" & ChrW(353) & "i" & " " & ChrW(353) & "imtai"
Case "7"
SumaZodziais = SumaZodziais + " septyni" & " " & ChrW(353) & "imtai"
Case "8"
SumaZodziais = SumaZodziais + " a" & ChrW(353) & "tuoni" & " " & ChrW(353) & "imtai"
Case "9"
SumaZodziais = SumaZodziais + " devyni" & " " & ChrW(353) & "imtai"
End Select
Select Case Mid(s, 2, 1)
Case "1"
Select Case Mid(s, 3, 1)
Case "1"
SumaZodziais = SumaZodziais + " vienuolika t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
Case "2"
SumaZodziais = SumaZodziais + " dvylika t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
Case "3"
SumaZodziais = SumaZodziais + " trylika t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
Case "4"
SumaZodziais = SumaZodziais + " keturiolika t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
Case "5"
SumaZodziais = SumaZodziais + " penkiolika t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
Case "6"
SumaZodziais = SumaZodziais + "" & " " & ChrW(353) & "e" & ChrW(353) & "iolika t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
Case "7"
SumaZodziais = SumaZodziais + " septyniolika t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
Case "8"
SumaZodziais = SumaZodziais + " a" & ChrW(353) & "tuoniolika t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
Case "9"
SumaZodziais = SumaZodziais + " devyniolika t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
Case "0"
SumaZodziais = SumaZodziais + " de" & ChrW(353) & "imt t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
End Select
Case "2"
SumaZodziais = SumaZodziais + " dvide" & ChrW(353) & "imt"
Case "3"
SumaZodziais = SumaZodziais + " trisde" & ChrW(353) & "imt"
Case "4"
SumaZodziais = SumaZodziais + " keturiasde" & ChrW(353) & "imt"
Case "5"
SumaZodziais = SumaZodziais + " penkiasde" & ChrW(353) & "imt"
Case "6"
SumaZodziais = SumaZodziais + "" & " " & ChrW(353) & "e" & ChrW(353) & "iasde" & ChrW(353) & "imt"
Case "7"
SumaZodziais = SumaZodziais + " septyniasde" & ChrW(353) & "imt"
Case "8"
SumaZodziais = SumaZodziais + " a" & ChrW(353) & "tuoniasde" & ChrW(353) & "imt"
Case "9"
SumaZodziais = SumaZodziais + " devyniasde" & ChrW(353) & "imt"
End Select
If Mid(s, 2, 1) <> "1" Then
Select Case Mid(s, 3, 1)
Case "1"
SumaZodziais = SumaZodziais + " vienas t" & ChrW(363) & "kstantis"
Case "2"
SumaZodziais = SumaZodziais + " du t" & ChrW(363) & "kstan" & ChrW(269) & "iai"
Case "3"
SumaZodziais = SumaZodziais + " trys t" & ChrW(363) & "kstan" & ChrW(269) & "iai"
Case "4"
SumaZodziais = SumaZodziais + " keturi t" & ChrW(363) & "kstan" & ChrW(269) & "iai"
Case "5"
SumaZodziais = SumaZodziais + " penki t" & ChrW(363) & "kstan" & ChrW(269) & "iai"
Case "6"
SumaZodziais = SumaZodziais + "" & " " & ChrW(353) & "e" & ChrW(353) & "i t" & ChrW(363) & "kstan" & ChrW(269) & "iai"
Case "7"
SumaZodziais = SumaZodziais + " septyni t" & ChrW(363) & "kstan" & ChrW(269) & "iai"
Case "8"
SumaZodziais = SumaZodziais + " a" & ChrW(353) & "tuoni t" & ChrW(363) & "kstan" & ChrW(269) & "iai"
Case "9"
SumaZodziais = SumaZodziais + " devyni t" & ChrW(363) & "kstan" & ChrW(269) & "iai"
Case "0"
If Mid(s, 1, 2) <> "00" Then
SumaZodziais = SumaZodziais + " t" & ChrW(363) & "kstan" & ChrW(269) & "i" & ChrW(371) & ""
End If
End Select
End If
Select Case Mid(s, 4, 1)
Case "1"
SumaZodziais = SumaZodziais + " vienas" & " " & ChrW(353) & "imtas"
Case "2"
SumaZodziais = SumaZodziais + " du" & " " & ChrW(353) & "imtai"
Case "3"
SumaZodziais = SumaZodziais + " trys" & " " & ChrW(353) & "imtai"
Case "4"
SumaZodziais = SumaZodziais + " keturi" & " " & ChrW(353) & "imtai"
Case "5"
SumaZodziais = SumaZodziais + " penki" & " " & ChrW(353) & "imtai"
Case "6"
SumaZodziais = SumaZodziais + "" & " " & ChrW(353) & "e" & ChrW(353) & "i" & " " & ChrW(353) & "imtai"
Case "7"
SumaZodziais = SumaZodziais + " septyni" & " " & ChrW(353) & "imtai"
Case "8"
SumaZodziais = SumaZodziais + " a" & ChrW(353) & "tuoni" & " " & ChrW(353) & "imtai"
Case "9"
SumaZodziais = SumaZodziais + " devyni" & " " & ChrW(353) & "imtai"
End Select
Select Case Mid(s, 5, 1)
Case "1"
Select Case Mid(s, 6, 1)
Case "1"
SumaZodziais = SumaZodziais + " vienuolika"
Case "2"
SumaZodziais = SumaZodziais + " dvylika"
Case "3"
SumaZodziais = SumaZodziais + " trylika"
Case "4"
SumaZodziais = SumaZodziais + " keturiolika"
Case "5"
SumaZodziais = SumaZodziais + " penkiolika"
Case "6"
SumaZodziais = SumaZodziais + "" & " " & ChrW(353) & "e" & ChrW(353) & "iolika"
Case "7"
SumaZodziais = SumaZodziais + " septyniolika"
Case "8"
SumaZodziais = SumaZodziais + " a" & ChrW(353) & "tuoniolika"
Case "9"
SumaZodziais = SumaZodziais + " devyniolika"
Case "0"
SumaZodziais = SumaZodziais + " de" & ChrW(353) & "imt"
End Select
Case "2"
SumaZodziais = SumaZodziais + " dvide" & ChrW(353) & "imt"
Case "3"
SumaZodziais = SumaZodziais + " trisde" & ChrW(353) & "imt"
Case "4"
SumaZodziais = SumaZodziais + " keturiasde" & ChrW(353) & "imt"
Case "5"
SumaZodziais = SumaZodziais + " penkiasde" & ChrW(353) & "imt"
Case "6"
SumaZodziais = SumaZodziais + "" & " " & ChrW(353) & "e" & ChrW(353) & "iasde" & ChrW(353) & "imt"
Case "7"
SumaZodziais = SumaZodziais + " septyniasde" & ChrW(353) & "imt"
Case "8"
SumaZodziais = SumaZodziais + " a" & ChrW(353) & "tuoniasde" & ChrW(353) & "imt"
Case "9"
SumaZodziais = SumaZodziais + " devyniasde" & ChrW(353) & "imt"
End Select
If Mid(s, 5, 1) <> "1" Then
Select Case Mid(s, 6, 1)
Case "1"
SumaZodziais = SumaZodziais + " vienas"
Case "2"
SumaZodziais = SumaZodziais + " du"
Case "3"
SumaZodziais = SumaZodziais + " trys"
Case "4"
SumaZodziais = SumaZodziais + " keturi"
Case "5"
SumaZodziais = SumaZodziais + " penki"
Case "6"
SumaZodziais = SumaZodziais + "" & " " & ChrW(353) & "e" & ChrW(353) & "i"
Case "7"
SumaZodziais = SumaZodziais + " septyni"
Case "8"
SumaZodziais = SumaZodziais + " a" & ChrW(353) & "tuoni"
Case "9"
SumaZodziais = SumaZodziais + " devyni"
End Select
End If
If s = "000000" Then
SumaZodziais = "Nulis EUR " + c + " ct"
Else
SumaZodziais = Trim(SumaZodziais + " EUR " + c + " ct")
SumaZodziais = UCase(Left(SumaZodziais, 1)) + Mid(SumaZodziais, 2, Len(SumaZodziais) - 1)
End If
End If
End Function

Jeigu reikia modifikuokite funkciją 

Čia aprašyti labai nedideli ir nesudėtingi vartotojo funkcijos pakeitimai. Pirmasis reikalingas tuo atveju jeigu norite, kad funkcija jūsų kompiuteryje veiktų visuose Excel failuose o taip pat būtų kai kuriuose atskiruose failuose. Tokiu atveju funkcijų pavadinimai turi skirtis. Antrasis reikalingas tada jeigu jums reikalingi kitokie valiutų simboliai.

Kaip pakeisti pavadinimą

Jeigu reikia tos pačios funkcijos kitu pavadinimu tiesiog reikia pakeisti esamą pavadinimą SumaZodziais kita norimu. Tai galima padaryti paprastame tekstiniame redaktoriuje (NotePad ar TextEdit) arba pačiame Excel VBA modulyje Edit > Replace… > Replace All. Kode ir jo pastabose šis pavadinimas pasikartoja 158 kartus.

Kaip pakeisti valiutą

Norint pakeisti valiutos simbolius, reikia padaryti pakeitimus 184 ir 186 kodo eilutėse*.

SumaZodziais = "Nulis EUR " + c + " ct"
Else
SumaZodziais = Trim(SumaZodziais + " EUR " + c + " ct")

Atitinkamai pakeičiant EUR ir ct į jums reikalingos valiutos simbolius.

* 

Kodo eilučių numeriai rodomi Excel VBA modulio meniu juostoje.
Arba tos kodo eilutės yra beveik pačioje kodo pabaigoje (tai bus 7 ir 5 eilutės nuo apačios).

Per daug sudėtinga? Atsisiųkite paruoštus failus 

Jeigu nepavyksta pasidaryti aprašytos funkcijos, galite atsisiųsti jau paruoštus* failus.

  • Archyvas: Excel_failai_su_VBA_kodu.zip:
  • SumaZodziais vartotojo funkcija.xlsm
  • SumaTekstu.xlam
  • SumaZodziais vartotojo funkcija.vb
  • Variantai:
    • vartotojo funkcija SumaTekstu USA (variantas).xlsm
    • vartotojo funkcija SumaTekstu EUR (variantas).xlsm
    • kodas vartotojo funkcija SumaTekstu USA (variantas).vb
    • kodas vartotojo funkcija SumaTekstu EUR (variantas).vb

* 

Visuose .xlsm, .xlam, ir .vb failuose yra tas pats VBA kodas.
Pakeisti tik vartotojo funkcijos pavadinimai ir valiuta.
.vb – failą galima atsidaryti su NotePad ar TextEdit.