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
'programing' 카테고리의 다른 글
Table Plus에서 로컬 도커 데이터베이스 인스턴스에 연결 (0) | 2023.10.04 |
---|---|
게시물에서 '업데이트'를 클릭하는 것이 프로그램적으로 게시물을 만드는 것과 어떻게 다릅니까? (0) | 2023.10.04 |
Android 응용프로그램이 백그라운드에서 실행 중인지 확인 (0) | 2023.09.24 |
XPath, XQuery 및 XPointer의 차이 (0) | 2023.09.24 |
동일한 신호에 대해 여러 개의 신호 처리기를 갖는 것이 유효합니까? (0) | 2023.09.24 |