VBA Dize İşleme İşlevleri ve Operaları

⚡ Akıllı Özet

VBA Dize İşleme Fonksiyonları ve OperaTorslar birleştirir, ölçer ve çıkarır.tracExcel makrolarının içindeki metin. Bu sayfa, birleştirme operatörünü, Left, Right, Mid, Len ve InStr fonksiyonlarını, bölme ve birleştirme işlemlerini ve metin kodunu en sık bozan hataları açıklamaktadır.

  • 🔤 Dize Verileri: Jul-2015 metni gibi karakterler, semboller ve sayılardan oluşturulmuş bir değer.
  • birbirine bağlama Operator: Ampersand işareti iki dizeyi birleştirir, bu nedenle "John" ve "Doe" ifadesi "John Doe" sonucunu verir.
  • ✂️ Extracİşlevler: Left, Right ve Mid, bir değerin başından, sonundan veya ortasından bir alt dizeyi çeker.
  • 📏 Ölçüm İşlevleri: Len karakter sayısını sayar ve InStr bir alt dizenin başladığı konumu döndürür.
  • 🧩 Böl ve Birleştir: Split işlemi, sınırlayıcı karakterlerle ayrılmış tek bir dizeyi bir diziye ayırır ve Join işlemi ise bir diziyi tek bir dizeye yeniden oluşturur.
  • ⚠️ Genel hatalar: Tür uyuşmazlığı, InStr'nin sıfır döndürmesi ve sondaki boşluklar, karşılaştırmaların başarısız olmasının en büyük nedenidir.

VBA Dize İşleme Fonksiyonları ve Operaları

VBA Dizesi Operaları

Dize verileri sayılardan, karakterlerden ve sembollerden oluşan verileri tutmak için kullanılır. “Temmuz-2015” dize verilerinin bir örneğidir. Şunlardan oluşur:

  • Karakterler (Temmuz)
  • Sembol (-)
  • Numbers (2015)

String operatörleri string verilerini işlemek için kullanılır. Örneğin Temmuz-2015 değerini ayın ve yılın ilk 3 harfinden “Temmuz-2015” gibi birleştirebilirsiniz.

Aşağıdaki tabloda birleştirme VBA dize operatörü gösterilmektedir.

S / N Kullanım Açıklama Örnek E-posta Çıktı
1 & Concatenate: Bu operatör stringleri birleştirmek için kullanılır. "John Doe" Falanca kişi

Örnek Kaynak Code

VBA Dizesi Operators Örnek Kaynak Code

MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"

Yukarıdaki kodun yürütülmesi aşağıdaki sonucu üretir

VBA Dizesi Operators Örnek Kaynak Code

Ampersand, metinleri birleştirmek için kullanılan tek sembol değildir ve sayılar söz konusu olduğunda ikisi arasındaki fark önem kazanır.

Dize Birleştirme İşleminde & ve + İşaretleri Arasındaki Fark

VBA, iki metin değeri arasında hem ampersand (&) hem de artı işaretini kabul eder, bu nedenle yeni başlayanlar genellikle bunları birbirinin yerine kullanılabilir olarak görürler. Ancak, işlenenlerden biri sayı veya boş değer olduğunda farklı davranırlar ve yalnızca biri güvenlidir.

Davranış & (ve işareti) + (Artı)
İki metin değeri Onlara katılıyor: “Guru” ve “99” iadeleri Guru99 Onlara katılıyor: “Guru” + “99” iade eder Guru99
Metin ve bir sayı Sayıyı metne dönüştürür: “Yaş ” & 30, "Yaş 30" sonucunu verir. Tür uyuşmazlığı hatası verir.
İki sayısal dize “10” ve “5” 105 değerini döndürür. “10” + “5” ifadesi 15 sonucunu verebilir.
Boş değer Null değerini boş bir dize olarak ele alır. Null değeri döndürür ve sonucun tamamını atar.

💡 İpucu: Her zaman birleştirme işlemleri için ampersand (&) işaretini kullanın ve artı işaretini (+) diğer işlemler için saklayın. Aritmetik işlemlerAmpersand işaretinin başına ve sonuna bir boşluk koyun, çünkü Total& ifadesi VBA tarafından Long türünde bir bildirim karakteri olarak okunur.

VBA Dize İşleme İşlevleri

