Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何使一个数组中的值成为另一个数组中的值(VBA)?_Arrays_Vba_Excel_If Statement - Fatal编程技术网

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