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.