SORU
20 Mart 2014, PERŞEMBE


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
20 Mart 2014, PERŞEMBE


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 *aa23 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 olamaz a 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 karakter a 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 karakter a 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".

enter image description here


Ö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:

enter image description here


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • atKristaBradford

    atKristaBrad

    4 Aralık 2010
  • Austin Evans

    Austin Evans

    5 AĞUSTOS 2007
  • ethr95awd

    ethr95awd

    8 Kasım 2006