我花了好几个小时试图找出解决这个问题的最佳方法,但我没有解决方案。我已经尝试使用InStr循环,带有通配符的条件格式,但结果永远不是我想要的。
我有两列值,一列是我想要搜索的值,另一列是一个长字符串,我的值可以放在任何地方,因此我需要通配符。我想要做的是获取长字符串列的第一行,并将其与具有较短值的列中的每个值进行比较。如果在长字符串中找不到任何较短的值,请删除带有长字符串的行并移至下一个字符串...
我想我必须设置这样的东西:
For i = 1 to lastrow,
If InStr(longvalue, shortvalue) Then
' Break loop to next i?
Else
If i = lastrow
longvalue.EntireRow.Delete
End If
End If
Next i
任何帮助都会受到赞赏......一直把头发拉过来。
再看一下,我想我需要2个循环,第一个循环遍历所有短值和单个较长值,然后在它们全部循环之后,转到下一个更长的值。
编辑:结束于此:
i = 6
j = 2
Set sht = ThisWorkbook.Worksheets("SM Summaries")
lastrow = sht.Cells(sht.Rows.Count, "C").End(xlUp).Row
reallastrow = lastrow + 1
For i = 6 To reallastrow
For j = 2 To 82
If InStr(ActiveWorkbook.Sheets("SM Summaries").Range("C" & i).Value, ActiveWorkbook.Sheets("SM Reference Sheet").Range("H" & j).Value) Then
Exit For
Else
If j = 82 Then
ActiveWorkbook.Sheets("SM Summaries").Range("C" & i).EntireRow.ClearContents
End If
End If
Next j
Next i
答案 0 :(得分:0)
在循环中删除行时,需要向后循环,以便循环可以跟踪正确的行。所以,
For i=lastrow to 1 step -1
If InStr(longvalue, shortvalue) Then
GoTo Nexti
end if
if i=1 then
longvalue.entirerow.delete 'this assumes longvalue is a cell reference
end if
Nexti:
Next i
但我想我会使用Find
With Worksheets(1).Range("b1:b500")
for i=lastrow to 1 step -1
Set c = .Find(cells(i,1), lookin:=xlValues, lookat:=xlPart) 'xlPart returns true if just part of the string matches
If c Is Nothing Then 'didn't find your string
cells(i,2).entirerow.delete
end if
next i
End With