programing

VBA에서 단어를 비교할 때 대소문자 민감도를 제거합니까?

goodsources 2023. 5. 1. 21:01
반응형

VBA에서 단어를 비교할 때 대소문자 민감도를 제거합니까?

저는 사용자가 주소를 입력하고 주소의 요소를 데이터베이스와 일치시켜 위치를 찾을 수 있는 VBA 프로그램을 개발하고 있습니다.

불행하게도, 저는 사례 민감성에 대한 반복적인 문제를 겪고 있습니다.

예를 들어 이 코드를 사용하는 경우:

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

활성 세포의 값을 내 데이터베이스의 단어 목록과 비교할 것입니다.문제는, 만약 내 활성 세포에서 단어가 "miaami" 또는 "MIAMI"이고 데이터베이스에 "miaami"만 있다면, 그것은 작동하지 않을 것이라는 것입니다.

다른 예:

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

동일한 문제입니다. 동일한 케이스로 쓰여진 단어만 작동합니다.

이걸 어떻게 없앨 수 있죠?특히 귀찮고 가능한 모든 경우에 데이터베이스를 다시 쓸 수 없습니다!

모듈 레벨에서 발행할 수 있는 명령문이 있습니다.

Option Compare Text

이렇게 하면 모든 "텍스트 비교" 대소문자가 구분되지 않습니다.즉, 다음 코드에 "this is true" 메시지가 표시됩니다.

Option Compare Text

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

를 들어 http://www.ozgrid.com/VBA/vba-case-sensitive.htm 을 참조하십시오. 모든 인스턴스에 대한 문제를 완전히 해결할 수 있을지 확신할 수 없습니다(예:Application.Match기능) 하지만 그것은 모든 것을 처리할 것입니다.if a=b진술들.에 대해서는Application.Match다음을 사용하여 인수를 대문자 또는 소문자로 변환할 수 있습니다.LCase기능.

두 값을 소문자로 변환하여 비교할 수 있습니다.

다음은 예입니다.

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

비교할 목록이 큰 경우(위 예제의 manilaListRange 범위) 일치 기능을 사용하는 것이 현명합니다.이는 절차를 지연시킬 수 있는 루프의 사용을 방지합니다.마닐라 리스트 범위가 모두 대문자인지 소문자인지 확인할 수 있다면 이것이 저에게 가장 좋은 옵션인 것 같습니다.매치할 때 'UCase' 또는 'LCase'를 빠르게 적용할 수 있습니다.

ManilaListRange를 제어할 수 없는 경우에는 'search', 'Instr', 'replace' 등을 비교할 수 있는 여러 가지 방법이 있는 이 범위를 반복해야 할 수도 있습니다.

그것은 약간의 해킹이지만 그 일을 할 것입니다.

Function equalsIgnoreCase(str1 As String, str2 As String) As Boolean
    equalsIgnoreCase = LCase(str1) = LCase(str2)
End Function

언급URL : https://stackoverflow.com/questions/17035660/in-vba-get-rid-of-the-case-sensitivity-when-comparing-words

반응형