excelvba.Find方法为';我无法找到我知道的东西
我有一个非常大的数据表,需要将其分解成几个较小的表并重新组织。我想自动筛选大表,运行一个要在大表中查找的值列表,并将隔壁单元格中的值与预先存在的表中的值进行比较。以下是我编写的代码:excelvba.Find方法为';我无法找到我知道的东西,vba,excel,Vba,Excel,我有一个非常大的数据表,需要将其分解成几个较小的表并重新组织。我想自动筛选大表,运行一个要在大表中查找的值列表,并将隔壁单元格中的值与预先存在的表中的值进行比较。以下是我编写的代码: 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
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
我遇到的问题是,如果不是rNew,则行总是返回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
=Error 2040。如果您要搜索dFreq.Value
,请尝试:“如果不是(rNew什么都不是),那么”Not操作通常优先于Is。所以,如果rNew有值,它最有可能被转换为false,而false不等于零。试着不要先过滤?我认为BruceWayne是对的,因为dFreq返回范围。我会做dFreq=rBand.Offset(iBand,0).value
并将其作为字符串或其他东西进行标注。要消除的前三件事:1)检查搜索值不是日期,2)传递所有Find
参数,3)检查搜索值是您认为应该的值。。。默认属性是.Value
,但如果您使用了一些舍入或格式,我会使用.Value2
。