เท่ากับ“! =” ใน Excel VBA คืออะไร


96

ปัญหาคือ!=ไม่ทำงานเป็นฟังก์ชันใน 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
คุณแน่ใจว่ามันเป็น!=และไม่ได้<>?
Sergey Kalinichenko

คำถามของคุณคืออะไร? ทำไม!=ไม่ทำงานใน vba หรือตัวดำเนินการอสมการใน vba คืออะไร?
GSerg

คำตอบ:


154

เนื่องจากตัวดำเนินการอสมการใน VBA คือ <>

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

ตัวดำเนินการ!=ถูกใช้ใน C #, C ++


29

ใน VBA ตัว!=ดำเนินการคือตัวNotดำเนินการดังนี้:

If Not strTest = "" Then ...

5
สิ่งนี้ไม่ถูกต้อง Notคือตัวดำเนินการผกผันตรรกะซึ่งสอดคล้องกับ!ภาษาสไตล์ C
Zev Spitz

7

เพียงแค่ทราบ หากคุณต้องการเปรียบเทียบสตริง ""ในกรณีของคุณให้ใช้

If LEN(str) > 0 Then

หรือแม้กระทั่ง

If LEN(str) Then

แทน.


6
ฉันรู้ว่าสำหรับคนที่ค่อนข้างใหม่สำหรับ VBA คำตอบนี้อาจดูแปลก แต่เชื่อหรือไม่ว่า FAR มีประสิทธิภาพมากกว่าการตรวจสอบกับ<> ""
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 ไม่ทำเช่นนั้น มีคนทำเกณฑ์มาตรฐานด้วยผลลัพธ์ที่Len(str) > 0เร็วเป็นสองเท่าstr <> ""สำหรับการทำซ้ำ 10 ล้านครั้ง ที่กล่าวว่าเรากำลังพูดถึงมากไมโครเพิ่มประสิทธิภาพนี่ (0.36 เทียบกับ 0.72 วินาทีสำหรับ 10 ล้านซ้ำ) str <> ""ดังนั้นฉันแน่นอนจะติดกับการอ่านมากขึ้น
Heinzi

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.