我只想检查我的代码是否有问题。我的代码试图在A列中查找此值1234,一旦找到它,如果条件满足,它将选择除此之外的值。如果没有1234,那么它什么都不做。不幸的是,即使1234在A列中也没有任何作用。当我删除Else语句时,它能够按照正常运行。我可以知道它有什么问题吗?
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
Else
'Do nothing if 1234 is N.A.
Exit Do
End If
otherrow = otherrow + 1
Loop
End Sub
答案 0 :(得分:2)
请查看this answer。它解释了如何选择单元格及其偏移量。
将您从上述答案中学到的内容应用于评论为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
到A100
,因此循环内的cell
变量将是第一次迭代的A1
,A2
第二,依此类推,直到A100
。
StrComp()
函数会将每个单元格的值与示例中searchTerm
的{{1}}进行比较。
1234
是我希望你从我提供上面链接的答案中应用逻辑的地方。
您的原始但经过修改的代码
match found do something
摆脱else语句。如果找不到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
,则Exit Do
会退出您的循环。因此,如果第一个单元格不等于1234
,则退出循环,并且它不会移动到第二行。
此外,您需要添加一个布尔语句来执行循环以防止infinite loop。我添加了1234
让循环知道一旦有一个空单元来终止循环。还有其他更好的方法但是如果你不想过多地修改原始代码,那么这应该足以避免无限循环。
您的代码实际上在做什么?
我一直在问自己,你用你的代码想要实现什么,我似乎无法给出充分的理由。您修改后的代码(上面的代码)将迭代A列中的所有单元格,直到找到一个空单元格。它将寻找与你的Loop Until isEmpty(vCell)
匹配(它应该真正用作字符串而不是单独的数字 - 考虑用双引号括起来)。找到匹配项后,它会检查相应行上的列1234
是否包含值B
。如果是,那么它将选择该单元格。
逻辑失败的地方......
迭代整个专栏的重点是什么,因为只选择最后一个1234 并选择相应的B
?这对我来说毫无意义。试着更好地解释你想要实现的目标。
根据最新评论,我编辑了符合条件的代码
B
您需要使用Range对象的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)
)来选择相应的单元格(右侧一个)
答案 1 :(得分:0)
特别感谢@mehow给我一个让我的代码工作的想法
Sub testr1()
Dim vCell As Range
Dim otherrow As Long
otherrow = 1
Do While otherrow <= Rows.Count
Set vCell = Sheets("Sheet1").Cells(otherrow, 1)
If vCell = 1234 Then
If Range("B5") = "B" Then
Cells(otherrow, 2).Select
End If
Exit Do
End If
otherrow = otherrow + 1
Loop
End Sub