Страницы: 1
RSS
Проблема с системой счисления. Нет подходящей встроенной функции
 
Приветствую!

Есть семейство встроенных функций типа дв.в.дес и пр., которые связывают между собой 2, 8, 10 и 16ную СС.
Также есть функция "Основание", которая переводит заданное число из 10ной СС в заданную СС. Но вроде ТОЛЬКО из 10ной.

А как перевод сделать средствами Excel из 7ной СС в 10ную, например?? Например, число 501(7) ---> X(10).
Еще есть такое ограничение: использовать встроенные функции Excel.


Подскажите, как такое реализовать можно? (без макросов, конечно)
 
Скачать надстройку.
Или здесь на форуме поискать. Писал функцию. Но это уже макросы.
Вот нашел.
Изменено: bedvit - 03.03.2021 14:31:23
«Бритва Оккама» или «Принцип Калашникова»?
 
Код
Function xz2D(s As String, N As Long)
  Dim r%
  For r = 0 To Len(s) - 1
    xz2D = xz2D + (InStr("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Mid(s, Len(s) - r, 1)) - 1) * N ^ r
  Next
End Function

501(7) = 246(10)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
bedvit написал:
Но это уже макросы.
спс, но через макросы неинтересно

p.s. ИМХО, просто, вбивая в ячейку какие-то встроенные функции Excel (стандартные) такой перевод (который мне нужен и обозначен в 1ом посте) реализовать невозможно. Только через макросы. Возможно, что я ошибаюсь.
 
Ігор Гончаренко,спс, но это уже VBA пошел. но через макросы неинтересно
А вот просто бы через встроенные по умолчанию стандартные функции такое реализовать) Но, как написал выше, ИМХО, такое невозможно
 
Иванов Иван, в стандартных только целые числа можно. А с макросом любые.....
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=87495&am...
 
в А2 501
в В2 7
в любую ячейку эту формулу
Код
=СУММПРОИЗВ(ПСТР(A2;СТРОКА(A1:ИНДЕКС(A:A;ДЛСТР(A2)));1)*B2^(ДЛСТР(A2)-СТРОКА(A1:ИНДЕКС(A:A;ДЛСТР(A2)))))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Marat Ta, ничего я не понял

Давайте я предельно упрощу, максимально.
В ячейке А1 стоит число 125. Пусть оно записано в 7ной СС.
В ячейку B1 надо его записать в 10ной СС.

Что нужно прописать в B1?? "=????"
и мне ничего больше не нужно, никаких ссылок и пр. Все остальное я пойму по этому единственному примеру.
никакого vba, макросов и пр., а только встроенными функциями (уже раз 10ый об этом пишу). Но, ИМХО, это невозможно, как я понимаю уже.
спс
 
Цитата
Иванов Иван написал:
Но, ИМХО, это невозможно, как я понимаю уже
рано впадать в отчаяние. см #7
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Иванов Иван написал:
Но, ИМХО, это невозможно
Это возможно.
Кратко алгоритм такой.
Находите наибольшую степень, которая "помещается" в число.
Делите входное число на основание в наибольшей степени.
Это будет значение для одного разряда.
Остаток используете в следующих итерациях.
И так до первого разряда.
Изменено: МатросНаЗебре - 03.03.2021 15:08:50
 
Цитата
Ігор Гончаренко написал:
рано впадать в отчаяние. см #7
да, круто! все работает ) (ну. кроме обработки ошибок, нет, плз, не надо делать обработку ошибок)
какая жесть, у меня не было никаких шансов даже на 10% написать нечто подобное.

снимаю шляпу, спс

p.s. не заметил ваше сообщение до этого
-------------------------------------------------------------------------------
Единственное, что ваш вариант не учитывает, как я понимаю, это латинские буквы в СС > 10, например 10B9C(14) ---> X(10) расчет даст ошибку. Это печально + как я понимаю, чтобы это учесть придется фундаментально перекраивать всю формулу.
 
с той формулой в В2 можете писать числа от 2 до 10 (включительно)
и за соответствием числа записанного в А2 заявенной системе счисления следите самостоятельно и внимательно)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
следите самостоятельно и внимательно
или чуть усложните формулу Игоря:

Код
=СУММПРОИЗВ((ПОИСК(ПСТР(A2;СТРОКА(A1:ИНДЕКС(A:A;ДЛСТР(A2)));1); ЛЕВСИМВ("01234567890ABCDEF";B2))-1)*B2^(ДЛСТР(A2)-СТРОКА(A1:ИНДЕКС(A:A;ДЛСТР(A2)))))

При вводе неверных "цифр" будет выдаваться ошибочное значение. Значение B2 может быть от 2 до 16. Для увеличения максимального основания системы счисления продлите последовательность заглавных латинских букв.
Владимир
 
Для будущих читателей темы осталось добавить, что, начиная с версии 2013, уже есть подходящая встроенная функция BASE (ОСНОВАНИЕ).
Владимир
 
sokol92, ТС про неё писал в начале, но его не устравивало, что она переводит только из 10ричной в любую другую, а хотелось ему обратного.
Вот горшок пустой, он предмет простой...
 
Да, точно, спасибо!
Владимир
Страницы: 1
Наверх