2015-05-20 2 views
2

Я думаю, что этот вопрос задавали тысячу раз, но после нескольких часов поиска я до сих пор не могу найти никакой помощи. Поэтому мне нужно использовать вектор чисел в качестве входных данных, выполнить вычисления для всех этих чисел и затем вернуть результаты в виде вектора с той же размерностью, что и входной вектор. Так позволяет сказать, что я хочу взять некоторые цифры, а затем вычесть все из них по одному и поэтому мой лист Excel должен выглядеть следующим образомVBA: попытка вернуть массив, но только получить первое значение

A B 
1 6 5 
2 7 6 
3 8 7 
4 9 8 
5 10 9 

где колонка А является входным вектором и B должен быть выход. Но мой вывод - это только столбец нулей. Отладка также говорит о том, что правильные числа есть в выходном векторе, но я могу напечатать только первое значение, которое затем переходит ко всем ячейкам. На данный момент мой код выглядит следующим образом

Public Function Vector(values As Range) As Variant 

    Dim arraySize As Integer, i As Integer 
    arraySize = values.rows.Count 
    Dim returnArray() As Variant 
    ReDim returnArray(arraySize) 

    For i = 1 To arraySize 
     returnArray(i - 1) = values(i, 1) - 1 
    Next i 

    Vector = returnArray 

End Function 
+0

При отладке, делает строку 'Vector = returnArray' дать вам то, что вы «ожидание», т.е. «Вектор» - это массив значений? – tospig

+0

Можете ли вы добавить код, который вы используете, чтобы написать массив на листе? – tospig

+0

Похоже, ваша проблема на данный момент заключается в том, что вы в основном используете 1D-массив. И что такое диапазон значений? –

ответ

2

Использование 2-мерный массив:

Public Function Vector(values As Range) As Variant 

    Dim arraySize As Integer, i As Integer 
    arraySize = values.Rows.Count 
    Dim returnArray() As Variant 
    ReDim returnArray(1 To arraySize, 1 To 1) 

    For i = 1 To arraySize 
     returnArray(i, 1) = values(i, 1) - 1 
    Next i 

    Vector = returnArray 

End Function 

enter image description here

Примечание:

При вводе формулы массива в рабочий лист, ячейки hi-light B1 через B5, затем щелкните в строке формул, а затем введите формулу с Ctrl + Сдвиг + Введите

0
Public Function Vector(values As Range) As Variant 

    Dim r As Long, c As Long, returnArray As Variant 

    returnArray = values.Value 

    For r = 1 To ubound(returnArray, 1) 
    For c = 1 To ubound(returnArray, 2) 
     returnArray(r, c) = returnArray(r, c) - 1 
    Next c 
    Next r 

    Vector = returnArray 

End Function 
Смежные вопросы