visual valor textos parecidos operadores hojas diferentes devolver comparar comparacion como columnas celdas cadenas archivos excel vba excel-vba case-sensitive

excel - valor - operadores de comparacion en visual basic



¿En VBA deshacerse de la sensibilidad del caso al comparar palabras? (3)

Hay una declaración que puede emitir a nivel de módulo:

Option Compare Text

Esto hace que todas las "comparaciones de texto" sean insensibles. Esto significa que el siguiente código mostrará el mensaje "esto es cierto":

Option Compare Text Sub testCase() If "UPPERcase" = "upperCASE" Then MsgBox "this is true: option Compare Text has been set!" End If End Sub

Ver, por ejemplo, http://www.ozgrid.com/VBA/vba-case-sensitive.htm . No estoy seguro de que solucione completamente el problema para todas las instancias (como la función Application.Match ) pero se encargará de todas las declaraciones if a=b . En cuanto a Application.Match , es posible que desee convertir los argumentos a mayúsculas o minúsculas utilizando la función LCase .

Estoy trabajando en un programa VBA que le permitiría al usuario escribir una dirección y encontrar la ubicación haciendo coincidir los elementos de la dirección con una base de datos.

Desafortunadamente, estoy teniendo un problema recurrente con la sensibilidad al caso.

Por ejemplo, cuando estoy usando este código:

For i = 11 To lRowB Range("B" & i).Activate myResult = IsNumeric(Application.Match(ActiveCell.Value, manilaListRange, 0))

Va a comparar el valor de la celda activa con una lista de palabras de mi base de datos. El problema es que si en mi celda activa la palabra es "miami" o "MIAMI" y solo "Miami" está en la base de datos, no funcionará ...

Otro ejemplo:

If Range("J6").Value = "tawi" Then Range("J6").Value = "Tawi-Tawi" End If

Mismo problema, solo la palabra escrita con el mismo caso funcionará.

¿Cómo puedo deshacerme de esto? ¡Es particularmente molesto y no puedo reescribir mi base de datos en cada combinación de casos posible!

Gracias por adelantado !


Puede convertir ambos valores a minúsculas y comparar.

Aquí hay un ejemplo:

If LCase(Range("J6").Value) = LCase("Tawi") Then Range("J6").Value = "Tawi-Tawi" End If


Si la lista con la que se compara es grande (es decir, el rango manilaListRange en el ejemplo anterior), es un movimiento inteligente utilizar la función de coincidencia. Evita el uso de un bucle que podría ralentizar el procedimiento. Si puede asegurarse de que manilaListRange esté en mayúsculas o en minúsculas, entonces esta me parece la mejor opción. Es rápido aplicar ''UCase'' o ''LCase'' a medida que haces tu juego.

Si no tenía control sobre ManilaListRange, entonces podría tener que recurrir a este rango, en cuyo caso hay muchas formas de comparar ''buscar'', ''Instr'', ''reemplazar'', etc.