Veľmi častou úlohou je písať čísla slovami v Exceli. V Exceli zatiaľ nie je vstavaná funkcia, takže si môžeme vytvoriť vlastnú funkciu, ktorá nahradí čísla textom.
Spravidla sa to vyžaduje v obchode, účtovníctve a iných oblastiach, kde sa vykonávajú hotovostné vyrovnania. Zvyčajne je potrebné previesť sumu v rubľoch a kopejkách slovami, ako na obrázku (prvý príklad).
Povedzme, že urobíme nejaké výpočty v tabuľke a získame celkovú sumu v rubľoch 1526,23
Tento údaj musíme zapísať v rubľoch a je žiaduce uviesť aj cent. Na tento účel vytvoríme špeciálnu univerzálnu užívateľom definovanú funkciu, ktorá bude vyzerať takto
Propis(Suma ;Peniaze ;lang ;Prec )
Peniaze - tu je uvedený typ meny, môžete zadať ruble, doláre a eurá ("RUB", "USD", "EUR") - mena musí byť uvedená v úvodzovkách.
lang - toto je jazyk, v ktorom musíte vybrať sumu, dva jazyky sú k dispozícii angličtina a ruština ("EN", "RU") - uvádzame aj v úvodzovkách
Predbežne zobraziť (1) alebo nezobraziť (0) zlomkovú časť
Čiastku teda môžete napísať v rubľoch, dolároch alebo eurách slovami ruskými alebo anglickými písmenami spolu s zlomkovou časťou, pričom v závislosti od čísla sa vloží správny koniec, napríklad 2 ruble, 8 rubľov, 1 rubeľ a pod.
Ak chcete vytvoriť vlastnú funkciu Propis, musíte skopírovať kód nižšie a potom kliknúť ALT + F11 na otvorenie VBA pridajte nový prázdny modul cez menu Vložiť modul a vložte tam skopírovaný kód
Makro vlastnej funkcie pre súčet v slovách
Funkcia Propis(Suma ako reťazec, voliteľné peniaze ako reťazec = "RUB", voliteľný jazyk ako reťazec = "RU", voliteľná cena ako celé číslo = 1) Dim whole As Double Amount = Replace(Amount, "-", Application.International( xlDecimalSeparator)) Suma = Nahradiť(Suma, ".", Aplikácia.International(xlDecimalSeparator)) Suma = Nahradiť(Suma, ",", Aplikácia.International(xlDecimalSeparator)) Suma = Funkcia pracovného listu.Round(CDbl(Suma), 2) Peniaze = UCase(Peniaze) lang = UCase(lang) celé = Int(Sum) fraq = Format(Round((Sum - whole) * 100), "00") Vyberte triedu prípadu (celý, 1) + Trieda (celý, 2) * 10 Prípad 1, 21, 31, 41, 51, 61, 71, 81, 91 w_rus_r = "rubeľ" w_rus_d = "dolár" w_rus_e = "euro" w_en_r = "ruble" w_en_d = "dolárov" w_ euro" Prípad 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84 , 92, 93, 94 w_rus_r = "ruble" w_rus_d = "doláre" w_rus_e = "euro" w_en_r = "ruble" w_en_d = "doláre" w_en_e = "euro" Prípad Iný w_rus_r = "ruble " w_rus_d = "doláry" w_rus_e = "euro" w_en_r = "ruble" w_en_d = "doláre" w_en_e = "euro" Koniec Vybrať Vyberte prípad fraq Prípad 1, 21, 31, 41, 51, 61, 71, 81, 91 = "cent" f_rus_d = "cent" f_rus_e = "cent" f_rus_p = "stotina" f_en_r = "kopecks" f_en_d = "centy" f_en_e = "centy" f_en_e = "centy" Prípad 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94 "centov" "cents_e" " f_en_r = "kopecky" f_en_d = "centy" f_en_e = "centy" Prípad Inak f_rus_r = "kopeks" f_rus_d = "centy" f_rus_e = "centy" f_en_r = "kopecky" f_en_d = "centy" f_en_e = "centy" If Prec = 0 Then fraq = "" f_rus_r = "" f_rus_d = "" f_rus_e = "" f_en_r = "" f_en_d = "" f_en_e = "" Koniec If lang = "RU" Potom vyberte prípad Peniaze "RUB" Out = ScriptRus(celé) & " " & w_rus_r & " " & fraq & " " & f_rus_r Case "USD" Out = ScriptRus(celé) & " " & w_rus_d & " " & fraq & " " & f_rus_ d Case "EUR" Out = ScriptRus(celé) & " " & w_rus_e & " " & fraq & " " & f_rus_e End Vyberte End If lang = "EN" Potom vyberte Case Money Case "RUB" Out = ScriptEng(celé) & " " & w_en_r & " " & fraq & " " & f_en_r Case "USD" Out = ScriptEng (celé) & " " & w_en_d & " " & fraq & " " & f_en_d Case "EUR" Out = ScriptEng (celé) & " " & w_en_e & " " & fraq & " " & f_en_e End Vyberte Koniec If Propis = WorksheetFunction.Trim(Out) End Function Súkromná funkcia Class(m, i) Class = Int(Int(m - (10 ^ i)) * Int(m / (10 ^ i))) / 10 ^ (i - 1)) Koncová funkcia Súkromná funkcia ScriptRus(n As Double) As String Dim Nums1, Nums2, Nums3, Nums4 As Variant Nums1 = Array("", " jeden", "dva", "tri", "štyri", "päť", "šesť", "sedem", "osem", "deväť") Nums2 = Array("", "desať", "dvadsať" , "tridsať", "štyridsať", "päťdesiat", "šesťdesiat", "sedemdesiat", "osemdesiat", "deväťdesiat") Nums3 = Array("", "sto", "dvesto", "tristo", "štyristo", "päťsto", "šesťsto", "sedemsto", "in sedemsto", "deväťsto") Nums4 = Array("", "jeden", "dva", "tri", "štyri", "päť", "šesť", "sedem", "osem", "deväť" ") Nums5 = Array("desať", "jedenásť", "dvanásť", "trinásť", "štrnásť", "pätnásť", "šestnásť", "sedemnásť", "osemnásť", "devätnásť") Ak n = 0 Potom ScriptRus = "Zero" Koniec funkcie Ak ed = Trieda (n, 1) dec = Trieda (n, 2) sot = Trieda (n, 3) tys = Trieda (n, 4) dectys = Trieda (n, 5) sottys = Class(n, 6) mil = Class(n, 7) decmil = Class(n, 8) sotmil = Class(n, 9) mlrd = Class(n, 10) Ak mlrd > 0, potom vyberte prípad mlrd Prípad 1 mlrd_txt = Nums1(mlrd) & "miliarda" Prípad 2, 3, 4 mlrd_txt = Nums1(mlrd) & "miliarda" Prípad 5 až 20 mlrd_txt = Nums1(mlrd) & "miliarda " Koniec Vyberte Koniec If (sotmil + decmil + mil ) > 0 Potom sotmil_txt = Nums3(sotmil) Vybrať prípad decmil Prípad 1 mil_txt = Nums5(mil) & "milióny" Prejsť na www Prípad 2 až 9 decmil_txt = Nums2(decmil) Koniec Výber prípadu mil prípad 1 mil_txt = Nu ms1(mil) & "million" Prípad 2, 3, 4 mil_txt = Nums1(mil) & "million" Prípad 0, 5 až 20 mil_txt = Nums1(mil) & "million" Koniec Vyberte Koniec Ak www: sottys_txt = Nums3( sottys) Vyberte prípad dectys Prípad 1 tys_txt = Nums5(tys) & "tisíce " Prejsť na eee Prípad 2 až 9 dectys_txt = Nums2(dectys) Koniec Vybrať Vyberte prípad tys Case 0 Ak dectys > 0 Potom tys_txt = Nums4(thoustys) " Prípad 1 tys_txt = Nums4(tys) & "tisíc" Prípad 2, 3, 4 tys_txt = Nums4(tys) & "tisíce " Prípad 5 až 9 tys_txt = Nums4(tys) & "tisíce" Koniec Vyberte Ak dectys = 0 A tys = 0 A sottys<>0 Potom sottys_txt = sottys_txt & "tisíce" eee: sot_txt = Nums3(sot) Vyberte prípad dec Case 1 ed_txt = Nums5 (ed) Prejsť na rrr Prípad 2 až 9 dec_txt = Nums2 (dec) Koniec Vyberte ed_txt = Numrrs1 ScriptRus = mlrd_txt & sotmil_txt & decmil_txt & mil_txt & sottys_txt & dectys_txt & tys_txt & sot_txt & dec_txt & ed_txt Funkcia Súkromná funkcia ScriptEng(ByVal Number As Double) Dim BigDenom As String, Temp As String Dim Counting As Integer As ReD Miesto(2) = "Tisíc" Miesto(3) = "Milión" Miesto(4) = "miliarda" Miesto(5) = "bilión" strAmount = Trim(Str(Int(Number))) Count = 1 Do While strAmount<>"" Temp = GetHundreds(Right(strAmount, 3)) Ak Temp<>"" Potom BigDenom = Temp & Place (Count) & BigDenom If Len(strAmount) > 3 Then strAmount = Left(strAmount, Len(strAmount) - 3) Else strAmount = "" End If Count = Count + 1 slučka Vyberte prípad BigDenom Case "" BigDenom = "Nula " Case "One" BigDenom = "Jedna " Case Else BigDenom = BigDenom & " " End Select ScriptEng = BigDenom End Function Súkromná funkcia GetHundreds(ByVal MyNumber) Dim výsledok As String If Val(MyNumber) = 0 Potom ukončite funkciu MojeČíslo = Vpravo("000" & MojeČíslo, 3) Ak Mid(MojeČíslo, 1, 1)<>"0" Potom výsledok = GetDigit(Mid(MojeČíslo, 1, 1)) & "Hundred " End If Mid(MyNumber, 1, 1)<>"0" a (stred (Moje číslo, 2, 1)<>"0" alebo stred (Moje číslo, 3, 1)<>"0") Potom výsledok = výsledok & "A " End If Mid(MojeČíslo, 2, 1)<>"0" Potom výsledok = výsledok & GetTens(Mid(MojeČíslo, 2)) Inak výsledok = Výsledok & GetDigit(Mid(MojeČíslo, 3)) End If GetHundreds = výsledok End Function Súkromná funkcia GetTens(TensText) Dim result As String result = "" Ak Val(Left(TensText, 1)) = 1 Potom vyberte prípad Val(TensText) Prípad 10: výsledok = "Desať" Prípad 11: výsledok = "Jedenásť" Prípad 12: výsledok = "Dvanásť" Prípad 13: výsledok = „trinásť“ Prípad 14: výsledok = „štrnásť“ Prípad 15: výsledok = „pätnásť“ Prípad 16: výsledok = „šestnásť“ Prípad 17: výsledok = „sedemnásť“ Prípad 18: výsledok = „osemnásť“ Prípad 19: výsledok = „devätnásť“ " " Prípad Else End Select Else Select Case Val(Left(TensText, 1)) Prípad 2: výsledok = "Dvadsať" Prípad 3: výsledok = "Tridsať" Prípad 4: výsledok = "Štyridsať" Prípad 5: výsledok = "Päťdesiat " Prípad 6: výsledok = "šesťdesiat" Prípad 7: výsledok = "sedemdesiat" Prípad 8: výsledok = "osemdesiat" Prípad 9: výsledok = "deväťdesiat" Prípad Inak Koniec Vybrať výsledok = výsledok & GetDigit _ (Right(TensText, 1)) End If GetTens = výsledok End Function Súkromná funkcia GetDigit(D igit) Vyberte prípad Val(Digit) Prípad 1: GetDigit = "Jeden" Prípad 2: GetDigit = "Dva" Prípad 3: GetDigit = "Tri" Prípad 4: GetDigit = "Štyri" Prípad 5: GetDigit = "Päť" Prípad 6 : GetDigit = "Six" Prípad 7: GetDigit = "Seven" Prípad 8: GetDigit = "Eight" Prípad 9: GetDigit = "Deväť" Prípad Iný: GetDigit = "" End Select End FunctionTakže funkcia bola vytvorená, na jej použitie stačí zadať bunku Propis s potrebnými argumentmi, napríklad ak potrebujeme napísať sumu slovami v rubľoch a kopejkách a v ruštine, vzorec bude vyzerať takto.
Propis(B2;"RUB";"RU";1)
Čísla v slovách s centami veľkými alebo malými písmenami v Exceli
Tu je kód VBA pre vlastnú funkciu. Zobrazte sumu slovami s kopejkami a výberom prvého veľkého alebo malého písmena
Funkcia RubWrite(Amount As Double, Voliteľné Bez Copecks As Boolean = False, _ Voliteľné COP As Boolean = False, Voliteľné Capitalize As Boolean = True) As String "Funkcia na písanie súčtu v slovách Dim ed, des, sot, ten, razr, dec Dim i As Integer, str As String, s As String Dim intPart As String, frPart As String Dim mlnEnd, tscEnd, razrEnd, rub, cop dec = Array("", "one", "dva", "tri", " štyri ", "päť", "šesť", "sedem", "osem", "deväť") ed = Array("", "jeden", "dva", "tri", "štyri", "päť", " šesť", "sedem", "osem", "deväť") desať = Array("desať", "jedenásť", "dvanásť", "trinásť", "štrnásť", "pätnásť", "šestnásť", "sedemnásť" " , "osemnásť", "devätnásť") des = Array("", "", "dvadsať", "tridsať", "štyridsať", "päťdesiat", "šesťdesiat", "sedemdesiat", "osemdesiat", "deväťdesiat" " ) sot = Array("", "sto", "dvesto", "tristo", "štyristo", "päťsto", "šesťsto", "sedemsto", "osemsto", " deväťsto ") razr = Pole("", "tisíce", "milión", "miliarda") mlnEnd = Pole("s", " ", "a", "a", "a", "s", "s" ", "s", "s", "s") tscEnd = Array(" ", "a", "and", "and", "and", "", "", "", "", " ") razrEnd = Array(mlnEnd, mlnEnd, tscEnd, "") rub = Array("ruble", "ruble", "ruble", "ruble", "ruble", "ruble", "ruble", "ruble" , "ruble", "ruble") policajt = Array("penny", "penny", "penny", "penny", "penny", "penny", "penny", "penny", "cent", " kopecks") Ak Suma >= 1000000000000# alebo Suma< 0 Then РубПропись = CVErr(xlErrValue): Exit Function "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& If Round(Сумма, 2) >= 1 Potom intPart = Left$(Format(Sum, "000000000000.00"), 12) Pre i = 0 až 3 s = Mid$(intPart, i * 3 + 1, 3) Ak s<>"000" Potom str = str & sot(CInt(Left$(s, 1))) If Mid$(s, 2, 1) = "1" Then str = str & ten(CInt(Right$(s, 1) ))) Else str = str & des(CInt(Stred$(s, 2, 1))) & IIf(i = 2, dec(CInt(Right$(s, 1))), ed(CInt(Right$ (s, 1)))) End If On Error Resume Next str = str & IIf(Mid$(s, 2, 1) = "1", razr(3 - i) & razrEnd(i)(0), _ razr(3 - i) & razrEnd(i)(CInt(Right$(s, 1)))) On Error GoTo 0 End If Next i str = str & IIf(Mid$(s, 2, 1) = "1 ", rub(0), rub(CInt(Right$(s, 1)))) End If RubProfile = str """""""""""""""" If No_kopeks = False Then frPart = Right$(Format(Amount, "0.00"), 2) If frPart = "00" Then frPart = "" Else If CopyWritten Then frPart = IIf(Left$(frPart, 1) = "1", ten(CInt( Right $(frPart, 1))) & cop(0), _ des(CInt(Left$(frPart, 1))) & dec(CInt(Right$(frPart, 1))) & cop(CInt(Right$ ( frPart, 1)))) Inak frPart = IIf(Left$(frPart, 1) = "1", frPart & " " & policajt(0), frPart & " " & policajt(CInt(Right$(frPart, 1 ) ))) End If End If RubWriting = str & " " & frPart End If """""""""" """""""" " RubCapital = str & frPart If beginCapital Then Mid$(RubCapital, 1, 1) = UCase(Mid$(RubCapital, 1, 1)) " If beginCapital Then RubCapital = UCase(Left(RubCapital) , 1)) & Mid (RubWriting, 2) End Function
- Bez kopejok (1), s kopejkami (0)
- Penny slovami (1), číslom (0)
- Začať kurzívou (0), veľkým (1)
Tu je návod, ako sa funkcia používa
Poznámka
- Táto funkcia bude pracovať s číslami od 0 do 99999999
- Pred kopírovaním kódu prepnite rozloženie klávesnice na ruštinu (pre správne kopírovanie ruského textu)
- Kód VBA je potrebné vložiť do všetkých súborov (zošitov programu Excel), kde chcete, aby fungoval
- Po vložení kódu je potrebné uložiť súbor xlsm s podporou makier (v Exceli od verzie 2007)
- Funkciu je možné zadať buď ručne, alebo, ak ste zabudli, ako je napísaná, pomocou sprievodcu funkciou (tlačidlo fx na paneli vzorcov, kategória definovaná používateľom)
Ak máte pochybnosti o tom, ako sa niečo píše kurzívou v angličtine alebo ruštine, použite náš prekladač číslic. Pre vykonanie prekladu zadajte požadovaný počet vo forme čísel a program vypočíta jeho písomnú podobu.
V súčasnosti je prekladač obmedzený na 18 desatinných miest (pre celočíselné hodnoty) a 18 číslic za desatinnou čiarkou (pre preklad hodnôt obsahujúcich zlomkovú časť).
číslo:
Ako vidíte vyššie, pre preložené číslo je uvedených niekoľko anglických hláskovaní. S ich pomocou môžete rozoznať rozdiel medzi americkou angličtinou (AmE) a britskou angličtinou (BrE). Pre každý z nich je možné poskytnúť aj niekoľko možností pravopisu, ktoré v texte použiť závisí od kontextu vety.
Tento program sa rovnako ľahko vyrovná s prekladom čísel do textu, a to ako pre angličtinu, tak aj pre ruštinu. Tie. ak potrebujete napísať číslo slovami v ruštine, stačí ho zadať v číselnom formáte a kliknúť na tlačidlo „Preložiť“.
Notový zápis
Pri preklade do ruštiny berie prekladateľ do úvahy možné zmeny podľa pohlavia pre dané číslo, ktoré sú označené nasledujúcimi piktogramami:
- ženský rod, - mužský rod, - stredný rod.
Náš program vie okrem čísel zapísať aj rôzne sumy peňazí slovom. V tomto prípade sa prevod uskutoční okamžite v troch rôznych menách: rubľoch, dolároch a librách šterlingov.
Tlačidlo slúži na prepínanie medzi režimami „Číslo slovami“ a „Množstvo slovami“.
V prvom rade sa zameriavame na ľudí, ktorí sa učia angličtinu. jazyku, ale ak bude tento prekladač užitočný aj niekomu inému (napríklad pri vypĺňaní obchodných dokumentov), budeme veľmi radi.
Pri zobrazovaní rôznych zostáv je často potrebné previesť číselnú hodnotu na reťazec v slovách. V 1C je to vyriešené veľmi jednoducho: na tento účel je k dispozícii funkcia Číslo v slovách ().
Pri tvorení čísla slovom je možné vedľa neho zobraziť predmet výpočtu tohto čísla v požadovanom rode a páde. Predmet kalkulu- to je to, čo prepočítané číslo meria napríklad peniaze, krabice, vagóny, televízory atď.
- Bez predmetu kalkul:
- Dvadsaťdva;
- Tristo osemdesiatštyri.
- S predmetom kalkulu:
- Tridsaťosem dublónov;
- dvanásť lodí;
- Dva domy.
Príklady
Na začiatok uvádzame príklady konverzie, aby sme zistili možnosti 1C:
// ***** Výstupné čísla: *****Číslo v slovách (9876,54 ); // Deväťtisíc osemsto sedemdesiatšesť 54Číslo v slovách (1234,56 , "L=ru_RU;DP=TRUE" , "celý, celý, celý, f, stotina, stotina, stotiny, f, 2"); // Tisíc dvesto tridsaťštyri bod päťdesiat šesť stotínČíslo v slovách (7432 , "L=ru_RU; NR=False" , ",0" ); // Sedemtisíc štyristo tridsaťdva // ***** Výplata: *****Číslo v slovách (9845.11 , "L=ru_RU" , ); // Deväťtisíc osemsto štyridsaťpäť rubľov 11 kopejokČíslo v slovách (2845.11 , "L=ru_RU;DP=True" , "rubeľ, rubeľ, ruble, m, cent, cent, cent, f, 2"); // Dvetisíc osemsto štyridsaťpäť rubľov jedenásť kopejokČíslo v slovách (555,16 , "L=ru_RU;DP=True" , "dolár, dolár, doláre, m, cent, cent, cent, m, 2"); // Päťstopäťdesiatpäť dolárov šestnásť centovČíslo v slovách (453,23 , "L=ru_RU;DP=True" , "euro, euro, euro, m, cent, cent, cent, m, 2"); // Štyristopäťdesiattri eur dvadsaťtri centov NumberWords (812.44 , "L=en_US;DP=True" , "dolár, doláre, cent, centy, 2"); // Osemstodvanásť dolárov štyridsaťštyri centov NumberWords(3945,76 , "L=sk_US;DP=True" , "euro, eurá, cent, centy, 2" ); // Tritisícdeväťstoštyridsaťpäť eur sedemdesiatšesť centov // ***** Môžete previesť nielen peňažné jednotky: *****Číslo v slovách (535 , "L=ru_RU" , "box, boxy, boxy, f, f, 0"); // Päťsto tridsaťpäť škatúľČíslo v slovách (342 , "L=ru_RU" , "tv, tv, tv, m, m, 0"); // Tristoštyridsaťdva televízorovPopis práce s funkciou
Ako sme zistili, na získanie čísla slovami sa používa funkcia
Číslo v slovách (< Число >, < FormatString>, < ParametersItemCalculus>)Funkcia vráti hodnotu reťazca. Ako vstupné parametre sa odovzdávajú nasledovné:
- Číslo je hodnota, ktorá sa má previesť;
- FormatString - možnosti formátovania:
- L - Lokalizačný kód (napríklad u_RU - ruština; en_US - angličtina, de_DE - nemčina). Štandardne sa používajú nastavenia operačného systému.
- NP - Zobrazenie názvu predmetu kalkulu, predvolene - Pravda.
- ND - Zobrazenie názvu desatinných častí predmetu výpočtu, štandardne - Pravda.
- DP - Zobrazenie zlomkovej časti v slovách/číslo, štandardne - False.
- AI - Výstupné spojenie a. Analyzované iba pre anglickú lokalizáciu. Možné hodnoty: "Don't Use", "Use".
- CalculusItemParameters - čiarkami oddelené vymenovanie parametrov objektu kalkulu. Formát závisí od miestneho nastavenia.
Pre ruský jazyk majú parametre predmetu výpočtu tvar „rubeľ, rubeľ, ruble, m, kopeck, kopeck, kopeck, f, 2“, kde:
- rubeľ - nominatív jednotného čísla;
- rubeľ - singulárový genitív;
ruble - množný genitív;
m - mužský rod (g - ženský rod, s - stredný rod);
„penny, penny, penny, w“ - zlomková časť podobná predmetu výpočtu (môže chýbať);
"2" - počet číslic zlomkovej časti (môže chýbať, predvolená hodnota je 2).
Použitie v typických riešeniach
V konfiguráciách postavených na , v spoločnom module Kurzy pracovnej meny existuje funkcia
GenerateAmountWords(Číslo sumy , Mena , Vybrať čiastkuWithoutKopecks= nepravda)Funkcia sa používa na prevod menových čiastok na reťazec v slovách.
Máte nejaké otázky?
Opýtajte sa v komentároch k článku.
Osobný účet poistenca
Automatický identifikačný systém Spoločné používanie AIS s elektronickým mapovým systémom
Wargame: Red Dragon sa nespúšťa?
Smutný escobar „Tvár súdneho systému Ukrajiny“
ROME Total War – ako odomknúť všetky frakcie?