формули
Я часто бачу запитання на різних форумах, чи можна в Excel писати цифри буквами. На жаль, для цього немає вбудованої формули, але так звана користувацька функція може бути запрограмована у Visual Basic.

Зараз я хочу показати інше рішення, яке не вимагає програмування. Історія почалася багато років тому, коли на LinkedIn в групі Excel Hero було запропоновано скласти формулу англійською мовою, яка перетворює числа в текст. Звичайно, будучи угорцем, я відразу подумав, що це слід робити і по-угорськи - оскільки угорська мова формує числа на основі більш простого правила (думайте лише про утворення десятків).

Отже, існує формула, яка вирішує перетворення тексту лише за допомогою вбудованих формул Excel - вона ще не опублікована. Настав час поділитися ним і з угорськими читачами!

Ви можете завантажити файл звідси.

Ми використовуємо дві названі константи у формулі - вони необхідні, щоб формула не була занадто довгою:

Якщо ви хочете використовувати формулу в іншому файлі, все, що вам потрібно зробити, це скопіювати клітинку звичайним способом (скопіювати-вставити, Ctrl + C, Ctrl + V), і ці названі константи також будуть автоматично перенесені у ваш файл. . Ви можете перевірити це в диспетчері імен (Ctrl + F3).

Ця публікація заснована на статті нашого англійського блогу, де ви знайдете англійську та італійську формули, а також зіберете додаткові мови.

Запитайте нас у нашій довідковій групі Excel або слідкуйте за садівництвом даних у Facebook!

Я хотів би отримати вашу допомогу щодо того, як вставити символ * на початку та в кінці друкованого тексту для методу, представленого в статті? Цей додатковий символ потрібен для заповнення чека.

Заздалегідь дякую за вашу відповідь.

  • ttdani 22.07.2015 о 16:31
  • #
  • Відповідь

У 2003 році це не спрацює. Файл відкривається, добре, як тільки я скопіюю формулу, він не йде.

Тим часом я це вирішив. Дякую за ваші зусилля.

  • Кріс 29 липня 2015 року о 20:56
    Автор
  • #
  • Відповідь

Привіт Гергелі!
Вибачте, що я зараз відповів - ми були у відпустці. 🙂
Я рада, що вам вдалося це вирішити!
Привіт:
Кріс

  • Імре Віраг на 31.08.2015 о 19:16
  • #
  • Відповідь

Рішення дуже хороше, оскільки воно використовує внутрішні формули. Однак, на жаль, він не повністю відповідає правилам угорської орфографії. Див. 100, тобто сто, а не сто, або 200, тобто двісті, а не двісті. Але я думаю, що це теж було б можливо.
Я вважав за краще створити модуль класу vba, недоліком якого є те, що він працює лише у даній книзі (або в книзі, відкритій на даній машині).
Це виглядало б так:

Функція з текстом (змінна As Double)

‘Бронювання, роз’яснення
Нечіткі регіони (100)
число = змінна
довжина = Льон (число)
text = "
повна = "
число = "

‘Поділ числа
Якщо Fix (число) = число Тоді
Для i = довжина До 1 Крок -1
місцеві значення (i) = Val (Mid (число, довжина - (i - 1), 1))
Далі i
Інакше
з текстом = "# НЕ ЦІЛО!"
Функція виходу
Завершити якщо

‘Нуль обробляється окремо
Якщо число = 0 Тоді з текстом = “нуль”: функція виходу

'перетворення
Для i = довжина До 1 Крок -1
Виберіть регістр i
Справа 24, 21, 18, 15, 12, 9, 6, 3
GoSub сотні
Справа 23, 20, 17, 14, 11, 8, 5, 2
GoSub десять
Випадок 22, 19, 16, 13, 10, 7, 4, 1
GoSub Деякі
End Select
Іменування GoSub
повний текст = повний текст & текст & номер
text = "
число = "
Далі i

‘Повернути результат
з текстом = повний текст

'Виборці
Сотні:
Місцеві жителі вибору (i)
Випадок 1
text = "сотня"
Випадок 2
text = "двісті"
Випадок 3
text = "триста"
Випадок 4
text = "чотириста"
Випадок 5
text = "п'ятсот"
Випадок 6
text = "шістсот"
Випадок 7
text = "сімсот"
Випадок 8
text = "вісімсот"
Випадок 9
text = "дев'ятьсот"
End Select
Повернення

Десяті:
Місцеві жителі вибору (i)
Випадок 1
Якщо локальні значення (i - 1) = 0 Тоді текст = “десять” Інший текст = “десять”
Випадок 2
Якщо місцеві жителі (i - 1) = 0 Тоді text = "двадцять" Перший текст = "двадцять"
Випадок 3
text = "тридцять"
Випадок 4
text = "сорок"
Випадок 5
text = "п'ятдесят"
Випадок 6
text = "шістдесят"
Випадок 7
text = "сімдесят"
Випадок 8
text = "вісімдесят"
Випадок 9
text = "дев'яносто"
End Select
Повернення

