У меня есть эта формула, которая проверяет ячейку, чтобы увидеть, если это 6,2, а или б, и в этом случае написано слово наличными.

=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 ответ1

4

Вам нужно перебрать диапазон, используя диапазон

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)

В то время как VBA, if больше похоже

[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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .