Suma în litere: traduceți numerele în text cu o formulă

numerelor
Adesea văd întrebarea în diferite forumuri dacă numerele pot fi scrise cu litere în Excel. Din păcate, nu există o formulă încorporată pentru aceasta, dar o așa-numită funcție definită de utilizator poate fi programată în Visual Basic.

Acum vreau să arăt o altă soluție care nu necesită programare. Povestea a început cu ani în urmă când a fost ridicată pe LinkedIn în grupul Excel Hero pentru a pune împreună o formulă în limba engleză care convertește numerele în text. Desigur, ca maghiar, m-am gândit imediat că acest lucru ar trebui făcut și în limba maghiară - deoarece limba maghiară formează numere pe baza unei reguli mai simple (gândiți-vă doar la formarea zecilor).

Așadar, există o formulă care rezolvă conversia textului doar utilizând formulele încorporate Excel - nu a fost publicată încă. Acum este momentul să îl împărtășim și cititorilor maghiari!

Puteți descărca fișierul de aici.

Folosim două constante numite în formulă - acestea sunt necesare pentru ca formula să nu fie prea lungă:

Dacă doriți să utilizați formula într-un alt fișier, tot ce trebuie să faceți este să copiați celula în mod obișnuit (copiați-lipiți, Ctrl + C, Ctrl + V) și aceste constante numite vor fi transferate automat și în fișierul dvs. . O puteți verifica în Managerul de nume (Ctrl + F3).

Această postare se bazează pe un articol din blogul nostru în engleză, unde veți găsi formulele în engleză și italiană, precum și veți colecta alte limbi acolo.

Întrebați-ne în grupul nostru de ajutor Excel sau urmați Data Gardening pe Facebook!

Aș dori ajutorul dvs. cu privire la modul de inserare a caracterului * la începutul și la sfârșitul textului tipărit pentru metoda prezentată în articol? Ai nevoie de acest personaj suplimentar pentru a completa un cec.

Vă mulțumesc în avans pentru răspunsul dumneavoastră.

  • ttdani pe 22.07.2015 la 16:31
  • #
  • Răspuns

Nu va funcționa în 2003. Fișierul se deschide, este bun imediat ce copiez formula, nu merge.

Între timp, am rezolvat-o. Va multumesc pentru eforturile dumneavoastra.

  • Kris pe 29.07.2015 la 20:56
    Autor
  • #
  • Răspuns

Bună Gergely!
Ne pare rău să răspund chiar acum - eram în vacanță. 🙂
Mă bucur că ai reușit să o rezolvi!
Bună:
Kris

  • Imre Virág pe 31.08.2015 la 19:16
  • #
  • Răspuns

Soluția este foarte bună deoarece folosește formule interne. Din păcate, însă, nu respectă pe deplin regulile de ortografie maghiară. Vezi 100 adică o sută, nu o sută sau 200 adică două sute și nu două sute. Dar cred că și asta ar fi posibil.
Am preferat să creez un modul de clasă vba, al cărui dezavantaj este că rulează doar în registrul de lucru dat (sau în registrul de lucru deschis pe aparatul dat).
Ar arăta astfel:

Funcție cu text (variabilă Ca dublă)

‘Rezervări, precizări
Dim locale (100)
număr = variabilă
lungime = In (număr)
text = „”
plin = "
număr = „”

‘Diviziunea numerică
Dacă Fix (număr) = număr Atunci
Pentru i = lungimea la 1 pas -1
valori locale (i) = Val (Mid (număr, lungime - (i - 1), 1))
Apoi eu
Altfel
cu text = "#NOT WHOLE!"
Funcția de ieșire
End If

‘Zero tratat separat
Dacă numărul = 0 Apoi cu text = „zero”: Ieșiți din funcție

'conversie
Pentru i = lungimea la 1 pas -1
Selectați Cazul i
Cazul 24, 21, 18, 15, 12, 9, 6, 3
GoSub Sute
Cazul 23, 20, 17, 14, 11, 8, 5, 2
GoSub Ten
Cazul 22, 19, 16, 13, 10, 7, 4, 1
GoSub Unele
Selectare sfârșit
Denumirea GoSub
text integral = text integral & text & număr
text = „”
număr = „”
Apoi eu

