Опубликован: 25.03.2009 | Уровень: для всех | Доступ: свободно | ВУЗ: Институт управления, бизнеса и права
Лекция 17:

Практика MS Excel

17.2. Задача об обмене значениями

17-02-Обмен значений.xlsm - пример к п. 17.2.

17.2.1. Условие

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

17.2.2. Решение

Предположим, что имеются 2 переменные (А и В), содержащие числа. Для обмена значениями этих переменных достаточно произвести следующие действия:

  1. Сложить А и В и результат записать в А
  2. Вычесть из А переменную В и записать результат в В.
  3. Вычесть из А переменную В и записать результат в А.

Для решения задачи будем считать, что число A записано в ячейку B2, число В - в ячейку C2. Подпишем соответствующим образом эти ячейки и разместим на рабочем листе кнопку с именем cmd_Change и надписью Обменять А и В (рис. 17.6.)

Рабочий лист, подготовленный для решения задачи

Рис. 17.6. Рабочий лист, подготовленный для решения задачи

В листинге 17.6. вы можете найти программный код для решения задачи, размещенный в обработчике события Click для кнопки cmd_Change

'Сохраняем сумму ячеек в B2
    ActiveSheet.Range("B2") = _
        ActiveSheet.Range("B2") + _
        ActiveSheet.Range("C2")
    'Разность сохраняем в С2
    ActiveSheet.Range("C2") = _
        ActiveSheet.Range("B2") - _
        ActiveSheet.Range("C2")
    'И еще раз разность в B2
    ActiveSheet.Range("B2") = _
        ActiveSheet.Range("B2") - _
        ActiveSheet.Range("C2")
Листинг 17.6. Решение задачи

17.3. Перевод чисел из одной системы счисления в другую

17-03-Системы счисления.xlsm - пример к п. 17.3.

17.3.1. Условие

Перевести заданное пользователем целое число A из одной системы счисления ( P ) в другую ( Q ). P и Q могут изменяться от 2 до 10.

17.3.2. Решение

MS Excel содержит функции для преобразования чисел между различными системами счисления, однако здесь мы создадим универсальное решение. Вы сможете встроить этот код в свои проекты. При необходимости вы сможете доработать его так, чтобы он смог работать с системами счисления, основание которых превышает 10.

В данном случае наиболее очевидным является перевод введенного числа сначала из системы счисления с основанием P в систему с основанием 10, а потом уже из системы с основанием 10 в систему с основанием Q.

Перевод в десятичную систему счисления осуществляется в два этапа:

  1. Разбиение введенного числа на отдельные цифры
  2. Получение десятичного числа по следующему алгоритму:

Первую цифру числа в системе счисления с основанием Q нужно умножить на Q в нулевой степени. Полученное число прибавить к произведению второй цифры числа, умноженную на Q в 1-й степени и так далее. Например:

Перевод из двоичной системы в десятичную:

1101 =1*2^3+1*2^2+0*2^1+1*2^0=8+4+0+1=13

Перевод из пятеричной системы в десятичную:

1042=1*5^3+0*5^2+4*5^1+2*5^0=125+0+20+2=147

Перевод в систему счисления с основанием Q из системы с основанием 10 осуществляется путем накапливания остатков от деления этого числа на Q с последующим изменением этого числа целочисленным делением его на Q до тех пор, пока переводимое число не станет равным 0.

Для решения этой задачи нам понадобится форма, содержащая следующие элементы управления (табл. 17.6.). У текстовых полей свойство AutoSize установлено в True.

Таблица 17.6. Элементы управления
Имя элемента управления Подпись и примечания
cmd_OK Перевести. Кнопка для перевода чисел
txt_P Из системы P. Текстовое поле для хранения основания системы счисления P.
txt_Q В систему Q. Поле для хранения основания системы счисления Q
txt_A Число для перевода. Число, заданное для перевода из системы P в Q
txt_B Результат. Текстовое поле для вывода результата перевода

На рис. 17.7. вы можете увидеть форму программы.

Форма программы для перевода чисел из одной системы счисления в другую

Рис. 17.7. Форма программы для перевода чисел из одной системы счисления в другую

В листинге 17.7. вы можете найти код события Click для кнопки cmd_OK.

'Для хранения основания системы P
    Dim num_P
    'Для хранения основания системы Q
    Dim num_Q
    'Для хранения числа в 10-й системе
    Dim num_10
    'Для хранения очередного числа в
    'системе счисления Q
    Dim num_S
    num_P = Val(txt_P)
    num_Q = Val(txt_Q)
    'Переводим введенное число из
    'системы счисления P
    'в десятичную систему
    For i = 1 To Len(txt_A)
        num_10 = num_10 + Val(Mid(txt_A, i, 1)) * _
            num_P ^ (Len(txt_A) - i)
    Next i
    'Переводим число из десятичной системы
    'в систему с основанием Q
    txt_B = ""
    While num_10 <> 0
        'Остаток от деления запишем в str_S
        num_S = num_10 Mod num_Q
        'Запишем очередное число в
        'окно для вывода результата
        txt_B = Mid(Str(num_S), 2, 1) + txt_B
        'Запишем в num_10 результат
        'целочисленного деления
        'num_10 на основание системы
        'счисления Q
        num_10 = num_10 \ num_Q
    Wend
Листинг 17.7. Решение задачи

17.4. Выводы

В этой лекции мы рассмотрели несколько практических примеров решения задач для MS Excel.

Евгений Ушаков
Евгений Ушаков

Добрый день! Поясните, пожалуйста, 3000 р. стоит документ об окончании курса. Если он не нужен, то можно учиться бесплатно?

Александр Новиков
Александр Новиков

Добрый день! Очень нужен справочник по объектам VBA c описание их методов и свойств.

Кто-нибудь знает, где можно приобрести?

(Он конечно есть в VBA - Object browser, но не очень удобный)