Excel Se fórmula para vba

0

Eu tenho essa fórmula que verifica uma célula para ver se é um 6,2, a ou b, caso em que a palavra dinheiro é escrita.

=IF(OR(ISNUMBER(SEARCH("6",M2)),ISNUMBER(SEARCH("2",M2)),ISNUMBER(SEARCH("a",M2)),ISNUMBER(SEARCH("b",M2))),"cash","")

Eu gostaria de incorporá-lo em uma macro, mas embora eu consiga executá-lo para uma célula, preciso que ele verifique a coluna inteira, e não apenas mude todas as instâncias para dinheiro ... não é bom para minha outra colunas

Isso é o que eu tentei até agora:

 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

Como faço para que isso seja executado em toda a coluna, e não na pasta de trabalho inteira? Eu tentei mudar o intervalo para "M2: M10", mas isso não funcionou. Preciso que ele execute a coluna inteira, não importa quanto tempo seja.

Obrigado por qualquer conselho.

    
por Haywood 22.04.2016 / 14:21

1 resposta

4

Você precisa percorrer o intervalo usando um intervalo

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

Edite myRange para o intervalo desejado.

Basicamente, a instrução if no VBA funciona de maneira diferente da função if . Com a função é

IF(OR([this,that,the other]),Then,Else)

Considerando que o VBA if é mais parecido com

[IF this] OR [IF that] OR [IF the other] Then, Else

Com base na sua descrição da sua fórmula, sua fórmula pode ser escrita

=IF(OR(M2=6,M2=2,M2="a",M2="b"),"cash","fail")

O que é mais semelhante ao VBA.

Mas, o que sua fórmula está realmente fazendo é procurar valores, então o VBA seria mais parecido com isso

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
    
por 22.04.2016 / 15:02