Arrays 如何使一个数组中的值成为另一个数组中的值(VBA)?
我想创建一段代码,让我将一个值从一个数组分配到另一个不同长度的数组。这就是我目前所拥有的Arrays 如何使一个数组中的值成为另一个数组中的值(VBA)?,arrays,vba,excel,if-statement,Arrays,Vba,Excel,If Statement,我想创建一段代码,让我将一个值从一个数组分配到另一个不同长度的数组。这就是我目前所拥有的 A(1) = 0 A(2) = 0 A(3) = 6 A(4) = 5 A(5) = 7 n = 0 For i = 1 To 5 If A(i) <> 0 Then n = n + 1 End If Next i ReDim B(1 To n) As Integer For j = 1 To n For i = 1 To 5 If A(i) <>
A(1) = 0
A(2) = 0
A(3) = 6
A(4) = 5
A(5) = 7
n = 0
For i = 1 To 5
If A(i) <> 0 Then
n = n + 1
End If
Next i
ReDim B(1 To n) As Integer
For j = 1 To n
For i = 1 To 5
If A(i) <> 0 Then
B(j) = A(i)
End If
Next i
Next j
MsgBox B(2)
A(1)=0
A(2)=0
A(3)=6
A(4)=5
A(5)=7
n=0
对于i=1到5
如果A(i)0那么
n=n+1
如果结束
接下来我
将B(1到n)重新定义为整数
对于j=1到n
对于i=1到5
如果A(i)0那么
B(j)=A(i)
如果结束
接下来我
下一个j
MsgBox B(2)
此时它返回7,而它应该返回5,B中的所有值都是7。如何运行此代码 嵌套循环的事实应该提醒您:这将被执行
n*5次,这是不正确的
更改第二部分,使其仅使用一个循环,如下所示:
ReDim B(1 To n) As Integer
j = 1
For i = 1 To UBound(A)
If A(i) <> 0 Then
B(j) = A(i)
j = j + 1
End If
Next i
您必须检查B中的第一个空数组元素,然后退出循环,这样就不会继续写入
Dim A() As Variant, B() As Variant
Dim i As Long, j As Long, n As Long
A = Array(0, 0, 6, 5, 7) '<~~ 0 to 4, not 1 to 5
n = 0
For i = LBound(A) To UBound(A)
If A(i) <> 0 Then
n = n + 1
End If
Next i
ReDim B(1 To n) '<~~ 1 to 3
For i = LBound(A) To UBound(A)
If A(i) <> 0 Then
For j = LBound(B) To UBound(B)
If IsEmpty(B(j)) Then
B(j) = A(i) '<~~ assigned a value; exit loop
Exit For
End If
Next j
End If
Next i
For j = LBound(B) To UBound(B)
Debug.Print B(j)
Next j
Dim A()作为变量,B()作为变量
暗i为长,j为长,n为长
A=Array(0,0,6,5,7)'您的代码似乎表明您不想复制任何0值。因此,如果你有一个数组(4,2,0,8,9)
,你会想要一个只有4个元素的B
,比如(4,2,8,9)
?你的代码有点奇怪:)我不明白最终的目标是什么。操作:在第一个循环中,计算不是0的值,结果应该是n=3
。之后,将有两个嵌套循环。第一个将运行3次,第二个(嵌套)将A中非0的值分配给B数组。但最终的结果总是一样的:它会将A的最后一个值分配给B,而A的最后一个值不是0,因此7
,最后的结果是处处都是7。你真的需要详细说明你想要的是什么,以及预期结果的数据。
Dim A() As Variant, B() As Variant
Dim i As Long, j As Long, n As Long
A = Array(0, 0, 6, 5, 7) '<~~ 0 to 4, not 1 to 5
n = 0
For i = LBound(A) To UBound(A)
If A(i) <> 0 Then
n = n + 1
End If
Next i
ReDim B(1 To n) '<~~ 1 to 3
For i = LBound(A) To UBound(A)
If A(i) <> 0 Then
For j = LBound(B) To UBound(B)
If IsEmpty(B(j)) Then
B(j) = A(i) '<~~ assigned a value; exit loop
Exit For
End If
Next j
End If
Next i
For j = LBound(B) To UBound(B)
Debug.Print B(j)
Next j