下面这段代码能否将数组arr1中含有数组arr2中的值去掉后重新生成新的数组arr1??? arr1(0) = "aaa"
 arr1(1) = "bbb"
 arr1(2) = "ccc"
 ..... arr2(0) = "bbb"
 .....
    For e = 0 To UBound(arr2) - 1
     
      For d = 0 To UBound(arr1) - 1
       
       If arr1(d) = arr2(e) Then
       
        If d <= UBound(arr1) - 1 Then
         arr1(d) = arr1(d + 1)
         
        End If
        
       End If
      
      Next
      
      ReDim Preserve arr1(UBound(arr1) - 1)
    
    Next

解决方案 »

  1.   

    '数组下标从0开始的,上标不要减1,
    可以使用万能公式:UBound(arr1) - LBound(arr1) + 1计算数组的元素个数.
       For e = LBound(arr2) To UBound(arr2)
         
          For d = LBound(arr2) To UBound(arr1)
           
           If arr1(d) = arr2(e) Then
           
            'If d <= UBound(arr1) - 1 Then'没有意义
             arr1(d) = arr1(d + 1)
             
            'End If
            
           End If
          
          Next
          
          ReDim Preserve arr1(UBound(arr1) - 1)
        
        Next
      

  2.   

    啊累?Filter函数描述返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。语法Filter(InputStrings, Value[, Include[, Compare]])Filter函数语法有如下几部分:部分 描述 
    InputStrings 必需的。要执行搜索的一维字符串数组。 
    Value        必需的。要搜索的字符串。 
    Include      可选的。Boolean值,表示返回子串包含还是不包含Value字符串。如果Include是True,Filter返回的是包含Value子字符串的数组子集。如果Include是False,Filter返回的是不包含Value子字符串的数组子集。 
    Compare      可选的。数字值,表示所使用的字符串比较类型。有关其设置,请参阅下面的“设置值”部分。 
    设置值Compare参数的设置值如下:常数 值 描述 
    vbUseCompareOption –1 使用Option Compare语句的设置值来执行比较。 
    vbBinaryCompare      0 执行二进制比较。 
    vbTextCompare        1 执行文字比较。 
    vbDatabaseCompare    2 只用于Microsoft Access。基于您的数据库信息来执行比较。 
    说明如果在InputStrings中没有发现与Value相匹配的值,Filter返回一个空数组。如果InputStrings是Null或不是一个一维数组,则产生错误。Filter函数所返回的数组,其元素数目刚好是所找到的匹配项目数。