Руководство по возведению в степень и извлечению корней с помощью VBA Excel. Использование оператора ^, функций Power, Sqr и собственного алгоритма.
Возведение в степень в VBA Excel
Базовые операторы и функции VBA для работы со степенями.
Оператор ^ (каретка)
Оператор ^ (каретка) — основной способ возведения в степень. Если возводится в степень отрицательное число, его следует заключить в круглые скобки. Каретка должна быть отделена от чисел пробелами. Если пробелы не вставить, то правильно возвести число в степень можно с помощью метода Application.Evaluate (в примере использованы квадратные скобки). Если используется метод Application.Evaluate, круглые скобки для возводимого в степень отрицательного числа не нужны.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Sub Primer1() Dim result As Double 'Возведение в положительную степень result = 5 ^ 3 Debug.Print "5 ^ 3 = " & result ' Результат: 125 result = (-2) ^ 10 Debug.Print "(-2) ^ 10 = " & result ' Результат: 1024 result = [-2^11] Debug.Print "[-2^11] = " & result ' Результат: -2048 'Возведение в отрицательную степень result = 20 ^ -2 Debug.Print "20 ^ -2 = " & result ' Результат: 0,0025 result = (-20) ^ -2 Debug.Print "(-20) ^ -2 = " & result ' Результат: 0,0025 result = [-20^-3] Debug.Print "[-20^-3] = " & result ' Результат: -0,000125 'Наличие и отсутствие круглых скобок у отрицательного числа, 'возводимого в степень result = (-3) ^ 2 Debug.Print "(-3) ^ 2 = " & result ' Результат: 9 (верно) result = -3 ^ 2 Debug.Print "-3 ^ 2 = " & result ' Результат: -9 (ошибка) result = [-3^2] Debug.Print "[-3^2] = " & result ' Результат: 9 (верно) End Sub |
Функция WorksheetFunction.Power
Функция WorksheetFunction.Power — аналог функции Excel, работает аналогично оператору ^ (каретка).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub Primer2() Dim result As Double 'Возведение в положительную степень result = WorksheetFunction.Power(5, 3) Debug.Print "5 ^ 3 = " & result ' Результат: 125 result = WorksheetFunction.Power(-2, 10) Debug.Print "(-2) ^ 10 = " & result ' Результат: 1024 result = WorksheetFunction.Power(-2, 11) Debug.Print "(-2) ^ 11 = " & result ' Результат: -2048 'Возведение в отрицательную степень result = WorksheetFunction.Power(20, -2) Debug.Print "20 ^ -2 = " & result ' Результат: 0,0025 result = WorksheetFunction.Power(-20, -2) Debug.Print "(-20) ^ -2 = " & result ' Результат: 0,0025 result = WorksheetFunction.Power(-20, -3) Debug.Print "(-20) ^ -3 = " & result ' Результат: -0,000125 End Sub |
Извлечение корней в VBA Excel
Квадратный корень: функция Sqr
VBA Excel предоставляет встроенную функцию Sqr() для извлечения квадратного корня.
|
1 2 3 4 5 6 7 8 9 10 11 |
Sub Primer3() Dim result As Double 'Извлечение квадратного корня result = Sqr(25) Debug.Print "Sqr(25) = " & result ' Результат: 5 result = Sqr(625) Debug.Print "Sqr(625) = " & result ' Результат: 25 result = Sqr(1 / 9) Debug.Print "Sqr(1/9) = " & result ' Результат: 0,333333333333333 End Sub |
Корни n-ной степени через дробные показатели
Для извлечения корней n-ной степени через дробные показатели используется оператор ^ (каретка) или функция WorksheetFunction.Power.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Sub Primer4() Dim result As Double 'Извлечение корня n-ной степени с помощью оператора ^ (каретка) 'Извлечение квадратного корня result = 64 ^ (1 / 2) Debug.Print "64 ^ (1 / 2) = " & result ' Результат: 8 'Извлечение кубического корня result = 64 ^ (1 / 3) Debug.Print "64 ^ (1 / 3) = " & result ' Результат: 4 'Извлечение корня 4-ой степени result = 256 ^ (1 / 4) Debug.Print "256 ^ (1 / 4) = " & result ' Результат: 4 'Извлечение корня n-ной степени с помощью WorksheetFunction.Power 'Извлечение квадратного корня result = WorksheetFunction.Power(625, 1 / 2) Debug.Print "Power(625, 1 / 2) = " & result ' Результат: 25 'Извлечение кубического корня result = WorksheetFunction.Power(27, 1 / 3) Debug.Print "Power(27, 1 / 3) = " & result ' Результат: 3 'Извлечение корня 4-ой степени result = WorksheetFunction.Power(625, 1 / 4) Debug.Print "Power(625, 1 / 4) = " & result ' Результат: 5 End Sub |
Функция для безопасного извлечения корней
Пример универсальной функции для безопасного извлечения корней с обработкой ошибок. Явно обрабатываются две ошибки: получение степени делением на ноль и извлечение корня чётной степени из отрицательного числа.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Function SafeNthRoot(ByVal number As Double, ByVal n As Double) As Variant ' Функция для извлечения корня n-ной степени ' Возвращает результат или сообщение об ошибке On Error GoTo ErrorHandler ' Проверка для корней чётной степени If (n Mod 2 = 0) And (number < 0) Then SafeNthRoot = "Ошибка: нельзя извлечь корень чётной степени из отрицательного числа" Exit Function End If ' Проверка деления на ноль If n = 0 Then SafeNthRoot = "Ошибка: степень корня не может быть получена делением на ноль" Exit Function End If SafeNthRoot = WorksheetFunction.Power(number, 1 / n) Exit Function ErrorHandler: SafeNthRoot = "Ошибка вычисления: " & Err.Description End Function |
Стоит заметить, что в этой функции строку
|
1 |
SafeNthRoot = WorksheetFunction.Power(number, 1 / n) |
нельзя заменить на строку
|
1 |
SafeNthRoot = number ^ (1 / n) |
так как последняя строка почему-то не работает с отрицательными числами: извлечение корня (-27) ^ (1 / 3) вызывает ошибку.
Пример использования функции SafeNthRoot:
|
1 2 3 4 5 6 |
Sub Test() Debug.Print SafeNthRoot(27, 3) ' 3 Debug.Print SafeNthRoot(-27, 3) ' -3 Debug.Print SafeNthRoot(-16, 2) ' Сообщение об ошибке Debug.Print SafeNthRoot(100, 0) ' Сообщение об ошибке End Sub |