现在有一个数组a(),其中的元素为-1,12,56,36,-9,-87,21
把数组a()中大于0的数提取出来,形成新的数组b()使得b()=(12,56,36,21)
我用下面的方法实现的效果是b()=(0,12,56,36,0,0,21)
 for i = 1 to 7
   if a(i)>0 then
     b(i)=a(i)
   end if
next该如何改改,才能实现新的数组?
大家帮忙看看

解决方案 »

  1.   

    Private Sub Command1_Click()
      Dim A(7) As Long
      Dim B() As Long
      
      ReDim B(0) As Long
      
         A(1) = -1
         A(2) = 12
         A(3) = 56
         A(4) = 36
         A(5) = -9
         A(6) = -87
         A(7) = 21For i = 1 To 7
       If A(i) > 0 Then
          ReDim Preserve B(UBound(B) + 1) As Long
          B(UBound(B)) = A(i)
       End If
    NextFor i = 1 To UBound(B)
      MsgBox B(i)
    Next
    End Sub
      

  2.   

    j=0
    for i = 1 to 7 
      if a(i)>0 then 
        b(j)=a(i) 
        j=j+1
      end if 
    next 
      

  3.   


    Dim a(), b$(), i%, s$
    a = Array(-1, 12, 56, 36, -9, -87, 21)For i = 0 To UBound(a)
      If a(i) > 0 Then
        s = IIf(s = "", a(i), s & "," & a(i))
      End If
    Next
    b = Split(s, ",")
      

  4.   

    Private Sub Form_Load()
    Dim a
    Dim b()
    Dim i As Integer, k As Integer
    S = "-1,12,56,36,-9,-87,21"
    a = Split(S, ",")
    For i = 0 To UBound(a)
      If a(i) > 0 Then
      ReDim Preserve b(k)
        b(k) = a(i)
        k = k + 1
        End If
        Next
    For i = 0 To UBound(b)
    Debug.Print b(i)
    Next
    End Sub
      

  5.   

    Dim i&, k&
    k = LBound(a)
    i = UBound(a)
    ReDim b(k To i)
    For i = k To i
        If a(i) > 0 Then
            b(k) = a(i)
            k = k + 1
        End If
    Next
    ReDim Preserve b(LBound(a) To k - 1)
      

  6.   

    Private Sub Form_Load()
    Dim a
    a = Array(-1, 12, 56, 36, -9, -87, 21)
    Dim b
    b = Filter(a, "-")
    Debug.Print b(0), b(1), b(2)
    End Sub
      

  7.   


    '如果数组是Variant类型:
        
        Dim a, b
        a = Array(-1, 12, 56, 36, -9, -87, 21)
        b = Filter(a, "-", False)
        Debug.Print Join(b, ",")
      

  8.   

    顶楼上两位的。记得坛子里有人说过redim实际上也是CopyMemory,每重新定义一次,就Copy一次不可取。
      

  9.   

    ReDim Preserve B(UBound(B) + 1) As Long这一句对我的用处大了,呵呵,原来一直没有在这个地方ubound,还傻乎乎的多用一个变量。