|
1、主要的问题是你修改了工作表名称,导致找不到对应的参数了,原表参数是sheet1和sheet2,现在叫“初始”和“打勾数据”;
2、另一个不太显眼的问题是起始数据存放的位置从第2行改到了第3行,因为使用了Cells(i, 2).End(2).Column来确定右边界,如果第二行数据为空,那么这个参数的右边界有可能会变成aa列的27。第一次不会出错,因为aa列都是空白,但第二之后aa列就有数据了,这个参数的结果就变成了27。所以我修改这个部分,把Cells(i, 2).End(2).Column改成了:
ls = Cells(i, 2).End(2).Column
ls = IIf(ls > 26, 26, ls)
这里对 ls 的最大值做了限定,不能超过26;
然后就是在运行时关闭了屏幕更新,速度会快很多。下面是完整代码:
Application.ScreenUpdating = False
Dim hs, s1, i, s2, bz, js, k, s3, j
Dim ls
For hs = 2 To 1000
If IsEmpty(Cells(hs, "aa")) Then
Exit For
End If
Next hs
s1 = Worksheets("初始").[o1]
For i = 2 To [b1000].End(3).Row
s2 = Cells(i, 1)
js = 29
bz = False
ls = Cells(i, 2).End(2).Column
ls = IIf(ls > 26, 26, ls)
For k = 2 To ls
s3 = Cells(i, k)
For j = 2 To Worksheets("打勾数据").[b2].End(2).Column
If s3 = Worksheets("打勾数据").Cells(2, j) Then
Cells(hs, "aa") = s1
Cells(hs, "ab") = s2
Cells(hs, js) = s3
js = js + 1
bz = True
End If
Next j
Next k
If bz Then
hs = hs + 1
End If
Next i
Application.ScreenUpdating = True
|
|