数据源 要求:删除香蕉和菠萝的“行” 思路 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、如果能使用数组,请优先使用。 |
|