Excel 如果公式到 vba

Excel 如果公式到 vba

我有这个公式,它检查一个单元格是否为 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到您想要的任何范围。


基本上,ifVBA 中的语句与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

相关内容