我有一个非常大的数据表,需要分解成几个较小的表并进行重组。我想自动过滤大表,运行在大表中查找的值列表,并比较预先存在的表上的值的单元格中的值。这是我写的代码:
Set rData = wsData.Range("A1:P7000")
rData.AutoFilter Field:=6, Criteria1:=sSensor
Set rBand = wsNew.Range("C1")
For iBand = 1 To 149
dFreq = rBand.Offset(iBand, 0)
Set rNew = rData.Find(dFreq, , xlValues)
If Not rNew Is Nothing Then
If rNew.Offset(0, 1).Value > rBand.Offset(iBand, 2).Value Then
rNew.Offset(0, 1).Copy
rBand.Offset(iBand, 2).PasteSpecial xlPasteValues
End If
End If
Next
我遇到的问题是If Not rNew Is Nothing Then
行始终返回false,即使我可以验证dFreq
中rData
中的值是否存在。
更新
我已经更改了代码,如下所示:
Set rData = wsData.Range("A1:P7000")
'New
rData.Copy
wsData.Range("A1").PasteSpecial xlPasteValues
'/New
rData.AutoFilter Field:=6, Criteria1:=sSensor
Set rBand = wsNew.Range("C1")
For iBand = 1 To 149
dFreq = rBand.Offset(iBand, 0)
Set rNew = rData.Find(dFreq, , xlValues)
If Not rNew Is Nothing Then
If rNew.Offset(0, 1).Value > rBand.Offset(iBand, 2).Value Then
rNew.Offset(0, 1).Copy
rBand.Offset(iBand, 2).PasteSpecial xlPasteValues
End If
End If
Next
这似乎在99%的时间内起作用。有时,rNew.Offset(0, 1).Copy
会因某种原因复制错误的单元格。例如,一次迭代在单元格I467中找到dFreq
值,但复制了单元格K452(过滤后的表格的第一行)而不是J467。此外,偶尔会rNew.Offset(0, 1).Value
=错误2040。