Функция VBA, использующая несколько входов диапазона и несколько выходов

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь написать функцию в Excel VBA, которая вычисляет коэффициенты уравнения плоскости, используя 9 входных данных (координаты 3 точек) из диапазона на рабочем листе. Вот что у меня есть до сих пор, но это, похоже, не работает:

 Function Plane_Eq_3Pts(ByVal X1 As Range, ByVal Y1 As Range, ByVal Z1 As Range, ByVal X2 As Range, ByVal Y2 As Range, ByVal Z2 As Range, ByVal X3 As Range, ByVal Y3 As Range, ByVal Z3 As Range) As Variant()

Dim Eq(0 To 3) As Variant

Eq(0) = (Y2 - Y1) * (Z3 - Z1) - (Y3 - Y1) * (Z2 - Z1)
Eq(1) = (Z2 - Z1) * (X3 - X1) - (Z3 - Z1) * (X2 - X1)
Eq(2) = (X2 - X1) * (Y3 - Y1) - (X3 - X1) * (Y2 - Y1)
Eq(3) = -(Eq(0) * X1   Eq(1) * Y1   Eq(2) * Z1)

Plane_Eq_3Pts = Eq

End Function
 

Я пытался использовать Control Shift Enter при использовании функции выше и выборе 4 ячеек, однако я продолжаю получать ЗНАЧЕНИЕ # для всех 4 выбранных ячеек. Любая помощь приветствуется!

Комментарии:

1. можете ли вы предоставить тестовый ввод?

Ответ №1:

Ваша функция (точно так же, как она закодирована) использует одномерный массив. Это подходит для вывода строки, а в Excel 365 это приведет к динамической строке:

введите описание изображения здесь

Если вы хотите, чтобы он попал в столбец в Excel 365, тогда TRANSPOSE() можно использовать:

 =TRANSPOSE(Plane_Eq_3Pts(A1,A2,A3,A4,A5,A6,A7,A8,A9))
 

введите описание изображения здесь

Если вы не используете Excel 365, то функция должна быть введена в массив.

РЕДАКТИРОВАНИЕ # 1:

Давайте рассмотрим случай строки. Первые ячейки hi-light с D3 по G3. Второй щелчок в Formula Bar . В-третьих, введите формулу с помощью array-entry.

Формулы массива должны вводиться с Ctrlпомощью Shift Enter, а не только Enterключа. Если это сделано правильно, формула появится с фигурными скобками вокруг нее в строке формул.

Комментарии:

1. Я использую Excel 2010, если это поможет. Не могли бы вы пояснить, что означает введенный массив?

2. @Jamaleas Смотрите мое РЕДАКТИРОВАНИЕ # 1

3. Спасибо. У меня была эта функция в надстройке, поэтому мне пришлось объявить ее как общедоступную функцию, чтобы она работала. Также спасибо за функцию transpose, которая делает мою жизнь намного проще!!