Метод WorksheetFunction.Convert — аналог функции ПРЕОБР — в VBA Excel преобразует число с одной единицей измерения в число с другой единицей измерения.
Метод WorksheetFunction.Convert
При попытке преобразовать неоднородные единицы измерения, например, граммы в метры, будет сгенерирована ошибка.
Синтаксис
Синтаксис метода WorksheetFunction.Convert в VBA Excel:
1 |
WorksheetFunction.Convert(Arg1, Arg2, Arg3) |
Параметры
Параметры метода WorksheetFunction.Convert:
Параметр | Значение |
---|---|
Arg1 | Числовое значение для преобразования |
Arg2 | Исходная единица измерения |
Arg3 | Единица измерения для результата |
Все параметры являются обязательными, тип данных — Variant. Если код единицы измерения добавляется в выражение не через переменную, а «как есть», он заключается в прямые кавычки.
Коды единиц измерения
Коды наиболее распространенных единиц измерения, используемых в качестве аргументов метода WorksheetFunction.Convert. В скобках указаны альтернативные коды.
Масса
Ед. измерения | Код |
---|---|
Грамм | g |
Тонна | ton |
Унция | ozm |
Фунт | lbm |
Расстояние
Ед. измерения | Код |
---|---|
Дюйм | in |
Метр | m |
Миля | mi |
Морская миля | Nmi |
Фут | ft |
Ярд | yd |
Время
Ед. измерения | Код |
---|---|
Год | yr |
День | day (d) |
Час | hr |
Минута | mn (min) |
Секунда | sec (s) |
Температура
Ед. измерения | Код |
---|---|
Градус Кельвина | K (kel) |
Градус Фаренгейта | F (fah) |
Градус Цельсия | C (cel) |
Объем
Ед. измерения | Код |
---|---|
Чайная ложка | tsp |
Столовая ложка | tbs |
Чашка | cup |
Литр | l (lt) |
Кубический метр | m3 (m^3) |
Галлон | gal |
Площадь
Ед. измерения | Код |
---|---|
Ар | ar |
Гектар | ha |
Квадратный метр | m2 (m^2) |
Скорость
Ед. измерения | Код |
---|---|
Метр в час | m/h (m/hr) |
Метр в секунду | m/s (m/sec) |
Миля в час | mph |
Узел | kn |
Префиксы
Префиксы используются перед базовой единицей измерения для ее увеличения или уменьшения в соответствии с указанным множителем.
Префикс | Множитель | Обозначение |
---|---|---|
тера | 1012 | T |
гига | 109 | G |
мега | 1106 | M |
кило | 103 | k |
гекто | 102 | h |
дека | 101 | da (e) |
деци | 10-1 | d |
санти | 10-2 | c |
милли | 10-3 | m |
микро | 10-6 | u |
нано | 10-9 | n |
пико | 10-12 | p |
Примеры
Однострочные преобразования
Однострочные примеры преобразования числовых значений из одних единиц измерения в другие:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Primer1() 'Вычисляем, сколько километров в 1 миле MsgBox "В 1 миле " & WorksheetFunction.Convert(1, "mi", "km") & " км" 'Вычисляем, сколько километров в 1 морской миле MsgBox "В 1 морской миле " & WorksheetFunction.Convert(1, "Nmi", "km") & " км" 'Вычисляем, сколько литров в 1 галлоне MsgBox "В 1 галлоне " & WorksheetFunction.Convert(1, "gal", "l") & " литров" 'Вычисляем, сколько секунд в 1 году MsgBox "В 1 году " & WorksheetFunction.Convert(1, "yr", "sec") & " секунд" 'Вычисляем, сколько кв. метров в 10 гектарах MsgBox "В 10 гектарах " & WorksheetFunction.Convert(10, "ha", "m2") & " кв. метров" End Sub |
Конвертер температур
Продемонстрируем преобразование единиц измерения на примере простого конвертера температур в пользовательской форме:
В поле со списком ComboBox1 выбираем исходную единицу измерения температуры, в текстовое поле TextBox2 вводим числовое значение температуры в исходных единицах, в поле со списком ComboBox2 выбираем конечную единицу измерения. Конвертер запускается нажатием кнопки CommandButton1, рассчитанное значение в новых единицах измерения записывается в заголовок метки Label5.
Код инициализации пользовательской формы при открытии:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Private Sub UserForm_Initialize() With ComboBox1 'Заполняем список поля ComboBox1 единицами измерения температуры .List = Array("Градусы Цельсия", "Градусы Фаренгейта", "Градусы Кельвина") 'Отображаем в поле, как значение по умолчанию, элемент списка с индексом 0 .ListIndex = 0 'Запрещаем ввод текста в поле, кроме значений из списка .MatchRequired = True End With With ComboBox2 'Заполняем список поля ComboBox2 единицами измерения температуры .List = Array("Градусы Цельсия", "Градусы Фаренгейта", "Градусы Кельвина") 'Отображаем в поле, как значение по умолчанию, элемент списка с индексом 1 .ListIndex = 1 'Запрещаем ввод текста в поле, кроме значений из списка .MatchRequired = True End With 'Вводим значения по умолчанию для других элементов управления TextBox2.Text = "0" Label5.Caption = "0" CommandButton1.Caption = "Преобразовать" End Sub |
Код VBA Excel при нажатии кнопки CommandButton1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Private Sub CommandButton1_Click() Dim combo1, combo2, n n = TextBox2.Text 'Присваиваем переменной combo1 значение кода единицы измерения, выбранной в ComboBox1 Select Case ComboBox1.Value Case "Градусы Цельсия" combo1 = "C" Case "Градусы Фаренгейта" combo1 = "F" Case "Градусы Кельвина" combo1 = "K" End Select 'Присваиваем переменной combo2 значение кода единицы измерения, выбранной в ComboBox2 Select Case ComboBox2.Value Case "Градусы Цельсия" combo2 = "C" Case "Градусы Фаренгейта" combo2 = "F" Case "Градусы Кельвина" combo2 = "K" End Select 'Конвертируем значение температуры в новые единицы измерения и отображаем его в заголовке Label5 Label5.Caption = WorksheetFunction.Convert(Val(n), combo1, combo2) End Sub |
Результат работы кода: