Как задать массив типа long в самом макросе? Можно использовать числа типа integer, умножив на 100, а потом поделив на 100, но нет ли другого варианта?
При работе с указанным выше массивом числа округляются в расчетах.
tchack: Как задать массив типа long в самом макросе?
Dim Arr() As Long (то же самое, что a&()) Только Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76) уже нельзя. Эта функция только для вариативных массивов и переменных.
При присвоении в Long-массив Double значений произойдёт БАНКОВСКОЕ округление
Код
Sub t()
Dim Arr() As Long
ReDim Arr(1 To 3)
Arr(1) = 1.5
Arr(2) = 2.5
Debug.Print Arr(1), Arr(2) ' 2, 2
End Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
testuser: можно так, но только без дробных Arr = Array(1&, 2&, 3&)
А я утверждаю, что нельзя. У вас будут доказательства?
Код
Sub t()
Dim arr() As Long
arr = Array(1&, 2&, 3&)
Debug.Print arr(1)
End Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous, ни чего не утверждаю, точнее не опровергаю, просто проверил - показало тип long для Arr(0). Сам массив то вариантный и таким и останется, но значения могут же быть, какими угодно, в т.ч. long, а на сколько это может быть полезно др. вопрос, просто дополнение к теме)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Dim Arr()
Dim Summ as Long
'Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76)
Arr = Array(260, 280, 280, 220, 376)
Dim i As Integer
For i = LBound(Arr) To UBound(Arr)
Summ = Summ + Arr(i)
Next
Debug.Print Summ / 100
т.е. в итоге этот вариант так остался самым оптимальным, т.к. не надо в каждой отдельной строке задавать значение отдельному элементу массива.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: а при чём тут массив типа Long тогда?
Массив типа Long нельзя задать через Array, но можно избавиться от необходимости массива типа Long, получив в итоге значение типа Long, а именно 14.16.
tchack: Массив типа Long нельзя задать через Array
Напрямую нельзя, но можно в цикле (не медленее)
Код
Option Explicit
Sub t()
Dim aV(), aL() As Long, i As Long
aV = Array(11, 22, 33, 44)
ReDim aL(UBound(aV))
For i = LBound(aV) To UBound(aV)
aL(i) = aV(i)
Next i
Debug.Print aL(3)
End Sub
tchack, вопрос-то в чём? Сформулируйте. Пока что тема похожа на свалку…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: Dim Arr() As Long (то же самое, что a&())Только Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76) уже нельзя. Эта функция только для вариативных массивов и переменных.
testuser написал: Покажите пример, где округляются
Код
Dim Arr()
Dim Summ as Long
Arr = Array(2.6, 2.8, 2.8, 2.2, 3.76)
Dim i As Integer
For i = LBound(Arr) To UBound(Arr)
Summ = Summ + Arr(i)
Next
Debug.Print Summ
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
ну не удивляйтесь тогда, когда в следующий раз помогающие будут ждать, пока вы сами получите нужный результат… Успехов!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