Como comparar numeros no vba

#13646

Reinaldo, show de bola seu workbook!!! Sua macro 'conta' faz o que preciso. Tentarei entendê-la e adequá-la ao que tenho... Espero poder gritar "socorro" para você caso eu não consiga uma vez que realmente não manjo nada dos comandos VBA. OBRIGADÍSSIMO, parabéns pelo trabalho e sinto-me sempre feliz ao ver que existem pessoas com boa vontade neste mundo!!!

Assim que funcionar, indicarei o assunto como resolvido por você. Pode parecer exagero meu, mas não uso fóruns e é a primeira vez que tenho algo meu resolvido por alguém que não conheço, portanto, acredito que você possa imaginar como estou me sentindo. Novamente, obrigado!

#37879

Eu tenho a Planilha Base, essa os valores nunca vão mudar. Porem a outra Planilha é gerada sempre nova, então os valores delas vão mudar. No arquivo de exemplo que coloquei, a coluna A tenho duas vezes o valor 10, porem na coluna B um valor é H e o outro é J, e na coluna C um valor é 12 e o outro é 0. Se comparar com a Planilha Dados o Valor 10 deveria ser 10-J-100. Então estes valores da Planilha Busca deveriam ficar com uma cor no fundo da Celula.

Só que tem um problema: Na Planilha Dados o valor está crescente, 1-2-3-4....., já na planilha Busca estes valores não vão estar em ordem, e pode ser que por exemplo os números 4,6,8 nem existam na planilha.

Used to compare expressions.

Syntax

result = expression1 comparisonoperator expression2 result = object1 Is object2 result = string Like pattern

Comparison operators have these parts:

Part Description
result Required; any numeric variable.
expression Required; any expression.
comparisonoperator Required; any comparison operator.
object Required; any object name.
string Required; any string expression.
pattern Required; any string expression or range of characters.

The following table contains a list of the comparison operators and the conditions that determine whether result is True, False, or Null.

Operator True if False if Null if
< (Less than) expression1 < expression2 expression1 >= expression2 expression1 or expression2 = Null
<= (Less than or equal to) expression1 <= expression2 expression1 > expression2 expression1 or expression2 = Null
> (Greater than) expression1 > expression2 expression1 <= expression2 expression1 or expression2 = Null
>= (Greater than or equal to) expression1 >= expression2 expression1 < expression2 expression1 or expression2 = Null
= (Equal to) expression1 = expression2 expression1 <> expression2 expression1 or expression2 = Null
<> (Not equal to) expression1 <> expression2 expression1 = expression2 expression1 or expression2 = Null

Note

The Is and Like operators have specific comparison functionality that differs from the operators in the table.

When comparing two expressions, you may not be able to easily determine whether the expressions are being compared as numbers or as strings. The following table shows how the expressions are compared or the result when either expression is not a Variant.

If Then
Both expressions are numeric data types (Byte, Boolean, Integer, Long, Single, Double, Date, Currency, or Decimal) Perform a numeric comparison.
Both expressions are String Perform a string comparison.
One expression is a numeric data type and the other is a Variant that is, or can be, a number Perform a numeric comparison.
One expression is a numeric data type and the other is a string Variant that can't be converted to a number A Type Mismatch error occurs.
One expression is a String and the other is any Variant except a Null Perform a string comparison.
One expression is Empty and the other is a numeric data type Perform a numeric comparison, using 0 as the Empty expression.
One expression is Empty and the other is a String Perform a string comparison, using a zero-length string ("") as the Empty expression.

If expression1 and expression2 are both Variant expressions, their underlying type determines how they are compared. The following table shows how the expressions are compared or the result from the comparison, depending on the underlying type of the Variant.

If Then
Both Variant expressions are numeric Perform a numeric comparison.
Both Variant expressions are strings Perform a string comparison.
One Variant expression is numeric and the other is a string The numeric expression is less than the string expression.
One Variant expression is Empty and the other is numeric Perform a numeric comparison, using 0 as the Empty expression.
One Variant expression is Empty and the other is a string Perform a string comparison, using a zero-length string ("") as the Empty expression.
Both Variant expressions are Empty The expressions are equal.

When a Single is compared to a Double, the Double is rounded to the precision of the Single. If a Currency is compared with a Single or Double, the Single or Double is converted to a Currency.

Similarly, when a Decimal is compared with a Single or Double, the Single or Double is converted to a Decimal. For Currency, any fractional value less than .0001 may be lost; for Decimal, any fractional value less than 1E-28 may be lost, or an overflow error can occur. Such fractional value loss may cause two values to compare as equal when they are not.

Example

This example shows various uses of comparison operators, which you use to compare expressions.

Dim MyResult, Var1, Var2 MyResult = (45 < 35) ' Returns False. MyResult = (45 = 45) ' Returns True. MyResult = (4 <> 3) ' Returns True. MyResult = ("5" > "4") ' Returns True. Var1 = "5": Var2 = 4 ' Initialize variables. MyResult = (Var1 > Var2) ' Returns True. Var1 = 5: Var2 = Empty MyResult = (Var1 > Var2) ' Returns True. Var1 = 0: Var2 = Empty MyResult = (Var1 = Var2) ' Returns True.

