VBA “like” yapması gerekeni yapmaz


0

Yaklaşık 2500 satırlık bir listem var ve ilk sütunda "intern" ve ardından ":" kelimelerinin bir döngüde görünüp görünmediğini kontrol etmek istiyorum (:: stajyerden sonra herhangi bir pozisyonda olabilir)

Kodun önemli kısmı şuna benzer:

For k = 1 To lastrowND
intern = Worksheets("new Data").Cells(k, 1).Value


If Not intern Like "*intern*:" Then

Ancak bu komut hiçbir şeyi filtrelemez. Benim hatam nerde?

Çok teşekkür ederim


Sonunda nedeniyle başarısız olduğunu tahmin ediyorum.
— LPChip

Değerlerin herhangi birinin gerçekte aradığınız kalıpla doldurulduğunu onayladınız mı (bir kesme noktası aracılığıyla)? Diğer (daha temel) desenler beklendiği gibi çalışıyor mu?
— Ƭᴇcʜιᴇ007

Evet, sadece "stajyer" kelimesini aradığında kod çalışıyordu, ancak ":" dizginin herhangi bir yerine gelmesi şartına ihtiyacım var
— Mario Adenauer

Yanıtlar:


4

Verilerinizde iki noktadan sonra herhangi bir şey varsa, *doğru testi için bir ek ihtiyacınız olacaktır . ( *intern*:*)

Regex, önde gelen ve sonunda joker karakterleri istediğinizi varsaymak için varsayılandır. Düzenli ifadeler delicesine güçlü olabilir, bu nedenle vaktiniz varsa onlarla oynamak biraz zaman alabilir.


4

Bunun gibi normal ifadeleri kullanmaya çalışın:

Dim strPattern As String: strPattern = "intern(.*?):"
Dim regEx As New RegExp

' ...

With regEx
     .Global = True
     .IgnoreCase = False
     .Pattern = strPattern
End With

For k = 1 To lastrowND
   intern = Worksheets("new Data").Cells(k, 1).Value

   If Not regEx.Test(intern) Then
   ' ...

1
Bu çok umut verici görünüyor ama bu fonksiyonla hiç çalışmadım. [Worksheets ("new Data") döngüsünü tam olarak nasıl birleştiririm. Hücreler (k, 1) .Value] bu komutla? Yine de thx
— Mario Adenauer

Mario, döngüdeki hiçbir şeyi değiştirmene gerek yok! Sadece döngü Yeni RegExp Dim regEx dışına tanımlamak ve kullanmak "If Not regEx.Test (stajyer) Sonra" yerine "gibi Eğer değil stajyer" stajyer : "O". Ayrıca cevabımı da değiştirdim, lütfen bir göz atın.
— dostum

Kod düzenlemeniz için teşekkürler. Ancak satırına işaret kod compli yapamam Dim regEx As Yeni RegExp
— Mario Adenauer 15

Muhtemelen sadece bazı bağımlılıklar eksik. Araçlar -> Referanslar -> "Microsoft VBScript Normal İfadeler" i bul ve kontrol et
— duDE

Yardımın için teşekkürler dostum. Yorik, yukarıdaki yorumda " intern :" yerine sağ göstericiyi verdi, dize genelde sonunda bitmeyen bir tane daha eklemeliydim *.
— Mario Adenauer 15
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.