Как преобразовать римские цифры в арабские в Excel
Обновлено: 21.11.2024
Можете ли вы помочь мне составить формулу, которая преобразует (классические) римские цифры в числа? например:
MMMCCCLVII — 3357
римские цифры в ячейках a2:a20, формула в ячейках b2:b20
заранее спасибо!!
xlstime
Активный участник
попробуйте формулу ниже и перетащите
=ПОИСКПОЗ(A2,ИНДЕКС(ROMAN(СТРОКА(ДВССЫЛ("1:3999"))),0),0)
* 3999, потому что в Excel функция Roman поддерживается только до 3999.
Здравствуйте, эксперты Excel!
Можете ли вы помочь мне составить формулу, которая преобразует (классические) римские цифры в числа? например:
MMMCCCLVII — 3357
римские цифры в ячейках a2:a20, формула в ячейках b2:b20
заранее спасибо!!
Ниндзя Excel
Мне нравится это решение
xlstime
Активный участник
Мне нравится это решение
НАРАЯНК991
Ниндзя Excel
даст тот же результат.
если он вводится как формула массива, используйте CTRL SHIFT ENTER.
pinoy-exceler
Новый участник
попробуйте формулу ниже и перетащите
=ПОИСКПОЗ(A2,ИНДЕКС(ROMAN(СТРОКА(ДВССЫЛ("1:3999"))),0),0)
* 3999, потому что в Excel функция Roman поддерживается только до 3999.
pinoy-exceler
Новый участник
даст тот же результат.
если он вводится как формула массива, используйте CTRL SHIFT ENTER.
Спасибо, Нараян! теперь, если не сложно, можем ли мы преобразовать результат в слова, не прибегая к VBA =)
например:
MMMCCCLVII до 3357 до "три тысячи триста пятьдесят семь"
заранее спасибо.
НАРАЯНК991
Ниндзя Excel
Спасибо, Нараян! теперь, если не сложно, можем ли мы преобразовать результат в слова, не прибегая к VBA =)
например:
MMMCCCLVII до 3357 до "три тысячи триста пятьдесят семь"
заранее спасибо.
В Интернете есть доступные формулы для преобразования чисел в слова , и если вы ограничиваете себя только целочисленными значениями от 1 до 3999 , они вполне могут справиться с этой задачей.
Однако в целом они ненадежны.
Если вы хотите проверить один из них, перейдите по этой ссылке:
pinoy-exceler
Новый участник
Спасибо за ссылку, Нараян. В итоге я создал 6 вспомогательных столбцов и матрицу 28x2, чтобы решить проблему. Не очень элегантно, но работает. Спасибо всем за помощь.
xlstime
Активный участник
Было бы здорово, если бы вы могли поделиться с нами своим решением
Спасибо за ссылку, Нараян. В итоге я создал 6 вспомогательных столбцов и матрицу 28x2, чтобы решить проблему. Не очень элегантно, но работает. Спасибо всем за помощь.
Ниндзя Excel
Даниэль Ферри, известный как Excel Hero, написал это в своем блоге ExcelHero на Linkedin около 4 лет назад
Надеюсь, я правильно скопировал
"Преобразование чисел в письменный текст с помощью VBA довольно просто. Но я никогда не видел хорошего метода формул рабочего листа, который делает то же самое. Я составил формулу для этого, но это монстр. с чего начать. Я уверен, что есть более эффективные способы сделать это, так что давайте посмотрим, кто придумает лучшую формулу.
Вот правила:
1. A1 содержит число, которое может быть любое ЦЕЛОЕ число от 1 до 999999.
2. Создайте формулу, которая отвечает на значение A1 и возвращает письменное представление на АНГЛИЙСКОМ ЯЗЫКЕ.
3. Пример: сорок шесть миллионов сто семнадцать тысяч пятьсот двадцать- семь
4. Для правильного английского числа от 21 до 99 должны быть разделены дефисом.
5. В формуле могут использоваться именованные константы и константы массива, но никакие другие имена или VBA.
6 . Вспомогательных ячеек нет.
7. Лучшие формулы короче, нагляднее, используют меньше вызовов функций.
Вот моя первая попытка, доказывающая, что это возможно.
Он использует одну именованную константу, три именованных константы массива и по-прежнему имеет длину 1371 символ.
И, барабанная дробь, вот зверь:
=REPT(INDEX(nwords1,MID(TEXT(A1,n0),1,1)+1)&REPT("сотня",--MID(TEXT (A1,n0),1,3)>99)&REPT(" ",(--MID(ТЕКСТ(A1,n0),1,3)>99)*(--MID(ТЕКСТ(A1,n0), 3,1)>0))&ИНДЕКС(nwords3,(--MID(ТЕКСТ(A1,n0),2,2)>19)*MID(ТЕКСТ(A1,n0),2,1)+1)&REPT( "-",(--MID(ТЕКСТ(A1,n0),2,2)>20)*(--MID(ТЕКСТ(A1,n0),3,1)>0))&INDEX(nwords2,(( СРЕДН(ТЕКСТ(A1,n0),2,2)-8)*(--СРЕДН(ТЕКСТ(A1,n0),2,2)>9)*(--СРЕДН(ТЕКСТ(A1,n0),2 ,2) 19)))&" миллион ",(ДЛСТР(A1)>6)) & ПОВТОР(ИНДЕКС(nwords1,MID(ТЕКСТ(A1,n0),4,1)+1)&ПОВТОР("сотня", --MID(ТЕКСТ(A1,n0),4,3)>99)&REPT(" ",(--MID(TEXT(A1,n0),4,3)>99)*(--MID(TEXT( A1,n0),6,1)>0))&INDEX(nwords3,(--MID(ТЕКСТ(A1,n0),5,2)>19)*MID(ТЕКСТ(A1,n0),5,1) +1)&ПОВТОР("-",(--СРЕДН(ТЕКСТ(A1,n0),5,2)>20)*(--СРЕДН(ТЕКСТ(A1,n0),6,1)>0))&ИНДЕКС (nwords2,((MID(ТЕКСТ(A1,n0),5,2)-8)*(--MID(ТЕКСТ(A1,n0),5,2)>9)*(--MID(ТЕКСТ(A1 ,n0),5,2) 19)))&" тысяча ",(ДЛСТР(A1)>3)) & ИНДЕКС(nслов1,(ДЛСТР(A1)>2)*ЛЕВО(ПРАВО(A1,3),1 )+1)&ПОВТОР(" сто",ДЛСТР(A1)>2)&ПОВТОР(" ",(ДЛСТР(A1)>2)*(--(ПРАВО(A1,1))>0))&ИНДЕКС(nwords3, (--ВПРАВО(A1 ,2)>19)*НАЛЕВО(ПРАВО(A1,2),1)+1)&ПОВТОР("-",(--ПРАВО(A1,2)>20)*(--ПРАВО(A1,1)> 0))&ИНДЕКС(nwords2,((ПРАВИЛЬНО(A1,2)-8)*(--ПРАВИЛЬНО(A1,2)>9)*(--ПРАВИЛЬНО(A1,2) 19)))"
pinoy-exceler
Новый участник
Ого, вот это мега-формула. Это будет трудно отредактировать/оценить, когда дела пойдут наперекосяк, но, тем не менее, это потрясающе. в любом случае, я загрузил свое не очень элегантное решение, состоящее из (8) вспомогательных ячеек и матрицы для сопоставления строковых значений. Я знаю, что мне далеко до вашего уровня мастерства, поэтому, пожалуйста, не издевайтесь над моим решением. Спасибо всем за вашу помощь.
Вложения
bosco_yip
Ниндзя Excel
Попробуйте эту модифицированную формулу после преобразования римских цифр в числа и ограничения значений от 1 до 3999…………
1] Перейдите к Формуле >> Определить имя и определите 2 имени диапазона:
Затем в формуле D2 скопируйте вниз:
=TRIM(IF(C2>999,INDEX(n_1,1+LEFT(C2))&" Тысяча","")&IF(C2>99,INDEX(n_1,1+LEFT(RIGHT(C2,3) )))&" Сотня"&ЕСЛИ(ПРАВО(C2,2)="00",""," и"),"")&ЕСЛИ(MOD(C2,100)
Вложения
pinoy-exceler
Новый участник
Попробуйте эту измененную формулу после преобразования римских цифр в числа и ограничения значений от 1 до 3999…………
1] Перейдите к Формуле >> Определить имя и определите 2 имени диапазона:
Затем в формуле D2 скопируйте вниз:
=TRIM(IF(C2>999,INDEX(n_1,1+LEFT(C2))&" Тысяча","")&IF(C2>99,INDEX(n_1,1+LEFT(RIGHT(C2,3) )))&" Сотня"&ЕСЛИ(ПРАВО(C2,2)="00",""," и"),"")&ЕСЛИ(MOD(C2,100)
xlstime
Активный участник
Замечательно. спасибо всем
bosco_yip
Ниндзя Excel
Попробуйте эту модифицированную формулу после преобразования римских цифр в числа и ограничения значений от 1 до 3999…………
1] Перейдите к Формуле >> Определить имя и определите 2 имени диапазона:
Затем в формуле D2 скопируйте вниз:
=TRIM(IF(C2>999,INDEX(n_1,1+LEFT(C2))&" Тысяча","")&IF(C2>99,INDEX(n_1,1+LEFT(RIGHT(C2,3) )))&" Сотня"&ЕСЛИ(ПРАВО(C2,2)="00",""," и"),"")&ЕСЛИ(MOD(C2,100) 999,ИНДЕКС(n_1,1+ЛЕВО(C2 ))&" Тысяча"&ЕСЛИ((ПРАВИЛЬНО(C2,3)="000"),"",ЕСЛИ((ПРАВИЛЬНО(C2,2)="00")," и",ЕСЛИ(-MID(C2, 2,1),""," и"))),"")&ЕСЛИ(-ПРАВО(ЦЕЛОЕ(C2/100)),ИНДЕКС(n_1,1+ЛЕВО(ПРАВО(C2,3)))&" Сотни "&ЕСЛИ(ПРАВО(C2,2)="00",""," и"),"")&ЕСЛИ(MOD(C2,100)
Вложения
бины53
Активный участник
Есть особая функция,
Необходимо загрузить плагин bfx.exe
бобхц
Ниндзя Excel
Если у вас есть римская цифра до 3999 в ячейке A1, попробуйте эту формулу для преобразования в B1
pinoy-exceler
Новый участник
Обнаружена ошибка в приведенной выше формуле и в измененной формуле:
=ОТРЕЗАТЬ(ЕСЛИ(C2>999,ИНДЕКС(n_1,1+ЛЕВО(C2))&" Тысяча"&ЕСЛИ((ПРАВО(C2,3)="000"),"",ЕСЛИ((ПРАВО( C2,2)="00")," and",IF(-MID(C2,2,1),""," and"))),"")&IF(-RIGHT(INT(C2/100) ),ИНДЕКС(n_1,1+ЛЕВЫЙ(ПРАВО(C2,3)))&" Сотня"&ЕСЛИ(ПРАВО(C2,2)="00",""," и"),"")&ЕСЛИ(MOD( C2 100)
Администратор
Всем интересных формул.
Как насчет АРАБСКОГО()? Он работает в Excel 2013 или более поздней версии.
Ниндзя Excel
Я буду обсуждать функцию
=MATCH(A2,INDEX(ROMAN(ROW(INDIRECT("1:3999"))),0),0) позже в статье
Formula Forensics. на этой неделе
Исключающее ИЛИ LX
Активный участник
Я буду обсуждать функцию
=MATCH(A2,INDEX(ROMAN(ROW(INDIRECT("1:3999"))),0),0) позже в статье
Formula Forensics. на этой неделе
Поскольку вы выбрали настройку без СПП вместо эквивалентной настройки СПП, например:
=MATCH(A2,ROMAN(ROW(INDIRECT("1:3999") ))0)
возможно, было бы лучше включить обсуждение достоинств обеих версий?
Лично меня немного беспокоит растущее число формул, которые я вижу, которые используют этот метод вставки одной или нескольких дополнительных функций INDEX в конструкцию исключительно с целью сделать ее не-CSE.
Я не говорю, что не помнить о фиксации формулы с определенной комбинацией клавиш — это плохо. Даже опытные пользователи Excel, не говоря уже о новичках, время от времени совершают эту ошибку. Таким образом, при прочих равных условиях, при выборе между формулой, которая требует СПП, и формулой, которая не требует, разумно и логично выбрать последнюю.
Однако в данном случае все не совсем одинаково. Интересно, сколько из тех, кто использует этот метод включения дополнительных принудительных функций INDEX, знают, что полученная конструкция, хотя и не CSE, на самом деле требует больше ресурсов, чем эквивалентная версия CSE? Этого, если подумать, следовало ожидать: в конце концов, в версии, отличной от CSE, есть дополнительный вызов функции.
Естественно, разница между двумя настройками не будет большой, если количество таких формул в книге невелико. Однако, если мы говорим о многих конструкциях, то разрыв во времени расчета для версии CSE и версии без CSE-INDEX начинает увеличиваться.
Я бы никогда не сказал, что такая практика (вставка одной или нескольких дополнительных функций ИНДЕКС во избежание CSE) неверна. Единственное, что меня беспокоит, это то, что, по-видимому, уже существует некоторое недопонимание относительно формул массива в Excel, что их каким-то образом следует опасаться, даже избегать любой ценой. (Немало раз меня просили решить проблему, которая запрещает использование формул массива — на вопрос, почему, один из опрошенных даже ответил, что слышал, что формулы массива «могут повредить ваш компьютер»!)
Дело в том, что, если не принимать во внимание требуемую комбинацию клавиш (и давайте вспомним, что это не так уж сложно, на самом деле!), в формулах массива вообще нечего «опасаться». Наоборот, это замечательные вещи, которые открывают перед пользователем Excel много новых возможностей. Таким образом, мы должны максимально способствовать их использованию, а не искать способы избежать их. И в связи с этим, на мой взгляд, использование ИНДЕКС таким образом может быть просто виновным.
Функция Excel ARABIC преобразует римские цифры в виде текста в арабские цифры. Например, формула =АРАБСКИЙ("VII") возвращает 7.
- roman_text — римская цифра в тексте, который вы хотите преобразовать.
Функция ARABIC преобразует римскую цифру в число в форме арабских цифр. Результатом ARABIC является числовое значение.
ARABIC принимает только один аргумент, roman_text, который должен быть латинским числом, представленным в виде текстовой строки. Например, приведенная ниже формула преобразует "VII" в число 7:
Другие примеры
Функция ROMAN выполняет обратное преобразование:
Римские цифры
В таблице ниже перечислены доступные римские числа с их эквивалентным значением арабского числа.
Символ | Значение | |||
---|---|---|---|---|
I | 1 | |||
V | 5 | |||
X | 10 | |||
L | 50 | |||
C | 100 | |||
D | 500 | |||
M | 1000 |
Число | Тысячи | Сотни | Десятки | Единицы |
---|---|---|---|---|
1 | M | C | X | I |
2 | MM td> | CC | XX | II |
3 | МММ | < td>CCCXXX | III | |
4 | CD | XL | IV | |
5 | D | L | V | |
6 | DC | LX | VI | |
7 | DCC | LXX | VII | |
8 | DCCC td> | LXXX | VIII | |
9 | CM | XC | < td>IX
Пример 1: преобразовать 2300 в римскую цифру.
Шаг 1. Разбейте число 2384 на тысячи, сотни, десятки и единицы;
2384 = 2000 + 300
Шаг 2. Используя приведенную выше таблицу, проверьте римские цифры для каждого числа;
Шаг 3. Соедините все римские цифры вместе.
2300 = 2000 + 300 = ММ + CCC = ММССС
Результаты: 2300 — это MMCCC, если записать римскими цифрами.
Пример 2: преобразовать 2384 в римскую цифру.
Шаг 1. Разбейте число 2384 на тысячи, сотни, десятки и единицы;
2384 = 2000 + 300 + 80 + 4
Шаг 2. Используя приведенную выше таблицу, проверьте римские цифры для каждого числа;
- 2000 = млн.
- 300 = ССС
- 80 = LXXX
- 4 = IV
Шаг 3. Соедините все римские цифры вместе.
2384 = 2000 + 300 + 80 + 4 = ММ + CCC + LXXX + IV = MMCCCLXXXIV
Результаты: 2384 – это MMCCCLXXXIV при записи римскими цифрами.
Читайте также:
- Список сертифицированных поставщиков, что это за драйвер
- Не удалось загрузить требуемую гиперссылку слова данных
- Аомей, что это за программа
- Для установки графического драйвера Intel требуется Microsoft Net Framework
- Программное обеспечение для отслеживания телефона с компьютером