programing

Excel VBA: ActiveCell이 "*string*"을 좋아하면 Case 선택

skycolor 2023. 10. 4. 21:06
반응형

Excel VBA: ActiveCell이 "*string*"을 좋아하면 Case 선택

현재 값을 사용하는 매크로 작업을 하고 있습니다.ActiveCell선택한 경우에 따라 값을 변경합니다.

그러나, 나는 그것이 그들의 것인지를 결정할 수 없습니다.ActiveCell와일드 카드 문자열을 포함합니다.제 구문이 맞는지 잘 모르겠습니다.선택한 케이스를 비교하려면 어떻게 해야 합니까?

Select Case ActiveCell.Value

    Case ActiveCell.Value Like "*string*"
        ActiveCell.Value = "contains string"

End Select

와일드카드 사용이 가능합니다.다음 두 가지 사항을 명심하십시오.첫째, 문자열 비교 식을 부울 데이터 형식(True/False)으로 평가합니다.둘째, Select...(선택...)에 대한 개발자 참조에 따라대소문자명세서, 모든 대소문자식은 대소문자 선택 시험식과 동일한 데이터 형식으로 "묵시적으로 변환"되어야 합니다.시연을 위해 위의 원래 게시물의 코드를 사용해 보겠습니다.

Select Case ActiveCell.Value  '-->ActiveCell.Value is the test expression

    Case ActiveCell.Value Like "*string*"  '-->(ActiveCell.Value Like "*string*") is the Case expression.
        ActiveCell.Value = "contains string"

End Select

워크시트에서 문자열 값을 포함하는 셀을 선택한 다음 즉시 창을 사용하여 유형 이름() 함수를 사용하여 이 두 식의 데이터 유형을 테스트하면 다음을 얻을 수 있습니다.

?TypeName(ActiveCell.Value)
 String
?TypeName(ActiveCell.Value Like "*string*")
 Boolean

보시다시피 선택...데이터 유형이 암시적으로 동일하지 않기 때문에 대소문자는 여기서 작동하지 않습니다(이에 대한 약간의 예외는 매크로가 "True" 또는 "False"의 단일 단어 값을 포함하는 워크시트의 셀에서 실행된 경우이며, Excel은 이 값을 자동으로 부울로 변환합니다).

그 해결책은 사실 매우 간단합니다.테스트 식을 True로 변경합니다.

Select Case True

    Case (ActiveCell.Value Like "*string*")
        ActiveCell.Value = "contains string"

End Select

이는 기본적으로 다음과 같습니다.

If (ActiveCell.Value Like "*string*") = True Then ActiveCell.Value = "contains string"

주로 개인의 취향에 따라 결정됩니다. 만약...그런 다음 또는 선택...케이스요 저는 개인적으로 셀렉트...Case 구성은 코드의 가독성뿐만 아니라 다른 이점(예: 각 Case를 OR 연산자를 사용하는 대신 쉼표로 구분된 표현 목록을 통과하여 코드를 보다 간결하게 만드는 기능)으로 인해 발생합니다.

is 및 like는 VBA의 select case 문에서 비교 연산자로 사용할 수 없습니다.
가능하다면 if-then 문장으로 대체하는 것이 더 나을 것입니다.

If ActiveCell.Value Like "*string*" Then ActiveCell.Value = "string"

비교 연산자를 위한 VBA 용어집에서:

둘 이상의 값 또는 식 사이의 관계를 나타내는 문자 또는 기호입니다.이러한 연산자에는 (<) 미만, (<=) 미만, (<=) 이상, (>=) 이상, 동일하지 않음(<>) 및 동일함(=)이 포함됩니다.추가 비교 연산자로는 Is 및 Like가 있습니다.Is and Like는 Select Case 문에서 비교 연산자로 사용할 수 없습니다.

언급URL : https://stackoverflow.com/questions/18409418/excel-vba-select-case-if-activecell-like-string

반응형