Rakstā pieejams macro funkcijas kods, kas pārveido naudas summas EUR vārdos latviešu valodā. Šobrīd internetā jau ir kaut kas latviskots atrodams, bet katrā no tiem ir savas nianses, kuras var traucēt, lai iegūtu precīzu rezultātu. Šobrīd izveidotie pārveidojumi, ar kuriem iegūstama summa vārdiem, darbojās līdz triljoniem un drošvien Latvijā ar to vajadzētu pietikt, bet tāpat aprakstīšu, kā to var pielāgot citām valūtām un viss kods ir pieejams un modificējams.
Par iedvesmu un bāzi kalpoja Microsoft vietnē atrodamais funkcijas kods, kuru pielāgoju latviešu valodas īpatnībām, padarīju ērtāku un pielāgoju aktuālajai valūtai eiro un centiem. Galu galā nācās iepazīties, kā tad valodnieki lēmuši par eiro un centu pierakstu, par ko vēlreiz pārliecinājos šeit.
Pēc Latvijas Bankas iniciatīvas 2014. gada 19. februārī notika tikšanās, kurā piedalījās Valsts valodas centra, Finanšu ministrijas, Valsts kancelejas speciālisti un kuras laikā tika noteikts – Eiropas valūtas oficiālais saīsinājums (valūtas kods) EUR kā vēlamais variants turpmāk latviešu valodā rakstāms aiz summas ar saistīto atstarpi. Piemēram: 25,33 EUR (divdesmit pieci eiro un trīsdesmit trīs centi).
Par vēlamo EUR pierakstu. 20.02.2014. / Valsts valodas centrs /
Funkcija, kura izpilda pārveidojumus saucas EiroVardos un rezultāts ir bez saistītās atstarpes. Zemāk ir instrukcija, kā to pievienot.
Lejupielādēt to vari šeit dažādos veidos:
1. xls vai xlsm formā;
2. xla vai xlam formā kā programmu, kas tiek pievienota Excel;
3. vai arī iekopēt zemāk esošo kodu pēc instrukcijas.
Ja kaut kas nav kā tam vajadzētu būt, tad droši pievieno savu komentāru.
Funkciju, ar kuru iegūstama summa vārdiem, var pievienot nepieciešamajam failam šādi:
1. atrodoties attiecīgajā Excel failā ar kombināciju Alt + F11 jāatver Visual Basic logs;
2. jāizveido jauns modulis, kurā iekopē zemāk redzamo kodu.
Ja rezultātu ir nepieciešams iegūt ar saistīto atstarpi, tad rindiņa EiroVardos = Eiro & Cents
jāaizstāj ar EiroVardos = Replace(Eiro & Cents, Chr$(32), Chr$(160))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
Option Explicit 'Main Function Function EiroVardos(ByVal MyNumber) Dim Eiro, Cents, Temp Dim DecimalPlace, Count Dim value As Variant ReDim Place(9) As String Place(2) = " tūkstotis " Place(3) = " miljons " Place(4) = " miljards " Place(5) = " triljons " value = MyNumber.Cells(1, 1).value If IsEmpty(MyNumber) = True Then EiroVardos = "" Exit Function End If If IsNumeric(MyNumber) = False Then EiroVardos = "" Exit Function End If MyNumber = Trim(Str(MyNumber)) DecimalPlace = InStr(MyNumber, ".") If Val(MyNumber) >= 1E+15 Then EiroVardos = "Skaitlis ir pārāk liels!" Exit Function End If If DecimalPlace > 0 Then Cents = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & _ "00", 2)) MyNumber = Trim(Left(MyNumber, DecimalPlace - 1)) End If If (Len(MyNumber) > 4 And Mid(Right(MyNumber, 5), 1, 2) = "11") Or Mid(Right(MyNumber, 4), 1, 1) <> "1" Then Place(2) = " tūkstoši " If (Len(MyNumber) > 7 And Mid(Right(MyNumber, 8), 1, 2) = "11") Or Mid(Right(MyNumber, 7), 1, 1) <> "1" Then Place(3) = " miljoni " If (Len(MyNumber) > 10 And Mid(Right(MyNumber, 11), 1, 2) = "11") Or Mid(Right(MyNumber, 10), 1, 1) <> "1" Then Place(4) = " miljardi " If (Len(MyNumber) > 13 And Mid(Right(MyNumber, 14), 1, 2) = "11") Or Mid(Right(MyNumber, 13), 1, 1) <> "1" Then Place(5) = " triljoni " Count = 1 Do While MyNumber <> "" Temp = GetHundreds(Right(MyNumber, 3)) If Temp <> "" Then Eiro = Temp & Place(Count) & Eiro If Len(MyNumber) > 3 Then MyNumber = Left(MyNumber, Len(MyNumber) - 3) Else MyNumber = "" End If Count = Count + 1 Loop Select Case Eiro Case "" Eiro = "nulle eiro" Case Else Eiro = Eiro & " eiro" End Select Select Case Right(Cents, 5) Case "viens" Cents = " un " & Cents & " cents" End Select If Right(Cents, 11) = "viens cents" Then GoTo Result Select Case Cents Case "" Cents = " un nulle centi" Case "viens" Cents = " un viens cents" Case Else Cents = " un " & Cents & " centi" End Select Result: EiroVardos = Eiro & Cents End Function Function GetHundreds(ByVal MyNumber) Dim Result As String If Val(MyNumber) = 0 Then Exit Function MyNumber = Right("000" & MyNumber, 3) ' Convert the hundreds place. If Mid(MyNumber, 1, 1) <> "0" Then Result = GetDigit(Mid(MyNumber, 1, 1)) & " simti " End If If Mid(MyNumber, 1, 1) = "1" Then Result = GetDigit(Mid(MyNumber, 1, 1)) & " simts " End If ' Convert the tens and ones place. If Mid(MyNumber, 2, 1) <> "0" Then Result = Result & GetTens(Mid(MyNumber, 2)) Else Result = Result & GetDigit(Mid(MyNumber, 3)) End If GetHundreds = Result End Function Function GetTens(TensText) Dim Result As String Result = "" ' Null out the temporary function value. If Val(Left(TensText, 1)) = 1 Then ' If value between 10-19... Select Case Val(TensText) Case 10: Result = "desmit" Case 11: Result = "vienpadsmit" Case 12: Result = "divpadsmit" Case 13: Result = "trīspadsmit" Case 14: Result = "četrpadsmit" Case 15: Result = "piecpadsmit" Case 16: Result = "sešpadsmit" Case 17: Result = "septiņpadsmit" Case 18: Result = "astoņpadsmit" Case 19: Result = "deviņpadsmit" Case Else End Select Else ' If value between 20-99... Select Case Val(Left(TensText, 1)) Case 2: Result = "divdesmit " Case 3: Result = "trīsdesmit " Case 4: Result = "četrdesmit " Case 5: Result = "piecdesmit " Case 6: Result = "sešdesmit " Case 7: Result = "septiņdesmit " Case 8: Result = "astoņdesmit " Case 9: Result = "deviņdesmit " Case Else End Select Result = Result & GetDigit _ (Right(TensText, 1)) ' Retrieve ones place. End If GetTens = Result End Function Function GetDigit(Digit) Select Case Val(Digit) Case 1: GetDigit = "viens" Case 2: GetDigit = "divi" Case 3: GetDigit = "trīs" Case 4: GetDigit = "četri" Case 5: GetDigit = "pieci" Case 6: GetDigit = "seši" Case 7: GetDigit = "septiņi" Case 8: GetDigit = "astoņi" Case 9: GetDigit = "deviņi" Case Else: GetDigit = "" End Select End Function |
Sveiks !
Man neizdevās. Tiek uzrādīts, ka mainīgais nav definēts. Lai gan paņemot oriģinālo no MS lapas, viss sanāk.
Paldies, Laila, ka pamanīji problēmu.
Nebiju pienācīgi noformējis mājas lapā pubilcēto, kodu un kopējot uz Visual Basic editoru atsevišķas zīmes nekorketi atspoguļojās. Tagad viss strādā korekti.
Ērtībām esmu publicējis arī lejupielādējamus failus ar šo kodu, piemēram, http://excel.lv/wp-content/uploads/2016/04/EiroVardos.xlsm
Paldies Viss strādā!
Jānis, paldies par Jūsu darbu! Bet šī funkcija nestrādā korekti mana failā (gālotnes un mikstīnājumi) Kad es izveidoju moduli un nokopēju kodu uz Visual Basic, tur kods nokopēts jau nekorekti((( Atvērot Jūsu failu no komentāri, arī tāda kļūda ((( Es esmu grāmatvedis, šī funkcija ir ļoti noderīga, bet es nesaprotu , kā man izlabot?
super, viss rullē! tikai gribētos, lai “nulle” centu vietā būtu “00” centi, un 51 cents rakstās kā centi.
Sveiki,
Ja kādam ir problēmas ar latviešu burtiem, nepiesiešams samainīt “Current language for non-Unicode programms”. To var izdarīt: Control panel -> Clock, language and Region -> Region -> Administrative -> Change system locale
Tā pati problēma ar mīkstinājuma zīmēm, vai kāds zin, kā šo salabot mac OSX vidē?
Uz Windows viss strādā, bet OSX latviešu mīkstinājuma zīmes nestrādā, kāds varētu ieteikt kā OSX to var salabot?
397.51
trоs simti deviтdesmit septiтi eiro un piecdesmit viens centi
ar locījumiem ir problema un diakritiskiem zīmem.
Kādas izmaiņas kodā ir jāievieš, lai teikuma sākumā būtu lielais burts, un kādas izmaiņas, lai centi būtu nevis vārdiem, bet skaitļiem??
Sākt ar lielo burtu ir salīdzinoši vienkārši.
75. rindiņā definētās funkcijas rezultātu var pārtaisīt ar teksta apstrādes funkcijām.
EiroVardos = UCase(Left(Eiro & Cents, 1)) & Mid(Eiro & Cents, 2, Len(Eiro & Cents) - 1)
Ja vajag nomainīt arī centus uz skaitļiem, tad kodu no 27. līdz 75. rindiņai var aizvietot ar šo:
If DecimalPlace > 0 Then
Cents = CLng(Left(Mid(MyNumber, DecimalPlace + 1) & _
"00", 2))
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
If (Len(MyNumber) > 4 And Mid(Right(MyNumber, 5), 1, 2) = "11") Or Mid(Right(MyNumber, 4), 1, 1) <> "1" Then Place(2) = " tūkstoši "
If (Len(MyNumber) > 7 And Mid(Right(MyNumber, 8), 1, 2) = "11") Or Mid(Right(MyNumber, 7), 1, 1) <> "1" Then Place(3) = " miljoni "
If (Len(MyNumber) > 10 And Mid(Right(MyNumber, 11), 1, 2) = "11") Or Mid(Right(MyNumber, 10), 1, 1) <> "1" Then Place(4) = " miljardi "
If (Len(MyNumber) > 13 And Mid(Right(MyNumber, 14), 1, 2) = "11") Or Mid(Right(MyNumber, 13), 1, 1) <> "1" Then Place(5) = " triljoni "
Count = 1
Do While MyNumber <> ""
Temp = GetHundreds(Right(MyNumber, 3))
If Temp <> "" Then Eiro = Temp & Place(Count) & Eiro
If Len(MyNumber) > 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = ""
End If
Count = Count + 1
Loop
Select Case Eiro
Case ""
Eiro = "nulle eiro"
Case Else
Eiro = Eiro & "eiro"
End Select
Select Case Right(Cents, 1)
Case 1
Cents = " un " & Cents & " cents"
Case ""
Cents = " un 0 centi"
Case Else
Cents = " un " & Cents & " centi"
End Select
EiroVardos = UCase(Left(Eiro & Cents, 1)) & Mid(Eiro & Cents, 2, Len(Eiro & Cents) - 1)
Paldies par kodu.
Ja drīkst piebilst – ir viena neprecizitāte.
Ja lieto sākotnējo kodu, kad centi ir ar vārdiem, tad gadījumā, ja skaitlī ir apaļi desmiti, piemēram 320.00, tad pirms vārda “eiro” ir 2 atstarpes, bet ja skaitlī ir “vieni”, piemēram 325.00, tad pirms vārda “eiro” ir 1 atstarpe.
Ja lieto kodu, kad centi ir ar cipariem, tad gadījumā, ja skaitlī ir apaļi desmiti, piemēram 320.00, tad pirms vārda “eiro” ir 1 atstarpe, bet ja skaitlī ir “vieni”, piemēram 325.00, tad pirms vārda “eiro” nav atstarpes.
Varbūt šo var kaut kā labot?
Uz iepriekšējā excel strādāja perfekti, uz jaunā ir problēma garumzīmes un mīkstinājuma zīmes neatpazīst, piemēram, 40 raksta ēetrdesmit.
Man ir problēma ar noapaļošanu, excel rāda 100,97 bet apakšā ir 100,965 un automātiski tiek ielikts 100,96 (vārdiem), kur to var izlabot?