Tương đương với “! =” Trong Excel VBA là gì?


95

Vấn đề là !=nó không hoạt động như một hàm trong excel vba.

Tôi muốn có thể sử dụng

If strTest != "" Then thay vì If strTest = "" Then

Có cách tiếp cận nào khác để làm điều này bên cạnh !=?

Chức năng bắt chước của tôi !=

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
Bạn có chắc nó !=và không <>?
dasblinkenlight

Câu hỏi của bạn là gì? Tại sao !=không hoạt động trong vba, hoặc toán tử bất đẳng thức trong vba là gì?
GSerg

Câu trả lời:


154

Vì toán tử bất đẳng thức trong VBA là <>

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

toán tử !=được sử dụng trong C #, C ++.


28

Trong VBA, !=toán tử là Nottoán tử, như sau:

If Not strTest = "" Then ...

5
Điều này là không đúng. Notlà toán tử nghịch đảo logic, tương ứng với !ngôn ngữ kiểu C.
Zev Spitz

7

Chỉ là một ghi chú. Nếu bạn muốn so sánh một chuỗi với "", trong trường hợp của bạn, hãy sử dụng

If LEN(str) > 0 Then

hoặc thậm chí chỉ

If LEN(str) Then

thay thế.


6
Tôi biết những người hơi mới để VBA, câu trả lời này có vẻ lạ, nhưng điều này, tin hay không, là FAR hiệu quả hơn so với kiểm tra chống lại<> ""
LimaNightHawk

6
Sự thật thú vị để chứng minh câu trả lời này: Ngôn ngữ Visual Basic và Pascal lưu trữ các chuỗi với độ dài của chúng ở đầu và nội dung của chính nó ngay sau đó. Mặt khác, các ngôn ngữ dựa trên C và Java không lưu trữ độ dài và có dấu kết thúc '\ 0' (null) để báo hiệu rằng chuỗi đã kết thúc. Do đó, việc lấy độ dài trong VBA rất nhanh - nó chỉ đọc một số nguyên từ bộ nhớ - và chậm trong Java - bạn cần phải lặp qua chuỗi.
Paulo Avelar

1
@LimaNightHawk xa hiệu quả hơn? Bạn có thể giải thích thêm về điều đó được không? Tôi đoán rằng hầu hết các trình biên dịch hiện đại sẽ bắt kịp mẫu <> ""và tạo ra mã p giống như Len(str).
Roland

@Roland Điều này liên quan đến cách VBA lưu trữ chuỗi trong bộ nhớ. Tôi sẽ cho bạn Google cho một lời giải thích đầy đủ hơn, nhưng trong ngắn hạn, một phần của cách chuỗi được lưu trữ là các byte đầu tiên lưu trữ độ dài của chuỗi, sau đó các byte sau lưu trữ các ký tự: [3][C][A][T]. Một chuỗi "trống" có một [0]cho các byte đầu tiên và việc kiểm tra dấu Lencho phép mã chỉ kiểm tra và so sánh các Số nguyên. Ngoài ra, khi bạn thực hiện một = "", giây ""đó phải được cấp phát làm chuỗi của chính nó trước trong bộ nhớ, sau đó được so sánh với chuỗi mục tiêu của bạn.
LimaNightHawk

@Roland: Đó sẽ là một cách tối ưu hóa dễ dàng, nhưng rõ ràng là trình biên dịch VBA không làm được điều đó. Ai đó đã thực hiện một điểm chuẩn với kết quả Len(str) > 0nhanh gấp đôi so str <> ""với 10 triệu lần lặp. Điều đó nói rằng, chúng ta đang nói về tối ưu hóa vi mô cực độ ở đây (0,36 so với 0,72 giây cho 10 triệu lần lặp), vì vậy tôi chắc chắn sẽ gắn bó với cái dễ đọc hơn str <> "".
Heinzi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.