分享

VBA入门51:用数组删除行

 L罗乐 2017-09-27

数据源


        要求:删除香蕉和菠萝的“行”



思路

1、将原始数据写入数组arr。

2、遍历数组arr,提取数组arr中的保留数据,剔除香蕉和菠萝,保留数据放到初始为空白的数组brr中。

3、清空工作表内容,将brr数据输出到工作表,完成删除行。

4、一提到“删除行”,第一印象就会delete的方法去操作“行”(对象)。实际上,在循环当中频繁操作对象(删除行)是十分消耗内存的,代码效率很低。在这个示例中,使用数组并没有使用删除行的操作,而只是仅仅操作数组,消耗内存要比操作对象(删除行)低得太多。


代码


Sub 数组删除行()

    Dim arr, brr(), SR$

    arr = [a1].CurrentRegion '将原始数据写入数组

    SR = '香蕉菠萝'   '删除条件

    '定义数组brr和arr一模一样大小

    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))

    '//遍历数组arr数据

    For i = 1 To UBound(arr)

        If InStr(SR, arr(i, 2)) = 0 Then  '如果非香蕉菠萝,则提取数据

            K = K 1 '计数

            For j = 1 To UBound(arr, 2) '提取数据写入数组brr

                brr(K, j) = arr(i, j)

            Next

        End If

    Next

    '//输出保留数据

    [a1].CurrentRegion.ClearContents '清空原数据区所有内容

    [a1].Resize(K, UBound(brr, 2)) = brr '写入非香蕉菠萝的数据到工作表

End Sub


代码注释

1、instr函数,判断两个字符串之间是否有包含关系,类似工作表函数find。

如此例instr('香蕉菠萝','菠萝'),由于“菠萝”在“香蕉菠萝”中能够找到,所以返回数字3,也就是“菠萝”在字符串'香蕉菠萝'中的位置。若找不到“菠萝”则返回0。此函数常用来作字符包含关系判断以及重复值判断等。若进一步了解,请百度。


2、利用数组速度快,消耗小的特点,代替常规的删除行操作,是十分给力的做法。


3、如果能使用数组,请优先使用。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多