‘Rezultatul returnat
cu text = text integral

- Alegătorii
Sute:
Selectați localnici de caz (i)
Cazul 1
text = „sută”
Cazul 2
text = "două sute"
Cazul 3
text = „trei sute”
Cazul 4
text = „patru sute”
Cazul 5
text = „cinci sute”
Cazul 6
text = „șase sute”
Cazul 7
text = "șapte sute"
Cazul 8
text = „opt sute”
Cazul 9
text = „nouă sute”
Selectare sfârșit
Întoarcere

Zecimi:
Selectați localnici de caz (i)
Cazul 1
Dacă valorile locale (i - 1) = 0 Apoi text = „zece” Alt text = „zece”
Cazul 2
Dacă localnicii (i - 1) = 0 Apoi text = „douăzeci” Primul text = „douăzeci”
Cazul 3
text = „treizeci”
Cazul 4
text = „patruzeci”
Cazul 5
text = „cincizeci”
Cazul 6
text = „șaizeci”
Cazul 7
text = „șaptezeci”
Cazul 8
text = „optzeci”
Cazul 9
text = „nouăzeci”
Selectare sfârșit
Întoarcere

Niste:
Selectați localnici de caz (i)
Cazul 1
Dacă i = 1, apoi text = „unul”
Dacă i = 4 Și valorile locale (5) „” Apoi text = „unul”
Dacă i = 4 Și valorile locale (5) = „” Apoi text = „”
Cazul 2
Dacă i = 1 Apoi text = „doi” Primul text = „doi”
Cazul 3
text = „trei”
Cazul 4
text = „patru”
Cazul 5
text = "cinci"
Cazul 6
text = „șase”
Cazul 7
text = „săptămână”
Cazul 8
text = "opt"
Cazul 9
text = „nouă”
Selectare sfârșit
Întoarcere