VBA Dize Manipülasyonu önemli bir unsurdur Makro programlama için Excel VBA ve dize işlemleri. Excel, aşağıdakiler gibi çeşitli VBA Dize İşleme işlevleri sağlar:

  • Sol: şu amaçla kullanılır:tracDizinin sol tarafındaki t karakter
  • Sağ: şu amaçla kullanılır:tracdizenin sağ tarafındaki t karakteri
  • Orta: şu amaçla kullanılır:tracbir dizenin ortasından alınan bir alt dize
  • Len: Bir dizenin uzunluğunu bulmak için kullanılır
  • InStr: Bir dizedeki bir alt dizenin konumunu bulmak için kullanılır
  • Süs: işareti, bir dizenin her iki ucundaki boşlukları kaldırmak için kullanılır.
  • değiştirmek: işareti, bir alt dizenin her geçişini başka bir alt dizeyle değiştirmek için kullanılır.
  • UCase / LCase: Bir metni büyük harfe veya küçük harfe dönüştürmek için kullanılır.

Aşağıdaki tabloda her fonksiyonun sözdizimi ve örnek bir uygulaması gösterilmektedir, böylece kalıbı doğrudan bir makroya kopyalayabilirsiniz.

İşlev Sözdizimi Örnek E-posta Çıktı
Sol Sol (dize, uzunluk) Sol (“Temmuz-2015”, 3) Temmuz
Sağ Sağ (dize, uzunluk) Sağ (“Temmuz-2015”, 4) 2015
Orta Orta (dize, başlangıç, uzunluk) Orta (“Temmuz-2015”, 5, 4) 2015
Len Uzunluk(dize) Len (“Temmuz-2015”) 8
InStr InStr(başlangıç, dize, alt dize) InStr(1, “Temmuz-2015”, “-“) 4
Süs (Dizgiyi) Kırp Kırp(” Guru99 (“) Guru99
değiştirmek Değiştir(dize, bul, değiştir) Değiştir(“Temmuz-2015”, “-“, “/”) Temmuz / 2015
UCase UCase(dize) UCase(“guru99”) GURU99

Aşağıdaki makro, bir tarih etiketini parçalarından yeniden oluşturmak için bu işlevlerin birkaçını bir araya getirir.

Sub StringFunctionsDemo()
    Dim Source As String
    Dim MonthPart As String
    Dim YearPart As String

    Source = "July-2015"

    ' Take the first three characters
    MonthPart = Left(Source, 3)
    ' Take the last four characters
    YearPart = Right(Source, 4)

    MsgBox MonthPart & "-" & YearPart, vbOKOnly, "String Functions"
End Sub

Makroyu çalıştırdığınızda "Temmuz 2015" görüntülenir. Her fonksiyon yeni bir değer döndürür ve orijinal dizeyi değiştirmez; bu nedenle sonuçlar tek bir ifadede güvenli bir şekilde birleştirilebilir.

Bu fonksiyonların hepsi aynı anda tek bir dize üzerinde çalışır. Tek bir değer tüm bir listeyi içerdiğinde, diğer iki fonksiyon bunu daha iyi ele alır.

VBA'da Dizeleri Bölme ve Birleştirme Nasıl Yapılır?

Excel'e yapıştırılan veriler genellikle her öğe arasında ayırıcı bulunan tek bir uzun değer olarak gelir, örneğin "Pepsi, Kola, Fanta, Meyve Suyu". Bunu Mid ve InStr ile okumak yavaş ve hassastır. VBA, tam olarak bu iş için eşleştirilmiş bir fonksiyon çifti sunar.

Bölünmüş Sınırlandırılmış bir dize alır ve her öğe için bir eleman içeren, sıfır tabanlı bir dizi döndürür. Kaydol Bunun tersini yapar; bir diziyi alır ve öğeler arasında ayırıcı bulunan tek bir dize döndürür. Unutmayın ki Join işlemi iki ayrı dize üzerinde değil, bir dizi üzerinde çalışır.

Sub SplitAndJoinDemo()
    Dim Source As String
    Dim Items() As String
    Dim i As Long

    Source = "Pepsi,Coke,Fanta,Juice"

    ' Break the value into an array on every comma
    Items = Split(Source, ",")

    For i = LBound(Items) To UBound(Items)
        Sheet1.Cells(i + 1, 1).Value = Items(i)
    Next i

    ' Rebuild the list with a different separator
    MsgBox Join(Items, " | "), vbOKOnly, "Joined List"
End Sub

Döngü, her içeceği kendi çalışma sayfası satırına yazar ve ardından mesaj kutusunda Pepsi | Kola | Fanta | Meyve Suyu görüntülenir. Bu kalıbı üretim kodunda güvenilir kılan üç nokta vardır:

  • Sıfır tabanlı sonuç: Split fonksiyonu, Option Base ne olursa olsun, her zaman 0'dan başlayarak numaralandırılmış bir dizi döndürür; bu nedenle döngüyü sabit bir sayı yerine LBound ve UBound ile yönlendirin.
  • String() olarak tanımlayın: Sonucu dinamik bir String dizisine atayın. Önce sabit bir boyut belirtmek derleme hatasına neden olur.
  • Boş giriş: Boş bir dizeyi bölmek, hiçbir öğe içermeyen bir dizi döndürür, bu nedenle Items(0)'ı okumadan önce UBound ile test edin.

Doğru fonksiyon seçilmiş olsa bile, metin kodu az sayıda tahmin edilebilir şekilde başarısız olur.

Sık Karşılaşılan VBA Dize Hataları ve Bunların Nasıl Düzeltileceği

Excel VBA'daki çoğu dize hatası, az sayıda nedenden kaynaklanır. Belirtiyi tanımak, uzun bir hata ayıklama oturumundan tasarruf sağlar.

  • Birleştirmede tür uyuşmazlığı: Metin ve sayı arasına artı işareti (&) kullanılmış. Bunu, sayıyı otomatik olarak dönüştüren bir ampersand (&) işaretiyle değiştirin.
  • InStr 0 değerini döndürür: Alt dize bulunamadı. InStr başarısızlık durumunda -1 yerine 0 döndürür, bu nedenle sonucu Mid'e iletmeden önce sıfırdan büyük bir değer olup olmadığını kontrol edin.
  • Mid veya Left'te geçersiz prosedür çağrısı: İstenen uzunluk negatif veya başlangıç ​​pozisyonu 1'in altında. Uzunluğun asla dizeyi aşmaması için çağrıyı Len ile koruyun.
  • Birbirine uyması gereken ancak uymayan karşılaştırmalar: İçe aktarılan verilerdeki sondaki boşluklar eşitliği bozar. Her iki tarafı da Trim ile sarın ve büyük/küçük harf duyarlılığı göz ardı edilmesi gerektiğinde StrComp kullanın.
  • Sayıya dönüşmeyecek metin: “1,200” gibi bir değer, ayırıcı karakter nedeniyle aritmetikte başarısız olur. CLng ile dönüştürmeden önce Replace fonksiyonu ile ayırıcı karakteri kaldırın.

Yukarıdaki kodu içeren Excel'i indirin

Yukarıdaki Excel dosyasını indirin. Code

SSS

Değişken uzunluklu bir dize yaklaşık iki milyar karaktere kadar, sabit uzunluklu bir dize ise 65,400 karaktere kadar karakter tutabilir. Ancak bir çalışma sayfası hücresi yalnızca 32,767 karakter depolayabilir, bu nedenle daha uzun değerler sayfaya yazılırken kısaltılır.

Eşittir işareti varsayılan olarak büyük/küçük harf duyarlılığıyla karşılaştırma yapar. Büyük/küçük harf duyarlılığı olmayan bir sonuç için StrComp(a, b, vbTextCompare) kullanın veya varsayılan ayarı tüm modül için değiştirmek üzere modülün başına Option Compare Text ekleyin.

Ampersand (&) işareti, birleştirmeden önce her bir işleneni metne dönüştürür; bu nedenle 10 & 5 ifadesi 105 dizesini döndürür. Değerleri sayısal tutun ve önce toplayın, ardından sonucun bir mesaj içinde görünmesi gerekiyorsa birleştirin.

Evet. Girdiyi ve istenen çıktıyı tanımlayın, örneğin extracİlk tireden önceki koda bir yapay zeka asistanı Left ve InStr ifadelerini döndürür. Eksik tire gibi uç durumlara karşı test edin.

Evet. Mid gibi iç içe geçmiş bir ifadeyi, içine InStr ekleyerek yapıştırın; yapay zeka asistanı bunu adımlara ayırır, her argümanı adlandırır ve InStr'nin sıfır döndürdüğü ve çağrının başarısız olduğu durumu işaretler.

Bu yazıyı şu şekilde özetleyin: