Nasıl Microsoft Excel Düzenli İfadeler (Düzenli)-hücre döngüsü ve her ikisini de kullanmak
Nasıl Excel düzenli ifadeler kullanmak ve veri işleme için Kur gibi Excel güçlü ızgara faydalanabilir miyim?
- Hücre içi eşleşen deseni döndürmek için işlev ya da dize değeri değiştirilir.
- Veri bir sütun döngü ve ayıklamak için alt bitişik hücrelere maçlar.
- Ne kurulum gerekli mi?
- Düzenli ifadeler için Excel özel karakterler nelerdir?
Düzenli excel benzer manipülasyonlar içinLeft
, Mid
, , * Right
*10 yazın komutlarını kullanabilirsiniz beri birçok durum (To use or not to use regular expressions?) için ideal değil anladığım kadarıyla.
CEVAP
Regular expressions Desen Eşleştirme için kullanılır.
Excel kullanmak için aşağıdaki adımları izleyin :
Adım 1: VBA Add reference "Microsoft VBScript Düzenli İfadeler 5.5"
- Seçin "Geliştirici" sekmesinde (I don't have this tab what do I do?)
- Ardından "Visual Basic" 'Kod' kurdele bölüm . simge
- Uygulamalar "" "üst menüden. Araçlar penceresinde" Microsoft Visual Basic
- "Kaynaklar" Seçeneğini Seçin
- Onay kutusunu yanındaki "Microsoft VBScript Düzenli İfadeler 5.5" vardır kitabınız.
- "". I
Adım 2: Desen tanımlayın
Temel tanımlar:
-
Dizi.
- E. g.
a-z
harfler a dan z daha düşük bir uyan - E. g.
0-5
0-5 arasında herhangi bir sayı ile eşleşir
[]
Bu parantez içindeki nesnelerin tam bir Eşleşme.
- E. g.
[a]
harf bir kibrit - E. g.
[abc]
a, b veya c olabilir, tek bir harf ile eşleşir - E. g.
[a-z]
alfabenin küçük harf tek bir harf ile eşleşir.
()
Gruplar farklı iade amaçlı maçlar. Aşağıdaki örneklere göz atın.
{}
desen daha önce tanımlanmış tekrarlanan kopyalar için Çarpan.
- E. g. Arka arkaya iki küçük harf harf bir kibrit
[a]{2}
:aa
- E. g.
[a]{1,3}
en az bir ve üç küçük harf, *,aaa
*aa
23 mektup. maçlar
desen daha önce tanımlanmış en az bir veya daha fazla Maç.
- E. g.
a
ardışık, *,aaa
, **29 ... *28 ve böylece maç olacak
?
desen daha önce tanımlanmış sıfır veya bir Maç.
- E. g. Desen olabilir ya da olmayabilir ama sadece bir kez eşleşti.
- E. g.
[a-z]?
boş dize veya küçük harf tek bir harf ile eşleşir.
*
Maç veya daha fazla desen, daha önce tanımlanmış sıfır.
- E. g. Olabilir veya mevcut olmayabilir desen joker.
- E. g. [a-z]*
boş dize veya küçük harf harf dize eşleşir.
.
satır \n
dışında herhangi bir karakterle Eşleşir
- E. g.
a.
iki karakter bir dize ile başlayan ve\n
dışında bir şey ile biten Maçlar
|
VEYA operatör
- E. g.
a|b
a
b
uyumlu olamaz yani ya. - E. g.
red|white|orange
renkler tam uyuyor.
^
operatör DEĞİL
- E. g.
[^0-9]
karakter bir sayı içerebilir - E. g.
[^aA]
karakter küçük harf olamaza
A
büyük harf
\
aşağıdaki özel karakter (yukarıdaki davranış geçersiz kılar) Kaçar
- E. g. **,
\\
,\(
, , *, *55\?
*54 50*
Demir Desenleri:
^
Maç dizenin başında gerçekleşmesi gerekir
- E. g.
^a
İlk karaktera
harf, küçük harf olmalıdır - E. g.
^[0-9]
İlk karakter bir sayı olmalıdır.
$
Maç dizenin sonunda gerçekleşmesi gerekir
- E. g.
a$
Son karaktera
harf, küçük harf olmalıdır
Masa öncelik:
Order Name Representation
1 Parentheses ( )
2 Multipliers ? * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
Önceden Tanımlanmış Karakter Kısaltmalar:
abr same as meaning
\d [0-9] Any single digit
\D [^0-9] Any single character that's not a digit
\w [a-zA-Z0-9_] Any word character
\W [^a-zA-Z0-9_] Any non-word character
\s [ \r\t\n\f] Any space character
\S [^ \r\t\n\f] Any non-space character
\n [\n] New line
Örnek 1:Makro olarak çalıştırmak
Aşağıdaki örnek makroyu değeri hücreye A1
Eğer ilk 1 veya 2 karakter rakam olup olmadığını görmek için bakar. Eğer öyleyse, bunlar kaldırılır ve dize geri kalanı görüntülenir. Eğer değilse, o zaman bir kutu eşleşme bulundu bildiren görünür. Hücre A1
değerler 12abc
döndürür abc
değer 1abc
döndürür abc
değer abc123
döndürecektir "Eşleşen" çünkü rakam değildi başlangıç dizesi.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1")
If strPattern <> "" Then
strInput = Myrange.Value
strReplace = ""
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
End Sub
Örnek 2:-Hücre fonksiyonu olarak çalıştırın
Bu örnek, örnek 1 ile aynıdır, ancak Kur-hücre fonksiyonu olarak çalıştırmaktır. Kullanmak için bu kodu değiştirin:
Function simpleCellRegex(Myrange As Range) As String
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim strOutput As String
strPattern = "^[0-9]{1,3}"
If strPattern <> "" Then
strInput = Myrange.Value
strReplace = ""
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
simpleCellRegex = regEx.Replace(strInput, strReplace)
Else
simpleCellRegex = "Not matched"
End If
End If
End Function
Dizeleri ("12abc") hücre A1
. Hücre =simpleCellRegex(A1)
B1
ve sonuç olacak bu formülü girin "abc".
Örnek 3:Dizi Döngü
Bu örnek, örnek 1 ile aynıdır, ancak bir hücre aralığı döngüsü.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A5")
For Each cell In Myrange
If strPattern <> "" Then
strInput = cell.Value
strReplace = ""
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
Next
End Sub
Örnek 4: Birbirinden farklı desen bölme
Bu örnek, bir dizi(A1
, A2
& A3
) döngüsü ve bir dize üç basamaklı tek bir alfa karakter ve 4 sayısal basamak ile izlenen başlayarak arar. Çıkış desen ()
kullanarak hücre maçlar parçalara böler. $1
ilk desen ()
ilk kümesi içinde eşleşen temsil eder.
Private Sub splitUpRegexPattern()
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A3")
For Each C In Myrange
strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})"
If strPattern <> "" Then
strInput = C.Value
strReplace = "$1"
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
C.Offset(0, 1) = regEx.Replace(strInput, "$1")
C.Offset(0, 2) = regEx.Replace(strInput, "$2")
C.Offset(0, 3) = regEx.Replace(strInput, "$3")
Else
C.Offset(0, 1) = "(Not matched)"
End If
End If
Next
End Sub
Sonuçlar:
Ek Desen Örnekleri
String Regex Pattern Explanation
a1aaa [a-zA-Z][0-9][a-zA-Z]{3} Single alpha, single digit, three alpha characters
a1aaa [a-zA-Z]?[0-9][a-zA-Z]{3} May or may not have preceeding alpha character
a1aaa [a-zA-Z][0-9][a-zA-Z]{0,3} Single alpha, single digit, 0 to 3 alpha characters
a1aaa [a-zA-Z][0-9][a-zA-Z]* Single alpha, single digit, followed by any number of alpha characters
</i8> \<\/[a-zA-Z][0-9]\> Exact non-word character except any single alpha followed by any single digit
Nasıl bulma komutu ile düzenli ifade k...
Nasıl birden çok hatları üzerinden Jav...
Nasıl bash komut düzenli ifadeler kull...
Nasıl birimi düzenli ifadeler test mus...
Nasıl bir dize kontrol etmek için bir ...