Nume:
Selectați Cazul i
Cazul 22
număr = "trilioane-"
Cazul 19
număr = "trilion"
Cazul 16
număr = „biliard”
Cazul 13
număr = "trilion"
Cazul 10
număr = "miliard-"
Cazul 7
număr = "milion"
Cazul 4
Dacă szam Szilágyi Árpád pe 06.02.2016 la 19:54

  • #
  • Răspuns
    • Árpád Szilágyi pe 06.02.2016 la 13:01
    • #
    • Răspuns
    • Árpád Szilágyi pe 06.02.2016 la 19:16
    • #
    • Răspuns

    Funcția num2txthu (cellvalue As Double)
    ‘———————————————————————————
    „Funcția VBA care poate fi utilizată în Excel.
    ‘Convertește conținutul unei celule (un număr între 0 și 1 miliard) în text.

    ‘Pe baza soluției Imre Virág, mulțumesc! Ușor modificat, testat.
    ‘(Http://www.adatkerteszet.hu/2014/08/osszeg-betuvel-szamok-atirasa-szovegge-keplettel/)

    [email protected]

    - Exemple
    „A1 A2 = num2txthu (A1)
    ‘———— —————————————————————-
    ' 1 unu
    ‘10 zece
    ‘19 nouăsprezece
    ‘20 douăzeci
    ‘25 douăzeci și cinci
    ‘1.000 de mii
    ‘1.999 mii nouă sute nouăzeci și nouă
    ‘2.001 două mii fiecare
    ‘3 016 trei mii șaisprezece
    ‘47 563 patruzeci și șapte de mii cinci sute șaizeci și trei
    ‘100.000 de sute de mii
    ‘1.100.000 un milion o sută de mii
    ‘7.001.530 șapte milioane o mie cinci sute treizeci
    ‘7.491.530 șapte milioane patru sute nouăzeci și una de mii cinci sute treizeci
    ‘7.490.530 șapte milioane patru sute nouăzeci de mii cinci sute treizeci
    ‘10, 000.000 de zeci de milioane
    „999 999 999 nouă sute nouăzeci și nouă milioane nouă nouă sute nouăzeci și nouă mii nouă sute nouăzeci și nouă
    ‘1.000.000.000 un miliard
    ‘———— —————————————————————-
    ‘A1 A2 = CONCATENATE („ * ”, UPPER (MID (num2txthu (A1), 1,1)), MID (num2txthu (A1), 2.200),„ * ”)
    ‘———— —————————————————————-
    ‘4672 * Patru mii șase sute șaptezeci și doi *
    ‘4911 * Patru mii nouă sute unsprezece *
    ‘———————————————————————————

    Dim v_arr (100)
    v_number = valoare de celulă
    v_length = Len (v_number)
    v_number_name = "
    v_group_name = "
    v_num2txthu = „”

    „Se va reevalua atunci când se schimbă registrul de lucru (dacă calculul dvs. este setat la automat).
    Aplicație. Volatil

    ‘Diviziunea numerică
    Dacă v_number> 1 milion, atunci
    num2txthu = „# Prea multe numere! (bun: număr întreg pozitiv între 0 și 1 miliard) "
    Funcția de ieșire
    End If
    Dacă Fix (v_number) = v_number Atunci
    Pentru pos = v_length la 1 Pasul -1
    v_arr (pos) = Val (Mid (v_number, v_length - (pos - 1), 1))
    Următoarea poziție
    Altfel
    num2txthu = „#No un întreg! (bun: număr întreg pozitiv între 0 și 1 miliard) "
    Funcția de ieșire
    End If

    ‘Zero tratat separat
    Dacă v_number = 0 Atunci num2txthu = „zero”: Ieșiți din funcție

    ‘Pos - poziție în v_arr
    „Împărțirea în grupuri (simplu, zeci, sute)
    Pentru pos = v_length la 1 Pasul -1
    Selectați Pos
    Cazul 24, 21, 18, 15, 12, 9, 6, 3
    GoSub l_group_100s
    Cazul 23, 20, 17, 14, 11, 8, 5, 2
    GoSub l_group_10s
    Cazul 22, 19, 16, 13, 10, 7, 4, 1
    GoSub l_group_1s
    Selectare sfârșit
    GoSub l_group_names

    ‘Completați rezultatul cu textul creat în cadrul grupului
    v_num2txthu = v_num2txthu & v_number_name & v_group_name

    ‘Inițializați text în cadrul grupului
    v_number_name = "
    v_group_name = "
    Următoarea poziție

    ‘Rezultatul returnat
    num2txthu = v_num2txthu

    ‘———————————————————————————
    l_group_100s:
    Selectați Case v_arr (pos)
    Cazul 1
    ‘O sută, o sută de mii vs. o mie o sută, un milion o sută de mii
    Dacă (v_number> = 100 Și v_number = 100000 Și v_number 0 Atunci
    v_group_name = "milion"
    Altfel
    Dacă v_number> = 1000000000 și Modulo (v_number, 1000000) = 0 Atunci
    v_group_name = "
    Altfel
    v_group_name = "milioane"
    End If
    End If
    Cazul 4
    Dacă v_number 0 Atunci
    v_group_name = "mii"
    Altfel
    v_group_name = "mii"
    End If
    End If
    End If
    Selectare sfârșit
    Întoarcere

    Modulul funcțional (a, b)
    „Modulo = a - (b * (a \ b))
    Modulo = a Mod b
    Funcția de sfârșit

    • Gábor Bottlik pe 09.02.2016 la 10:27
    • #
    • Răspuns

    Dragă Kris, dragi domni!

    Vă anexez propria versiune. 🙂 Problemele două sute vs două sute nu sunt abordate în această versiune, deși consider că aceasta este categoria smântână vs smântână. 🙂 Oh, și această versiune funcționează „numai” între +/- sute de milioane sau rotunjește numărul la un număr întreg. Desigur, puteți lărgi intervalul cu o mică ajustare.

    Funcția SAMBETU (valoare ca dublă) ca șir
    Atenuează câteva
    Dimensiuni
    Dim seged
    Reduceți numărul ca întreg
    Dim t Ca întreg
    single = Array („”, „unu”, „doi”, „trei”, „patru”, „cinci”, „șase”, „șapte”, „opt”, „nouă”)
    zeci = Array („”, „zece”, „douăzeci”, „treizeci”, „patruzeci”, „cincizeci”, „șaizeci”, „șaptezeci”, „optzeci”, „nouăzeci”, „zece”, „douăzeci” )
    seged = Array (", "sută", "mii", "milioane")
    Dacă ertek = 0 Atunci
    SAMBET = „zero”
    Funcția de ieșire
    End If
    Dacă ertek> 999999999 Sau ertek = 100000000, atunci SZAMBETU = SZAMBETU & seged (1)
    Cazul 6
    Dacă valori> = 1000000, atunci SAMBET = SAMBET & help (3)
    Cazul 5
    Dacă valoarea> = 100000 și Int ((valoarea Mod 10 ^ (t + 1))/(10 ^ (t))) 0 Atunci SAMBET = SAMBET & help (1)
    Cazul 3
    Dacă Int ((valoarea Mod (10 ^ (t + 1)))/(10 ^ t)) 0 Sau Int ((valoarea Mod (10 ^ (t + 2)))/(10 ^ (t + 1)) ) 0 Sau Int ((Valori Mod (10 ^ (t + 3)))/(10 ^ (t + 2))) 0 Apoi SAMBET = SAMBET & help (2)
    Cazul 2
    Dacă valoarea> = 100 și Int ((valoarea Mod 10 ^ (t + 1))/(10 ^ (t))) 0 Atunci SAMBET = SAMBET & help (1)
    Selectare sfârșit
    Urmatorul T
    Dacă Dreapta (SZAMBETU, 1) = „-” Atunci SZAMBETU = Stânga (SZAMBETU, Len (SZAMBETU) - 1)
    Funcția de sfârșit

    • Horváth Imre József pe 24.11.2016 la 09:35
    • #
    • Răspuns

    Vreau să mulțumesc tuturor pentru munca depusă! Ai ajutat foarte mult!

    Mulțumesc foarte mult! Imre

    Poate dacă cineva se plictisește:

    Conform reglementărilor poștale, este obligatorie utilizarea stelelor cu cinci colțuri înainte de numărul de piese care trebuie plătite și, de asemenea, înainte de afișarea textului.

    Pentru cifre, Alt Gr/* a ajutat, dar o stea cu șase colțuri apare în fața textului.

    Poate cineva are o idee?

    > Alt Gr/* a ajutat la numere, dar în fața textului apare un asterisc cu șase colțuri.
    Nu înțeleg asta - numerele sunt descrise și cu „text”, nu există nicio diferență.

    S-ar putea ca în unele fonturi steaua să aibă cinci ramuri, iar în altele să aibă șase ramuri. Fontul nu este necesar?

    Oricum, vedeți o șansă ca oficiul poștal să renunțe la transport pe această bază? ...
    Nu cred că ar trebui (ar trebui) să se ocupe de acest lucru, ar trebui să fie un OCR foarte șchiop care nu recunoaște steaua cu șase colțuri în același mod ...

    (M-am străduit deja să fac litera „R” într-adevăr Times New Roman cerută de poștă, chiar și pe o scrisoare Linux, dar cred că numai banca de comenzi a luat-o prea în serios. Nu cred că ar standard internațional specific.… 😉)

    • Kiss Mónika pe 04.06.2018 la 08:01
    • #
    • Răspuns

    Mulțumesc că a fost de mare ajutor!

    • wendykee pe 01.07.2020 la 17:45
    • #
    • Răspuns

    Nici nu pot să vă spun cât de recunoscător sunt! Multumesc, multumesc, multumesc! Trimit multă fericire virtuală!