Метод 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 |
Результат работы кода:
