我试图在excel的列中找到重复的值,并在项目旁边的相应列中放入3个值。我正在努力解决的问题是我的搜索范围一遍又一遍地找到相同的范围,而不是转到下一个包含字符串或将replaceValuesRange
设置为{{1}的范围}}
我随后决定将字符串值更改为Nothing
以尝试更改字符串的值,但我仍然陷入查找循环中,我认为这是因为字符串仍然存在于细胞
有什么想法吗?问题存在于MainInputSHeet.Cells(loopCounter, 4).Value = findString & " FOUND"
循环中。其他一切都很好
这就是立即窗口在DoLoop中迭代的内容:
Do Until
主要代码块
$D$5
$D$5
$D$5
$D$5
$D$5
$D$5
$D$5
$D$5
$D$5
$D$5
答案 0 :(得分:1)
你的问题是,
Set replaceValuesRange = MainInputSheet.Range(MainInputSheet.Cells(2, 4), MainInputSheet.Cells(lastRow, 4)).FindNext
每次都会从乞讨开始搜索。要继续搜索(显示下次出现的搜索值),您必须使用:
Set replaceValuesRange = MainInputSheet.Range(MainInputSheet.Cells(2, 4), MainInputSheet.Cells(lastRow, 4)).FindNext(replaceValuesRange)
现在的问题是,Do Until
循环将无限延伸,但对于每个具有搜索值的单元格。我不确定是否有更智能的方法来停止循环,但我只是将第一个找到的单元格的行号保存到fstRow
变量,然后在StopStop
时更改True
变量循环将再次找到第一个单元格:
Dim StopStop As Boolean
Dim fstRow As Long
StopStop = False
Set replaceValuesRange = MainInputSheet.Range(MainInputSheet.Cells(2, 4), MainInputSheet.Cells(lastRow, 4)).Find(findString)
If Not replaceValuesRange Is Nothing Then fstRow = replaceValuesRange.Row
Do Until replaceValuesRange Is Nothing Or StopStop
Set replaceValuesRange = MainInputSheet.Range(MainInputSheet.Cells(2, 4), MainInputSheet.Cells(lastRow, 4)).FindNext(replaceValuesRange)
If replaceValuesRange.Row = fstRow Then StopStop = True
Loop
答案 1 :(得分:0)
我最近写了一篇关于Find的文章,但是用葡萄牙文写的,我认为它不会帮助你。
在那篇文章中,我提供了一个示例代码,您可以学习并了解它是如何工作的:
Sub FindTest()
Dim Interval As Range
Dim Value As String
Dim Result As Range
Dim PreviousResult As Range
Set Interval = Range("A1:A1000")
Value = "Pedro*"
Set Result = Intervalo.Find(Value, LookIn:=xlFormulas, LookAt:=xlWhole, _
SearchOrder:=xlByColumns)
If Result Is Nothing Then
Debug.Print "Value not found"
Exit Sub
End If
Do
Debug.Print Result.Value
Set PreviousResult = Result
Set Result = Interval.Find(Value, After:=PreviousResult, _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns)
Loop Until Result.Row < PreviousResult.Row
End Sub
阅读Find documentation以了解每个参数是个好主意。我希望它对你有所帮助。
答案 2 :(得分:0)
在我看来,您的问题是您已将replaceValuesRange设置为范围对象。然后使用do循环运行,直到该范围为止。问题是范围仍然是一个对象,并且在您对该变量执行其他操作之前将保留一个对象。我会将此更改为另一个for循环并迭代该范围。
也许像
对于i = 2到lastrow'你的变量范围从第2行开始直到最后一行 代码在这里 接下来我