Страницы: 1
RSS
перевод римских цифр в арабские
 
Добрый день!  
помогите, пожалуйста с проблемой. Необходимо перевести римские цифры в арабские с помощью формул. Для перевода арабских цифр в римские есть формула, а вот наоборот как сделать?  
 
Спасибо
 
А наоборот UDF - завязана на формулу наоборот :)  
 
Function Roman2Arab(S As String)  
Dim i As Long  
For i = 1 To 10000  
If CStr(Application.Roman(i, 1)) = S Then Exit For  
Next  
Roman2Arab = i  
End Function  
 
Неидеальна, но уж как смог...
 
Доброе утро планета : )  
 
Hugo, если я не ошибаюсь, не все так просто  
 
Пример: 46 - XLVI  
 
http://ru.wikipedia.org/wiki/%D0%A0%D0%B8%D0%BC%D1%81%D0%BA%D0%B8%D0%B5_%D1%86%D­0%B8%D1%84%D1%80%D1%8B
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
=ПРОСМОТР(4000;1/(D3=РИМСКОЕ(СТРОКА($1:$3999)));СТРОКА($1:$3999))
 
Да-а. Никто не пытается римское число по буквам разобрать :)  
 
Может, в Избушку такую задачу? ;)
 
Ч/З RTF или копистом истории конвертации...  
http://www.tvalx.com/Russian/products/RomanArabicNumeralsConverter/RomanArabi­cNumeralsConverter.html  
-51165-
 
{quote}{login=MCH}{date=08.09.2011 09:25}{thema=}{post}=ПРОСМОТР(4000;1/(D3=РИМСКОЕ(СТРОКА($1:$3999)));СТРОКА($1:$3999)){/post}{/quote}  
 
 
Спасибо огромное!!!
 
{quote}{login=Казанский}{date=08.09.2011 09:36}{thema=}{post}Да-а. Никто не пытается римское число по буквам разобрать :)  
 
Щас я попробую :D
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Странно, я ту UDF давно написал, правда сам не пользовался...  
Почему там было Application.Roman(i, 1) - не помню.  
Но 46 правильно обрабатывает такой вариант:  
 
Function Roman2Arab(S As String)  
Dim i As Long  
For i = 1 To 10000  
If CStr(Application.Roman(i)) = S Then Exit For  
Next  
Roman2Arab = i  
End Function
 
{quote}{login=MCH}{date=08.09.2011 09:25}{thema=}{post}=ПРОСМОТР(4000;1/(D3=РИМСКОЕ(СТРОКА($1:$3999)));СТРОКА($1:$3999)){/post}{/quote}  
Просто и со вкусом!
 
Перевёл:  
 
=LOOKUP(4000;1/(D3=ROMAN(ROW($1:$3999)));ROW($1:$3999))  
 
В моей UDF оказывается нет смысла дальше 4000 цикл гнать...  
Можно заменить на  
For i = 1 To 4000
 
Доделал, пусть уж будет :)  
 
Function Roman2Arab(S As String)  
Dim i As Long  
For i = 1 To 4000  
If CStr(Application.Roman(i)) = S Then Exit For  
Next  
If i <> 4001 Then Roman2Arab = i Else Roman2Arab = ""  
End Function
 
{quote}{login=MCH}{date=08.09.2011 09:25}{thema=}{post}=ПРОСМОТР(4000;1/(D3=РИМСКОЕ(СТРОКА($1:$3999)));СТРОКА($1:$3999)){/post}{/quote}  
"4000" - излишне, достаточно "2":  
=ПРОСМОТР(2;1/(D3=РИМСКОЕ(СТРОКА($1:$3999)));СТРОКА($1:$3999))  
 
или формула массива (вводится нажатием ctrl+shift+enter):  
=ПОИСКПОЗ(D3;РИМСКОЕ(СТРОКА($1:$3999));)
 
Без привязки к функции Excel =РИМСКОЕ(), у меня получилось так : )  
 
=76757=
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1
Читают тему
Наверх