|
楼主的双重循环部份至少可以改为:
For i = 2 To UBound(arr1, 1)
For j = 1 To UBound(arr2)
If arr1(i, 1) = arr2(j) Then GoTo ppp
Next j
ReDim Preserve arr2(1 To j)
arr2(j) = arr1(i, 1)
ppp:
Next i
稍微规范点可改为:
For i = 2 To UBound(arr1)
For j = 1 To UBound(arr2)
If arr1(i, 1) = arr2(j) Then Exit For
Next
If j > UBound(arr2) Then
ReDim Preserve arr2(1 To j)
arr2(j) = arr1(i, 1)
End If
Next
然而,编程序是将人们处理事务的方法写成命令让电脑来完成。为此,只需要我们将人工处理的方法准确告诉电脑就成了。
楼主的代码,希望的就是将数据用+连接起来赋给变量s,重复的只用一次。试想一下人工是不是可以这样做:看逐一查数据,看在s中存在不,如果没在里面,就加上去,如果在,就不管他。如果对,那么就可以写出这样的代码:
arr1 = Range(Cells(6, "p"), Cells(Range("p65536").End(3).Row, "p")) '原代码,把数据源写入数组
For i = 1 To UBound(arr1) '逐一查数组中的每一个数据
If InStr(S, arr1(i, 1)) < 1 Then S = S & arr1(i, 1) & "+" '如果没在s中,就加上去
Next i
如果想先写到数组中去,也是可以的,写成:
arr1 = Range(Cells(6, "p"), Cells(Range("p65536").End(3).Row, "p")) '原代码,把数据源写入数组
ReDim arr2(1 To 1)
arr2(1) = arr1(1, 1)
For i = 1 To UBound(arr1) '逐一查数组中的每一个数据
For j = 1 To UBound(arr2) '看他在数组arr2存在不
If arr1(i, 1) = arr2(j) Then Exit For '如果存在,就提前结束循环
Next
If j > UBound(arr2) Then ' 如果不是提前结束的循环,说明不存在,则加入到数组arr2中
ReDim Preserve arr2(1 To j)
arr2(j) = arr1(i, 1)
End If
Next
S = Join(arr2, "+") '无需循环,直接联结在一起 |
评分
-
查看全部评分
|