Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Пакет Microsoft Office

  Все выпуски  

RFpro.ru: Пакет Microsoft Office


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

F®ost
Статус: Советник
Рейтинг: 6645
∙ повысить рейтинг »
Black Cloud
Статус: Бакалавр
Рейтинг: 3320
∙ повысить рейтинг »
ValeryN
Статус: Мастер-Эксперт
Рейтинг: 2400
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Помощь пользователю ПО / Пакет Microsoft Office

Номер выпуска:866
Дата выхода:25.01.2010, 15:30
Администратор рассылки:Ерёмин А.А., Мастер-Эксперт
Подписчиков / экспертов:555 / 371
Вопросов / ответов:1 / 1

Вопрос № 176158: Здравствуйте уважаемые эксперты помогите пожалуйста с задачкой по Экселю, очень нужно Разработать модуль для перевода числа из десятичной системы счисления в систему счисления с основанием p (2<=p<=16) и наоборот Число в десятичной систе...



Вопрос № 176158:

Здравствуйте уважаемые эксперты помогите пожалуйста с задачкой по Экселю, очень нужно
Разработать модуль для перевода числа из десятичной системы счисления в систему счисления с основанием p (2<=p<=16) и наоборот
Число в десятичной системе счисления должно храниться в виде числа, в системи счисления p в виде строки
При переводе числа из системы счисления p проверять корректность ввода данных
Пример такого перевода:

На рабочем листе разместить две кнопки для вызова модулей

Отправлен: 20.01.2010, 20:16
Вопрос задал: Верещака Андрей Павлович, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Megaloman, Бакалавр :
Здравствуйте, Верещака Андрей Павлович. Вот решение. Запустим Excel. Сервис-Макрос - Редактор Visual Basic - Insert - Module
Вставим приведенные ниже функции.
Закроем редактор VBA
Код:
Function DecToP(inNum As Long, inOsnova As Integer)
' Функция перевода десятиричного целого числа в число по другому основанию (2<=P<=16)
' inNum - исходное целое десятиричное число
' inOsnova - основание, в котором преобразуем число
' Функция вернёт строку с числом в новой системе, при некорректных данных строку #Аргументы!

If 2 <= inOsnova And inOsnova <= 16 Then
T = "0123456789ABCDEF" ' Cимволы для записи числа

sss = ""
iii = Abs(inNum)

Do
j = iii Mod inOsnova
iii = Int(iii / inOsnova)
sss = Mid(T, j + 1, 1) + sss
Loop While iii <> 0
If inNum < 0 Then sss = "-" + sss

DecToP = sss
Else
DecToP = "#Аргументы!"
End If

End Function

Function PToDec(inString, inOsnova As Integer)
' Функция перевода целого числа по произвольному основанию (2<=P<=16) в десятиричное
' inString- исходная строка по указанному основанию
' inOsnova - основание, из которого преобразуем число в десятиричное
' Функция вернёт число в десятиричной системе, при некорректных данных строку #Аргументы!

PToDec = "#Аргументы!"

If 2 <= inOsnova And inOsnova <= 16 Then
T = "0123456789ABCDEF" ' Cимволы для записи числа

sss = 0
iii = Trim(inString)
Znak = Mid(iii, 1, 1)
LString = Len(iii)

If Znak = "-" Or Z nak = "+" Then
LString = LString - 1
iii = Mid(iii, 2, LString)
End If

iii = UCase(iii)

jjj = 1
If LString > 0 Then
For j = LString To 1 Step -1
kkk = Mid(iii, j, 1)
nnn = InStr(1, T, kkk)
If 1 <= nnn And nnn <= inOsnova Then
sss = sss + jjj * (nnn - 1)
jjj = jjj * inOsnova
Else
Return
End If
Next
If Znak = "-" Then sss = -sss
PToDec = sss
End If
End If

End Function
Делаем Вашу таблицу

В Вашем примере можно обойтись и без кнопок.
В клетке B3 можно написать формулу с функцией =DecToP(B1;B2)
В клетке B7 можно написать формулу с функцией =PToDec(B5;B6)

Получите результат сразу же, без нажатия каких-либо кнопок. Этот пример я разместил на Лист1

Но, чт обы работали кнопки (этот пример я разместил на Лист2
На строке меню Excel нажмём правую кнопку мыши и в ниспадающем меню выберем Элементы управления
Активизируем Режим конструктора, активируем элемент Кнопка, рисуем кнопку в нужном месте
щелкнем по получившемуся дважды,
В открывшемся окне в дополнение к имеющемуся напишем одну строку, чтобы получилось
Код:
Private Sub CommandButton1_Click()
Range("B3") = DecToP(Range("B1"), Range("B2"))
End Sub
Слева внизу в строке где Caption напишем Перевести,
в строке Font подберём шрифт
Убираем активацию режима конструктора, закроем панель конструктора
Проверим работу кнопки.

Аналогично со второй кнопкой
Получится
Код:
Private Sub CommandButton1_Click()
Range("B3") = DecToP(Range("B1"), Range("B2"))
End Sub

Private Sub CommandButton2_Click()
Range("B7") = PToDec(Range("B5"), Range("B6"))
End Sub

Всё!
Скачать пример можно здесь. Preobrazovanie_chisel.xls (36.0 кб)
Статья о переводе чисел из одной системы в другую.
-----
Нет времени на медленные танцы

Ответ отправил: Megaloman, Бакалавр
Ответ отправлен: 21.01.2010, 02:00

Оценка ответа: 5
Комментарий к оценке:
Очень подробный, полный и понятный ответ, очень сильно мне помог.
Спасибо огромное автору ответа Megaloman
И вашему порталу в целом, за возможмость повышать свои знания.

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258783 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 23.01.2010

    В избранное