Во-первых, посмотрите комментарий, который оставил Рему, так как это действительно то, что вы должны делать здесь. Вам вообще не нужен VBA для поэлементного умножения двух массивов.
Во-вторых, если вы хотите работать с диапазонами, вы можете сделать это, объявив аргументы вашей функции типа Range. Таким образом, вы могли бы иметь
Public Function multByElement(range1 As Range, range2 As Range)
и не нужно разрешать строки, чтобы ранжировать ссылки самостоятельно. Использование строк не позволяет Excel обновлять ссылки, когда все перемещается на вашем рабочем листе.
Наконец, причина, по которой ваша функция дает сбой так, как она это делает, заключается в том, что массив, который вы получаете, взяв 'Value' многосотового Range, является двумерным, и вам нужно получить доступ к его элементам с двумя индексами , Так как похоже, что вы собираетесь (поэлементно) умножить два вектора, вы должны сделать либо
arrayA(i) = arr1(i,1) * arr2(i,1)
или
arrayA(i) = arr1(1,i) * arr2(1,i)
в зависимости от того, какую ориентацию вы ожидали от вашего ввода. (Обратите внимание, что если вы делаете это с VBA, ориентация того, что концептуально является 1-D массивом, имеет значение, но если вы последуете совету Рему, приведенному выше, Excel будет делать правильные вещи независимо от того, передаете ли вы строки или столбцы, или ссылки на диапазон или литералы массива.)
Как эпилог, похоже, что вы не используете Option Explicit. Поищите в Google информацию о том, почему вы, вероятно, всегда хотите это делать.