Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excelvba.Find方法为';我无法找到我知道的东西_Vba_Excel - Fatal编程技术网

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