Excel VBA'daki "! =" Eşdeğeri nedir?


95

Sorun şu ki !=, excel vba'da bir işlev olarak çalışmıyor.

Kullanabilmek istiyorum

If strTest != "" Then onun yerine If strTest = "" Then

Bunu yapmak için başka bir yaklaşım var mı !=?

Mimik Benim fonksiyon !=DİR

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
Eğer emin misin !=değil <>?
Sergey Kalinichenko

Sorun nedir? Neden !=vba'da çalışmıyor veya vba'daki eşitsizlik operatörü nedir?
GSerg

Yanıtlar:


154

Çünkü VBA'daki eşitsizlik operatörü <>

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

operatör !=C #, C ++ 'da kullanılır.


28

VBA'da !=operatör, şu şekilde Notoperatördür:

If Not strTest = "" Then ...

5
Bu yanlış. Notmantıksal ters çevirme operatörüdür !ve C tarzı dillere karşılık gelir .
Zev Spitz

7

Sadece bir not. Sizin durumunuzda bir dizeyi karşılaştırmak istiyorsanız "", şunu kullanın:

If LEN(str) > 0 Then

ya da sadece

If LEN(str) Then

yerine.


6
Ben, bu cevap, çok tuhaf gelebilir biraz yeni VBA insanlara biliyorum ama bu, ister inanın ister inanmayın, karşı kontrol ÇOK daha verimlidir<> ""
LimaNightHawk

6
Bu yanıtı desteklemek için eğlenceli gerçek: Visual Basic ve Pascal dilleri dizeleri başlangıçta uzunluklarıyla ve hemen ardından içeriğin kendisiyle birlikte saklar. Öte yandan C tabanlı ve Java dilleri uzunluğu saklamaz ve dizenin bittiğini bildirmek için '\ 0' (boş) sonlandırıcıya sahip değildir. Bu nedenle, VBA'da uzunluk elde etmek hızlıdır - yalnızca bellekten bir tamsayı okumaktır - ve Java'da yavaştır - dizeyi yinelemeniz gerekir.
Paulo Avelar

1
@LimaNightHawk çok daha verimli? Bunu biraz detaylandırır mısınız lütfen? Sanırım modern derleyicilerin çoğu kalıbı yakalar <> ""ve ile aynı p kodunu üretir Len(str).
Roland

@Roland Bu, VBA'nın dizeleri bellekte nasıl sakladığıyla ilgilidir. Ben daha eksiksiz bir açıklama için Google'a izin vereceğim, ama kısacası dizeleri depolandığı nasıl bir parçası ilk bayt sonra aşağıdaki bayt karakterleri depolamak, dize uzunluğunu depolamak olmasıdır: [3][C][A][T]. "Boş" bir dizge, [0]ilk baytlar için bir dizgeye sahiptir Lenve kodun yalnızca Tamsayıları kontrol etmesine ve karşılaştırmasına izin verir. Ek olarak, bir = ""saniye yaptığınızda "", önce bellekte kendi dizesi olarak tahsis edilmeli, ardından hedef dizenizle karşılaştırılmalıdır.
LimaNightHawk

@Roland: Bu kolay bir optimizasyon olurdu, ancak görünüşe göre VBA derleyicisi bunu yapmıyor. Birisi, 10 milyon yinelemeden Len(str) > 0yaklaşık iki kat daha hızlı sonuç veren bir karşılaştırma yaptıstr <> "" . Bununla birlikte, burada aşırı mikro optimizasyondan bahsediyoruz (10 milyon yineleme için 0,36'ya karşı 0,72 saniye), bu yüzden kesinlikle daha okunaklı olana bağlı kalacağım str <> "".
Heinzi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.