我有输入数组{{1,4},{1,3},{1,4,7}}
Dim array1() As Long
ReDim array1(3, 3)
array1(1, 1) = 1
array1(1, 2) = 4
array1(2, 1) = 1
array1(2, 2) = 3
array1(3, 1) = 1
array1(3, 2) = 4
array1(3, 3) = 7
我想要输出数组(每个子数组的长度){2,2,3} 我正在考虑使用for循环
Dim i As Long
i = UBound(array1, 1)
Dim outputarray() As Long
ReDim outputarray(i) As Long
For j = 1 To i
outputarray(i) = UBound(array1(i), 2) 'ERROR APPEAR
Next j
我添加了Option Base 1
答案 0 :(得分:3)
每个子阵列的长度保持不变,在你的情况下总是3。您的redim定义了您想要获得的数字。所以试图像你想要的那样检索它是没有意义的。
您不在
中移动任何值array1(1, 3)
array1(2, 3)
不会影响数组的尺寸。你会在这些你认为空的数组的单元格中找到值,并且它将为0,因为你声明你的数组很长。如果您已将其声明为字符串,则会在其中找到空白字符串,既不为null也不为“无”。
您有输入数组{{1,4,0},{1,3,0},{1,4,7}}
如果您的目标是找到数组中的哪些元素为0,因为您没有移动任何内容,那么这是另一个与数组长度无关的故事。
答案 1 :(得分:2)
我同意Thomas'回答上面。
如果您确实发现自己对了解阵列中已填充数组值的数量感兴趣,可以考虑以下事项:
例如:
Dim i As int
Dim j As int
Dim h As int
Dim w As int
h = UBound(array1, 1)
w = UBound(array1, 2)
Dim rowVals as int
Dim arrVals as int
For i = 0 To h
rowVals = 0
For j = w to 0 Step -1
if array1(i,j) = 0 Then
exit for
else
rowVals = rowVals + 1
end if
Next
arrVals = arrVals + rowVals
Next