Excel VBA에서 "! ="에 해당하는 것은 무엇입니까?


95

문제는 !=Excel vba에서 함수로 작동하지 않는다는 것입니다.

나는 사용하고 싶다

If strTest != "" Then 대신에 If strTest = "" Then

이것 외에 다른 접근 방법이 !=있습니까?

모방하는 내 기능 !=

Sub test()

Dim intTest As Integer
Dim strTest As String

intTest = 5

strTest = CStr(intTest) ' convert

Range("A" + strTest) = "5"



    For i = 1 To 10
        Cells(i, 1) = i

        If strTest = "" Then
            Cells(i, 1) = i
        End If

    Next i


End Sub

1
확실 !=하지 <>않습니까?
dasblinkenlight

귀하의 질문은 무엇인가? !=vba에서 작동하지 않는 이유 또는 vba에서 부등식 연산자는 무엇입니까?
GSerg

답변:


154

VBA의 부등식 연산자는 <>

If strTest <> "" Then
    .....

연산자 !=는 C #, C ++에서 사용됩니다.


28

VBA에서 !=연산자는 다음 Not과 같이 연산자입니다 .

If Not strTest = "" Then ...

5
이것은 올바르지 않습니다. C 스타일 언어에 Not해당하는 논리 반전 연산자 !입니다.
Zev Spitz

7

메모입니다. ""귀하의 경우에 문자열을 비교 하려면

If LEN(str) > 0 Then

아니면 그냥

If LEN(str) Then

대신.


6
나는이 대답이 이상한 것처럼 보일 수 다소 새로운 VBA 명으로 알고 있지만이, 믿거 나 말거나,에 대해 확인보다 훨씬 더 효율적이다<> ""
LimaNightHawk

6
이 답변을 뒷받침하는 재미있는 사실 : Visual Basic 및 Pascal 언어는 처음에 길이가있는 문자열을 저장하고 그 직후에 콘텐츠 자체를 저장합니다. 반면 C 기반 및 Java 언어는 길이를 저장하지 않으며 문자열이 끝났음을 알리는 '\ 0'(null) 종결자를 갖습니다. 그 때문에 VBA에서 길이를 가져 오는 것은 빠르며-메모리에서 정수를 읽는 것 뿐이며 Java에서는 느립니다. 문자열을 반복해야합니다.
Paulo Avelar

1
@LimaNightHawk 훨씬 더 효율적입니까? 그것에 대해 자세히 설명해 주시겠습니까? 나는 대부분의 현대적인 컴파일러 패턴을 잡을 것이라고 추측 <> ""과 같은 P-코드를 생성 Len(str).
Roland

@Roland 이것은 VBA가 메모리에 문자열을 저장하는 방법과 관련이 있습니다. 더 자세한 설명을 위해 Google을 사용하도록하겠습니다. 간단히 말해서 문자열이 저장되는 방법의 일부는 첫 번째 바이트가 문자열의 길이를 저장하고 다음 바이트가 문자를 저장한다는 것 [3][C][A][T]입니다.. "빈"문자열은 [0]첫 번째 바이트에 대해가 있고를 확인 Len하면 코드가 정수를 확인하고 비교할 수 있습니다. 또한, = ""그 초 ""를 메모리에 먼저 자체 문자열로 할당 한 다음 대상 문자열과 비교해야합니다.
LimaNightHawk

@Roland : 쉽게 최적화 할 수 있지만 VBA 컴파일러는이를 수행하지 않습니다. 누군가 1000 만 번의 반복 Len(str) > 0보다 약 두 배 빠른 결과 로 벤치 마크str <> ""수행했습니다. 즉, 여기서는 극도의 마이크로 최적화 에 대해 이야기하고 있습니다 (1,000 만 회 반복의 경우 0.36 초 대 0.72 초). 따라서 더 읽기 쉬운 str <> "".
Heinzi

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.