Страницы: 1
RSS
UDF Функция перевода чисел между разными системами исчисления
 
Доброго здоровья!
Нужна UDF функция перевода чисел между основными (2 8 10 16) системами исчисления. Функция с 3 аргументами (Исходное число, разрядность исходного числа, разрядность результата). Наверняка такая давно написана, но здесь я нашел только 2 функции перевод из любой разрядности в десятичную и наоборот. Может плохо искал. Ведь непорядок, мне иногда проще и быстрее воспользоваться калькулятором на телефоне (там есть такая возможность) чем Excel.
Заранее благодарен за помощь
 
Может ТУТ
 
Msi2102 Не то, что надо. Там перевод из любой в десятичную для длинных чисел. Вчера её смотрел. Спасибо
Изменено: Евгений Смирнов - 21.01.2022 09:22:58
 
Может тут
Пользовательская функция для перевода из различных систем счисления (planetaexcel.ru)
 
МатросНаЗебре Да это похоже. Надо только её потестить. Спасибо
 
Евгений Смирнов, здравствуйте
Перевод чисел из разных систем счисления с помощью MS Excel — может этот набор штатных функций устроит?
Изменено: Jack Famous - 21.01.2022 09:38:02
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous здравствуйте. Нет этот набор я знаю. Пока самое подходящее от МатросНаЗебре
 
Евгений Смирнов, а чем не подходит? Сделайте пример
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous Писать каждый раз вложенные функции не хочется. И в старом экселе 2002 нет таких функций. Поэтому удобнее UDF.
 
Цитата
Евгений Смирнов: в старом экселе 2002 нет таких функций
ого  8-0 Ну так вам большинство функций переписывать тогда
Изменено: Jack Famous - 21.01.2022 10:26:38
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Решение макросом.

Решение Надстройка
«Бритва Оккама» или «Принцип Калашникова»?
 
10 в H и O  это вроде штатные Hex и Oct
16 и 8 в 10  CLNG("&H" &  <hex>)   и CLNG("&O" &  <oct>)
16 в 8  oct("&H" &  <oct>)
8 в 16  hex("&O" &  <oct>
ну и далее с разрядностью все не сложно добавили нули спереди и обрезали с заду. разрядностью основание обозвано, что меня запутало.
Изменено: БМВ - 21.01.2022 20:01:18
По вопросам из тем форума, личку не читаю.
 
bedvit Спасибо что ткнули носом. Я заходил в эту тему позавчера скачал файл от MCH посмотрел там для меня ничего нет, а вашу UDF не увидел. Вчера немного потестил. Вообщем это лучший вариант Благодарствую.

БМВ Здравствуйте В принципе я знал про Hex и Oct и предполагал, что с этими функциями можно работать (8 10 16) ричными системами, но с двоичной не знаю как. Для нового Excel вообще можно легко свою UDF сделать с использованием WorksheetFunction, но с WorksheetFunction Hex и Oct ограничение по кол-ву знаков раньше наступает чем в UDF от bedvit.

Вывод: Пока лучший вариант от bedvit. Спасибо всем кто откликнулся.
 
Код
' из 10-ричной системы в x/з какую (от 2 до 36)
Function D2xz$(d, N)
  Const ch$ = "0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  Dim r%, D2C
  r = Int(Round(Log(d) / Log(N), 7)): D2C = Split(ch)
  Do
    D2xz = D2xz & D2C(Int(d / N ^ r)): d = d - Int(d / N ^ r) * N ^ r: r = r - 1
  Loop Until r = -1
End Function
' и обратно
Function xz2D(s As String, N)
  Const ch$ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  Dim r%
  For r = 0 To Len(s) - 1
    xz2D = xz2D + (InStr(ch, Mid(s, Len(s) - r, 1)) - 1) * N ^ r
  Next
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Если вам интересна эта темы или не хватает количества знаков выводимых в найденных решений, или необходимы быстрые решения, то можно посмотреть след. темы (я с них начинал писать свои библиотеки, они стали стартом для всех остальных разработок, спасибо MCH, который предложил интересные решения и завлек в тему. Хм, посмотрел темы...6 лет почти прошло)
Дебют,
Миттельшпиль
Э́ндшпиль.
Максимальная прокачка.

И как итог Блок работы с длинной арифметикой в библиотеки/надстройке для Excel

Там же и быстрейшая из всех решений для Excel функция ConvertBaseInteger() - конвертирование целого числа (строки) из одной базы в другую (от 2 до 36). С ограничением на количество знаков налагаемым самим Excel для ячейки (32 тыс.). И неограниченнок для VBA (считал число Пи до 1.5 млр. знаков)
Изменено: bedvit - 22.01.2022 12:29:02
«Бритва Оккама» или «Принцип Калашникова»?
 
Только сейчас заметил, что Msi2102 ранее давал ссылку на длинную арифметику.
Цитата
Евгений Смирнов написал:
Msi2102 Не то, что надо. Там перевод из любой в десятичную для длинных чисел.
Для "коротких" тоже работает)
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit Я днем не разобрался второпях, что Msi2102 дал правильную ссылку. Понял это только вечером после вашего сообщения спокойно перечитав тему. Я не профи и за компом весь день не сижу, у меня другая работа. Только вечерком могу спокойно все перечитать. Поэтому прошу не обижаться на меня за то, что днем могу где-то накосячить. Исходя из выше изложенного спасибо за ссылки в сообщении №15, но наверно в данный момент они не понадобятся. Функция работает хорошо вчера ей пользовался.

Ігор Гончаренко Ваши функции ещё весной скачал, их и имел ввиду в сообщении №1. Но мне удобнее функция с 3 аргументами. Причем два последних можно сделать необязательными со значением по умолчанию  10, как в функции от МатросНаЗебре.

Вчера попробовал функцию рабочего листа ДЕС.В.ДВ Excel 2010 и не понял зачем разработчики засоряют список функций максимальное значение 511 в десятичной системе (Только для школьников в учебных целях)
Страницы: 1
Наверх