See also

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Os operadores de comparação comparam duas expressões e retornam um Boolean valor que representa a relação de seus valores. Há operadores para comparar valores numéricos, operadores para comparação de cadeias de caracteres e operadores para comparar objetos. Todos os três tipos de operadores são discutidos neste documento.

Comparando valores numéricos

Visual Basic compara valores numéricos usando seis operadores de comparação numérica. Cada operador usa como operandos duas expressões que são avaliadas como valores numéricos. A tabela a seguir lista os operadores e mostra exemplos de cada um.

Operador Condição testada Exemplos
= Igualmente O valor da primeira expressão é igual ao valor da segunda? 23 = 33 ' False

23 = 23 ' True

23 = 12 ' False

<> Desigualdade O valor da primeira expressão é diferente do valor da segunda? 23 <> 33 ' True

23 <> 23 ' False

23 <> 12 ' True

< (Menor que) O valor da primeira expressão é menor que o valor da segunda? 23 < 33 ' True

23 < 23 ' False

23 < 12 ' False

> (Maior que) O valor da primeira expressão é maior que o valor do segundo? 23 > 33 ' False

23 > 23 ' False

23 > 12 ' True

<= (Menor que ou igual a) O valor da primeira expressão é menor ou igual ao valor do segundo? 23 <= 33 ' True

23 <= 23 ' True

23 <= 12 ' False

>= (Maior ou igual a) O valor da primeira expressão é maior ou igual ao valor do segundo? 23 >= 33 ' False

23 >= 23 ' True

23 >= 12 ' True

Comparando cadeias de caracteres

Visual Basic compara cadeias de caracteres usando o operador Like , bem como os operadores de comparação numéricos. O Like operador permite que você especifique um padrão. Em seguida, a cadeia de caracteres é comparada com o padrão e, se corresponder, o resultado será True . Caso contrário, o resultado será False. Os operadores numéricos permitem comparar String valores com base em sua ordem de classificação, como mostra o exemplo a seguir.

"73" < "9"

' The result of the preceding comparison is True.

O resultado no exemplo anterior é porque o primeiro caractere na primeira cadeia de caracteres é True classificado antes do primeiro caractere na segunda cadeia de caracteres. Se os primeiros caracteres forem iguais, a comparação continuaria com o próximo caractere em ambas as cadeias, e assim por diante. Você também pode testar a igualdade de cadeias de caracteres usando o operador de igualdade, como mostra o exemplo a seguir.

"734" = "734"

' The result of the preceding comparison is True.

Se uma cadeia de caracteres for um prefixo de outro, como "AA" e "AAA", a cadeia de caracteres mais longa será considerada maior que a cadeia de caracteres mais curta. O exemplo a seguir ilustra essa situação.

"aaa" > "aa"

' The result of the preceding comparison is True.

A ordem de classificação é baseada em uma comparação binária ou em uma comparação textual, dependendo da configuração de Option Compare . Para obter mais informações , consulte Option Compare Statement.

Comparando objetos

Visual Basic compara duas variáveis de referência de objeto com o operador Is e o operador IsNot. Você pode usar qualquer um desses operadores para determinar se duas variáveis de referência referem-se à mesma instância de objeto. O exemplo a seguir ilustra essa situação.

Dim x As testClass Dim y As New testClass() x = y If x Is y Then ' Insert code to run if x and y point to the same instance. End If

No exemplo anterior, x Is y é avaliado True como, porque ambas as variáveis referem-se à mesma instância. Compare esse resultado com o exemplo a seguir.

Dim x As New customer() Dim y As New customer() If x Is y Then ' Insert code to run if x and y point to the same instance. End If

No exemplo anterior, x Is y é avaliado False como, porque embora as variáveis se refiram a objetos do mesmo tipo, eles se referem a diferentes instâncias desse tipo.

Quando você deseja testar dois objetos que não apontam para a mesma instância, o IsNot operador permite evitar uma combinação de e atarefado de forma gramatical de Not e Is . O exemplo a seguir ilustra essa situação.

Dim a As New classA() Dim b As New classB() If a IsNot b Then ' Insert code to run if a and b point to different instances. End If

No exemplo anterior, If a IsNot b é equivalente a If Not a Is b .

Comparando tipo de objeto

Você pode testar se um objeto é de um tipo específico com a TypeOf expressão... Is . A sintaxe dela é a seguinte:

TypeOf <objectexpression> Is <typename>

Quando typename especifica um tipo de interface, a TypeOf expressão... Is retorna True se o objeto implementa o tipo de interface. Quando typename é um tipo de classe, a expressão retorna True se o objeto é uma instância da classe especificada ou de uma classe que deriva da classe especificada. O exemplo a seguir ilustra essa situação.

Dim x As System.Windows.Forms.Button x = New System.Windows.Forms.Button() If TypeOf x Is System.Windows.Forms.Control Then ' Insert code to run if x is of type System.Windows.Forms.Control. End If

No exemplo anterior, a TypeOf x Is Control expressão é avaliada True como porque o tipo de x é, que é Button herdado de Control .

Para obter mais informações, consulte operador typeof.

Confira também