Дещо:
Місцеві жителі вибору (i)
Випадок 1
Якщо i = 1 Тоді текст = "один"
Якщо i = 4 І місцеві значення (5) “” Тоді текст = “один”
Якщо i = 4 І місцеві значення (5) = “” Тоді текст = “”
Випадок 2
Якщо i = 1 Тоді текст = "два" Перший текст = "два"
Випадок 3
text = "три"
Випадок 4
text = "чотири"
Випадок 5
text = "п'ять"
Випадок 6
text = "шість"
Випадок 7
text = "тиждень"
Випадок 8
text = "вісім"
Випадок 9
text = "дев'ять"
End Select
Повернення

Ім'я:
Виберіть регістр i
Випадок 22
число = "трильйон-"
Справа 19
число = "трильйон"
Випадок 16
number = "більярд"
Випадок 13
число = "трильйон"
Випадок 10
число = "мільярд-"
Випадок 7
число = "мільйон"
Випадок 4
If szam Szilágyi Árpád 06.06.2016 о 19:54

  • #
  • Відповідь
    • Арпад Сіладжі на 06.02.2016 о 13:01
    • #
    • Відповідь
    • Арпад Сіладжі на 06.02.2016 о 19:16
    • #
    • Відповідь

    Функція num2txthu (значення комірки як подвійне)
    ‘——————————————————————————
    ‘Функція VBA, яку можна використовувати в Excel.
    ‘Перетворює вміст комірки (ціле число від 0 до 1 мільярда) у текст.

    ‘На основі рішення Імре Вірага, дякую! Трохи модифікований, перевірений.
    ‘(Http://www.adatkerteszet.hu/2014/08/osszeg-betuvel-szamok-atirasa-szovegge-keplettel/)

    [email protected]

    'Приклади
    ‘A1 A2 = num2txthu (A1)
    ‘———— ——————————————————————-
    '1 один
    ‘10 десять
    ‘19 дев’ятнадцять
    ‘20 двадцять
    ‘25 двадцять п’ять
    ‘1000 тисяч
    ‘1 999 тисяч дев’ятьсот дев’яносто дев’ять
    ‘2001 дві тисячі кожен
    ‘3 016 три тисячі шістнадцять
    ‘47 563 сорок сім тисяч п’ятсот шістдесят три
    ‘100 000 сотень тисяч
    ‘1 100 000 один мільйон сто тисяч
    ‘7001,530 сім мільйонів тисяч п’ятсот тридцять
    ‘7 491 530 сім мільйонів чотириста дев’яносто одна тисяча п’ятсот тридцять
    ‘7 490 530 сім мільйонів чотириста дев’яносто тисяч п’ятсот тридцять
    ‘10 000 000 десятків мільйонів
    ‘999 999 999 дев’ятсот дев'яносто дев'ять мільйонів дев'ятсот дев'яносто дев'ять тисяч дев'ятсот дев'яносто дев'ять
    ‘1 000 000 000 один мільярд
    ‘———— ——————————————————————-
    ‘A1 A2 = CONCATENATE (« * », ВЕРХНІЙ (MID (num2txthu (A1), 1,1)), MID (num2txthu (A1), 2200),« * »)
    ‘———— ——————————————————————-
    ‘4672 * Чотири тисячі шістсот сімдесят два *
    ‘4911 * Чотири тисячі дев’ятсот одинадцять *
    ‘———————————————————————————

    Тьмяний v_arr (100)
    v_number = значення комірки
    v_length = Len (v_number)
    v_number_name = "
    v_group_name = "
    v_num2txthu = "

    "Потім він буде переоцінювати, щойно книга зміниться (якщо для вашого розрахунку встановлено автоматичне значення).
    Застосування. Летюче

    ‘Поділ числа
    Якщо v_number> 1 млрд. Тоді
    num2txthu = “# Забагато цифр! (добре: ціле додатне число від 0 до 1 мільярда) "
    Функція виходу
    Завершити якщо
    Якщо Виправити (v_number) = v_number Тоді
    Для pos = v_length До 1 кроку -1
    v_arr (pos) = Val (Mid (v_number, v_length - (pos - 1), 1))
    Наступна поз
    Інакше
    num2txthu = “# Не ціле число! (добре: ціле додатне число від 0 до 1 мільярда) "
    Функція виходу
    Завершити якщо

    ‘Нуль обробляється окремо
    Якщо v_number = 0 Тоді num2txthu = “нуль”: функція виходу

    ‘Pos - позиція в v_arr
    ‘Поділ на групи (одиночні, десятки, сотні)
    Для pos = v_length До 1 кроку -1
    Виберіть регістр поз
    Справа 24, 21, 18, 15, 12, 9, 6, 3
    GoSub l_group_100s
    Справа 23, 20, 17, 14, 11, 8, 5, 2
    GoSub l_group_10s
    Випадок 22, 19, 16, 13, 10, 7, 4, 1
    GoSub l_group_1s
    End Select
    GoSub l_group_names

    ‘Доповніть результат текстом, створеним у групі
    v_num2txthu = v_num2txthu & v_number_name & v_group_name

    ‘Ініціалізуйте текст у групі
    v_number_name = "
    v_group_name = "
    Наступна поз

    ‘Повернути результат
    num2txthu = v_num2txthu

    ‘———————————————————————————
    l_group_100s:
    Виберіть регістр v_arr (pos)
    Випадок 1
    ‘Сто, сто тисяч проти тисяча сто, мільйон сто тисяч
    Якщо (v_number> = 100 І v_number = 100000 І v_number 0 Тоді
    v_group_name = "мільйон"
    Інакше
    Якщо v_number> = 1000000000 І Modulo (v_number, 1000000) = 0 Тоді
    v_group_name = "
    Інакше
    v_group_name = "мільйони"
    Завершити якщо
    Завершити якщо
    Випадок 4
    Якщо v_number 0 Тоді
    v_group_name = "тисячі"
    Інакше
    v_group_name = "тисячі"
    Завершити якщо
    Завершити якщо
    Завершити якщо
    End Select
    Повернення

    Функціональний модуль (a, b)
    ‘За модулем = a - (b * (a \ b))
    Modulo = a Mod b
    Кінцева функція

    • Габор Боттлік, 09.02.2016 о 10:27
    • #
    • Відповідь

    Шановний Кріс, шановні панове!

    Додаю власну версію. Issues У цій версії питання про двісті проти двохсот не розглядаються, хоча, на мою думку, це категорія сметана проти сметани. О, і ця версія працює “лише” між +/- сотнями мільйонів або округлює число до цілого числа. Звичайно, інтервал можна збільшити, трохи підправивши.

    Функція SAMBETU (значення як подвійне) як рядок
    Затемніть деякі
    Тьмяні тизи
    Тьмяний seged
    Нечітке число як ціле число
    Вимірювати як ціле число
    одинарний = масив (", "один", "два", "три", "чотири", "п'ять", "шість", "сім", "вісім", "дев'ять")
    десятки = масив (", "десять", "двадцять", "тридцять", "сорок", "п'ятдесят", "шістдесят", "сімдесят", "вісімдесят", "дев'яносто", "десять", "двадцять") )
    seged = масив (", "сотня", "тисяча", "мільйон")
    Якщо ertek = 0 Тоді
    SAMBET = "нуль"
    Функція виходу
    Завершити якщо
    Якщо ertek> 999999999 Або ertek = 100000000 Тоді SZAMBETU = SZAMBETU & seged (1)
    Випадок 6
    Якщо значення> = 1000000 Тоді SAMBET = SAMBET і довідка (3)
    Випадок 5
    Якщо значення> = 100000 І Int ((значення Mod 10 ^ (t + 1))/(10 ^ (t))) 0 Тоді SAMBET = SAMBET & help (1)
    Випадок 3
    Якщо Int ((значення Mod (10 ^ (t + 1)))// (10 ^ t)) 0 або Int ((значення Mod (10 ^ (t + 2)))/(10 ^ (t + 1)) ) 0 Або Int ((Значення Mod (10 ^ (t + 3)))/(10 ^ (t + 2))) 0 Тоді SAMBET = SAMBET & help (2)
    Випадок 2
    Якщо значення> = 100 І Int ((значення Mod 10 ^ (t + 1))/(10 ^ (t))) 0 Тоді SAMBET = SAMBET & help (1)
    End Select
    Далі т
    Якщо вправо (SZAMBETU, 1) = “-” Тоді SZAMBETU = вліво (SZAMBETU, Len (SZAMBETU) - 1)
    Кінцева функція

    • Горват Імре Йозеф, 24.11.2016 о 09:35
    • #
    • Відповідь

    Хочу подякувати усім за їх роботу! Ви дуже допомогли!

    Дуже дякую! Імре

    Можливо, якщо комусь нудно:

    Згідно з поштовими правилами, використання п’ятикутних зірок є обов’язковим перед кількістю частин, що підлягають оплаті, а також перед відображенням тексту.

    Щодо цифр, Alt Gr/* допоміг, але перед текстом з’являється шестикутна зірка.

    Можливо, хтось має ідею?

    > Alt Gr/* допоміг у цифрах, але перед текстом з’являється шестикутна зірочка.
    Я цього не розумію - цифри також описуються "текстом", різниці немає.

    Може бути, що в одних шрифтах зірка має п’ять гілок, а в інших - шість гілок. Шрифт не потрібен?

    У будь-якому випадку, чи бачите ви шанс, що поштове відділення скине вантажі на цій основі? ...
    Я не думаю, що вони повинні (повинні) мати з цим справу, це повинен бути дуже кульгавий OCR, який не розпізнає шестикутну зірку так само ...

    (Я вже намагався зробити букву "R" справді Times New Roman, яку вимагає пост, навіть на лист Linux, але я думаю, що лише банк замовників сприйняв це занадто серйозно. Я не думаю, що це було б конкретний міжнародний стандарт.… 😉)

    • Поцілуй Моніку 2018-06-04 о 08:01
    • #
    • Відповідь

    Дякую за велику допомогу!

    • wendykee on 2020-01-07 о 17:45
    • #
    • Відповідь

    Навіть не можу сказати вам, наскільки я вдячний! Дякую, дякую, дякую! Я посилаю багато віртуального щастя!