请看一下这个答案。它解释了如何选择单元格及其偏移量。
将您从上述答案中学到的知识应用到注释中的 for each 循环中match found do something
。您可以删除该注释,或者只是在其下方添加您的代码If
,End If
这表明存在匹配项。
Sub testr1()
Dim myRange As Range
' change this to any range you like to check
Set myRange = Range("A1:A100")
Dim searchTerm As String
' specify your search term
searchTerm = "1234"
Dim cell As Range
' cell will be each cell in your range
For Each cell In myRange
' checks whether the cell matches the searchTerm
If StrComp(cell, searchTerm, vbTextCompare) = 0 Then
' match found do something
End If
Next
End Sub
此代码遍历myRange
变量中的所有单元格。在上面的示例中,范围设置为A1
to,A100
因此cell
循环内的变量将是A1
第一次迭代的变量,A2
第二次迭代的变量,依此类推,直到A100
。
该StrComp()
函数将每个单元格的值与示例中searchTerm
的值进行比较。1234
match found do something
是我希望您将应用我提供的链接到上面的答案中的逻辑的地方。
您的原始但修改后的代码
Sub testr1()
Dim vCell As Range
Dim otherrow As Long
otherrow = 1
Do
Set vCell = Sheets("Sheet1").Cells(otherrow, 1)
If vCell = 1234 Then
If Range("B5") = "B" Then
Cells(otherrow, 2).Select
End If
End If
otherrow = otherrow + 1
Loop Until IsEmpty(vCell)
End Sub
摆脱 else 语句。如果未找到,Exit Do
则退出您的循环。1234
因此,如果第一个单元格不等于1234
您退出循环,并且它不会移动到第二行。
此外,您需要添加一个布尔语句来执行循环以防止无限循环。我添加Loop Until isEmpty(vCell)
了让循环知道一旦有一个空单元格终止循环。还有其他更好的方法,但是如果您不想过多地修改原始代码,那么这应该足以避免无限循环。
你的代码实际上在做什么?
我一直在问自己你想用你的代码实现什么,我似乎无法给出一个很好的理由。您修改后的代码(上述代码)将遍历 A 列中的所有单元格,直到找到一个空单元格。它将寻找与您的匹配1234
项(它应该真正用作字符串而不是独立数字 - 考虑将其用双引号括起来)。一旦找到匹配项,它将检查B
相应行上的列是否具有值B
。如果是,那么它将选择该单元格。
逻辑失败的地方......
因为只有最后一个 1234和它的对应B
将被选中,所以遍历整个列有什么意义?这对我来说毫无意义。尝试更好地解释您要实现的目标。
解决方案
根据最新评论,我编辑了代码以满足标准
Sub testr1()
Dim vCell As Range
Dim otherrow As Long
otherrow = 1
Do
Set vCell = Sheets("Sheet1").Cells(otherrow, 1)
If StrComp(vCell, "1234", vbTextCompare) = 0 Then
If StrComp(vCell.Offset(0, 1), "B", vbTextCompare) = 0 Then
vCell.Offset(0, 1).Select
' if all criterias are met then the cell will be highlighted in red
vCell.Offset(0,1).Interior.Color = RGB(255, 0, 0)
End If
End If
otherrow = otherrow + 1
Loop Until IsEmpty(vCell)
End Sub
您需要使用.Offset(0,1)
Range 对象 ( vCell
) 的属性来选择相应的单元格(右侧一个)