不能这样删除数组元素。用Redim重定义数组也只限于改变数组个数,不能从中间删除。
要达到这种效果可以这样做,将你要删除的元素值赋成一个其他元素都不能取的值,比如你所有的元素合法值都是大于零的,那你就把要删除的元素赋成零。这样就可以区别开哪些元素是被你删除的了。

解决方案 »

  1.   


       如果能大概预知这个数组的取值范围,比如数组中绝不会出现 -9999 这样的数字,就好办:
        可以先逐一进行“删除操作”,注意,并不是真的删除,而是把要删除的,比如第3个值变为-9999:   a(2)=-9999
         然后找下标最小的元素:
            Dim i As Integer
        
            For i = 0 To 20
                If a(i) = -9999 Then Exit For
            Next这是的i值就是符合条件的最小下标,a(i)就是下标最小的元素。
            怎么样?给分吧!     
      

  2.   

    用集合吧。
    用一个有21个元素的Collection,想删就删。
      

  3.   

    我觉得你该用 集合 
    用集合做这些事实在是太容易了!
        Dim a As New Collection
        a.Add "1"   'a(1)=1
        a.Add "2"   'a(2)=2
        a.Add "3"   'a(3)=3
        a.Remove (2)   '删除a(2)如果你是数组,我同意上面两位的说法。
    从最初的程序设计(结构化)上得知数组在运行过程中定长的
      

  4.   

     to Amoon(阿木)  sandder(包含中)     难道您们没看完题目么?   luckywb 不但要删除,还要“在剩下的元素中找出下标最小的元素”,用集合能做到么?      看清题目再答!
      

  5.   

    to uguess:用集合不可以吗。
    把要删除的元素删掉后。
    dim varTest as Variant
    for each varTest in 集合
        里面的不用写了吧。:)
    next
      

  6.   

    好,呵呵,我认输了!
    不过好像你的程序有点问题哦
    a(0)=1, a(2)=1 a(4)=8 ,a(5)=-9999
    循环到i=5退出,下标最小应该是0,而不是5吧?
      

  7.   

     to Amoon(阿木)  谢谢!确实写错了,应该是这样的:
           Dim i As Integer
        
            For i = 0 To 20
                If a(i) <> -9999 Then Exit For
            Next把“=”改为“<>”即可!