我有这个公式,它检查一个单元格是否为 6、2、a 或 b,在这种情况下会写出单词 cash。
=IF(OR(ISNUMBER(SEARCH("6",M2)),ISNUMBER(SEARCH("2",M2)),ISNUMBER(SEARCH("a",M2)),ISNUMBER(SEARCH("b",M2))),"cash","")
我想将它合并到一个宏中,但尽管我可以让它在一个单元格上运行,但我需要它检查整个列,而不是只是将每个实例更改为现金......这对我的其他列不好
这是我迄今为止尝试过的:
Dim score As Integer, result As String
score = Range("M2").Value
If score = 6 Then
result = "Cash"
Else
result = "fail"
End If
Range("n2").Value = result
End Sub
我如何让它运行整个列而不是整个工作簿?我尝试将范围更改为“M2:M10”,但这不起作用。我需要它运行整个列,无论多长。
谢谢您的任何建议。
答案1
您需要使用范围循环遍历范围
Option Explicit
Sub ScoreIt()
Dim myCell As Range
Dim myRange As Range
Set myRange = Range("M2:M10")
For Each myCell In myRange
If myCell = 6 Or myCell = 2 Or myCell = "a" Or myCell = "b" Then
myCell.Offset(, 1) = "Cash"
Else: myCell.Offset(, 1) = "fail"
End If
Next
End Sub
编辑myRange
到您想要的任何范围。
基本上,if
VBA 中的语句与if
函数的工作方式不同。使用函数时
IF(OR([this,that,the other]),Then,Else)
而 VBAif
更像是
[IF this] OR [IF that] OR [IF the other] Then, Else
根据你对公式的描述,你的公式可以写成
=IF(OR(M2=6,M2=2,M2="a",M2="b"),"cash","fail")
这与 VBA 更相似。
但是,你的公式实际上是在搜索值,所以 VBA 会更像这样
Option Explicit
Sub ScoreIt()
Dim myCell As Range
Dim myRange As Range
Set myRange = Range("M2:M10")
For Each myCell In myRange
If InStr(1, myCell, 6) > 0 Or _
InStr(1, myCell, 2) > 0 Or _
InStr(1, myCell, "a") > 0 Or _
InStr(1, myCell, "b") > 0 Then
myCell.Offset(, 1) = "Cash"
Else: myCell.Offset(, 1) = "fail"
End If
Next
End Sub