Excel'de VBA ile çalışırken, bir sınırlayıcıya dayalı olarak bir dizeyi farklı parçalara ayırmanız gerekebilir.
Örneğin, bir adresiniz varsa, adresin virgülle ayrılmış farklı bölümlerini (bu durumda sınırlayıcı olacaktır) almak için VBA Böl işlevini kullanabilirsiniz.
SPLIT, bir metin dizesini sınırlayıcıya göre bölmek için kullanabileceğiniz Excel VBA'da yerleşik bir dize işlevidir.
Excel VBA SPLIT İşlevi - Sözdizimi
Böl ( İfade, [Sınırlayıcı], [Sınır], [Karşılaştır] )
- İfade: Bu, sınırlayıcıya göre bölmek istediğiniz dizedir. Örneğin, adres örneğinde, adresin tamamı 'ifade' olacaktır. Bunun sıfır uzunluklu bir dize olması durumunda (“”) SPLIT işlevi boş bir dizi döndürür.
- sınırlayıcı: Bu isteğe bağlı bir argümandır. Bu, 'İfade' argümanını bölmek için kullanılan sınırlayıcıdır. Adres örneğimizde virgül, adresi farklı parçalara ayırmak için kullanılan bir sınırlayıcıdır. Bu bağımsız değişkeni belirtmezseniz, bir boşluk karakteri varsayılan sınırlayıcı olarak kabul edilir. Sıfır uzunlukta bir dize (“”) vermeniz durumunda, tüm 'İfade' dizesi işlev tarafından döndürülür.
- Sınır: Bu isteğe bağlı bir argümandır. Burada, döndürmek istediğiniz toplam alt dize sayısını belirtirsiniz. Örneğin, 'İfade' bağımsız değişkeninden yalnızca ilk üç alt dizeyi döndürmek istiyorsanız, bu 3 olur. Bu bağımsız değişkeni belirtmezseniz, varsayılan değer -1'dir ve tüm alt dizeleri döndürür.
- Karşılaştırmak: Bu isteğe bağlı bir argümandır. Burada, alt dizeleri değerlendirirken SPLIT işlevinin gerçekleştirmesini istediğiniz karşılaştırma türünü belirtirsiniz. Aşağıdaki seçenekler mevcuttur:
- Karşılaştır 0 olduğunda: Bu bir İkili karşılaştırmadır. Bu, sınırlayıcınız bir metin dizesiyse (örneğin ABC), bunun büyük/küçük harfe duyarlı olacağı anlamına gelir. 'ABC', 'abc'ye eşit olmayacaktır.
- Karşılaştırma 1 olduğunda: Bu bir Metin karşılaştırmasıdır. Bu, sınırlayıcınız bir metin dizesiyse (örneğin ABC), o zaman 'İfade' dizesinde 'abc' olsa bile, sınırlayıcı olarak kabul edileceği anlamına gelir.
Şimdi SPLIT işlevinin temellerini ele aldığımıza göre, birkaç pratik örnek görelim.
Örnek 1 - Bir Cümledeki Kelimeleri Böl
Diyelim ki "Hızlı Kahverengi Tilki Tembel Köpeğin Üzerinden Atlıyor" metnim var.
Bu cümlenin her bir kelimesini bir dizide ayrı bir öğe olarak almak için SPLIT işlevini kullanabilirim.
Aşağıdaki kod buna olur:
Sub SplitWords() Dim TextStrng As String Dim Result() As String TextStrng = "Hızlı Kahverengi Tilki Tembel Köpeğin Üzerinden Atlıyor" Result() = Split(TextStrng) End Sub
Kod yararlı bir şey yapmasa da VBA'daki Split işlevinin ne yaptığını anlamanıza yardımcı olacaktır.
Böl işlevi, metin dizesini böler ve her bir sözcüğü Result dizisine atar.
Yani bu durumda:
- Result(0) "The" değerini saklar
- Result(1) "Hızlı" değerini saklar
- Result(2), “Brown” değerini vb. saklar.
Bu örnekte, yalnızca bölünecek metin olan ilk argümanı belirledik. Sınırlayıcı belirtilmediğinden, varsayılan sınırlayıcı olarak boşluk karakteri alır.
Önemli Not:
- VBA SPLIT işlevi, taban 0'dan başlayan bir dizi döndürür.
- SPLIT işlevinin sonucu bir diziye atandığında, bu dizi bir String veri türü olarak bildirilmelidir. Bunu bir Varyant veri türü olarak bildirirseniz, bir tür uyuşmazlığı hatası gösterecektir). Yukarıdaki örnekte, Result() öğesini bir String veri türü olarak bildirdiğime dikkat edin.
Örnek 2 - Bir Cümledeki Kelime Sayısını Sayma
Bir cümledeki toplam kelime sayısını elde etmek için SPLIT işlevini kullanabilirsiniz. Buradaki hile, metni böldüğünüzde elde ettiğiniz dizideki öğelerin sayısını saymaktır.
Aşağıdaki kod, kelime sayısını içeren bir mesaj kutusu gösterecektir:
Sub WordCount() TextStrng As String Dim Dim WordCount As Integer Dim Result() As String TextStrng = "Hızlı Kahverengi Tilki Tembel Köpeğin Üzerinden Atlıyor" Sonuç = Böl(TextStrng) WordCount = UBound(Sonuç()) + 1 MsgBox "The Kelime Sayısı " & WordCount End Sub
Bu durumda, UBound işlevi bize dizinin üst sınırını (yani dizinin sahip olduğu maksimum eleman sayısını) söyler. Dizinin tabanı 0 olduğundan, toplam kelime sayısını elde etmek için 1 eklenir.
VBA'da metni girdi olarak alacak ve kelime sayısını döndürecek özel bir işlev oluşturmak için benzer bir kod kullanabilirsiniz.
Aşağıdaki kod bu işlevi yaratacaktır:
İşlev WordCount(CellRef As Range) Dim TextStrng As String Dim Result() As String Result = Split(WorksheetFunction.Trim(CellRef.Text), " ") WordCount = UBound(Result()) + 1 End Function
Bir kez oluşturulduktan sonra, WordCount işlevini diğer normal işlevler gibi kullanabilirsiniz.
Bu işlev ayrıca sözcükler arasında baştaki, sondaki ve çift boşlukları da işler. Bu, VBA kodundaki TRIM işlevi kullanılarak mümkün olmuştur.
Bu formülün bir cümledeki kelime sayısını saymak için nasıl çalıştığı hakkında daha fazla bilgi edinmek veya kelime sayısını almak için VBA olmayan bir formül yolu öğrenmek istiyorsanız, bu eğiticiye göz atın.
Örnek 3 - Boşluk Karakteri Dışında Bir Ayırıcı Kullanma
Önceki iki örnekte, SPLIT işlevinde yalnızca bir argüman kullandık ve geri kalanı varsayılan argümanlardı.
Başka bir sınırlayıcı kullandığınızda, bunu SPLIT formülünde belirtmeniz gerekir.
Aşağıdaki kodda, SPLIT işlevi, sınırlayıcı olarak virgül temelinde bir dizi döndürür ve ardından her kelimeyi ayrı bir satırda içeren bir mesaj gösterir.
Sub CommaSeparator() Dim TextStrng As String Dim Result() As String Dim DisplayText As String TextStrng = "The,Quick,Brown,Fox,Jump,Over,The,Lazy,Dog" Result = Split(TextStrng, ",") For i = LBound(Result()) UBound(Result())'a DisplayText = DisplayText & Result(i) & vbNewLine Sonraki i MsgBox DisplayText End Sub
Yukarıdaki kodda, 'Sonuç' dizisinin her bir öğesinden geçmek için Sonraki Döngü için kullandım, onu 'DisplayText' değişkenine atadım.
Örnek 4 - Bir Adresi üç bölüme ayırın
SPLIT işleviyle, kaç tane bölme almak istediğinizi belirleyebilirsiniz. Örneğin, hiçbir şey belirtmezsem, sınırlayıcının her örneği dizeyi bölmek için kullanılır.
Ancak sınır olarak 3 belirtirsem, dize yalnızca üç parçaya bölünecektir.
Örneğin, aşağıdaki adrese sahipsem:
2703 Winifred Yolu, Indianapolis, Indiana, 46204
Bu adresi üç parçaya bölmek için VBA'daki Böl işlevini kullanabilirim.
İlk ikisini virgül sınırlayıcısına göre böler ve kalan kısım dizinin üçüncü elemanı olur.
Aşağıdaki kod, adresi bir mesaj kutusunda üç farklı satırda gösterir:
Sub CommaSeparator() Dim TextStrng As String Dim Result() As String Dim DisplayText As String TextStrng = "2703 Winifred Way, Indianapolis, Indiana, 46204" Sonuç = Split(TextStrng, ",", 3) For i = LBound(Result( )) UBound'a(Sonuç()) DisplayText = DisplayText & Result(i) & vbNewLine Next i MsgBox DisplayText End Sub
Bunun pratik kullanımlarından biri, tek hat adresini mesaj kutusunda gösterilen formata bölmek istediğinizde olabilir. Ardından, adresi üç parçaya bölünmüş olarak (her parça yeni bir satırda olacak şekilde) döndüren özel bir işlev oluşturabilirsiniz.
Aşağıdaki kod bunu yapar:
İşlev ThreePartAddress(cellRef As Range) Dim TextStrng As String Dim Result() As String Dim DisplayText As String Result = Split(cellRef, ",", 3) For i = LBound(Result()) To UBound(Result()) DisplayText = DisplayText & Trim(Result(i)) & vbNewLine Next i ThreePartAddress = Mid(DisplayText, 1, Len(DisplayText) - 1) End Function
Modülde bu koda sahip olduğunuzda, çalışma kitabındaki işlevi (ÜçPartAdres) tıpkı diğer Excel işlevleri gibi kullanabilirsiniz.
Bu işlev bir argüman alır - adresi içeren hücre başvurusu.
Ortaya çıkan adresin üç farklı satırda görünmesi için hücrelere metin kaydırma biçimini uygulamanız gerektiğini unutmayın (Hizalama grubundaki Giriş sekmesindedir). 'Metni Kaydır' biçimi etkin değilse, tüm adresi tek bir satır olarak görürsünüz.
Örnek 5 - Adresten Şehir Adını Alın
VBA'daki Split işleviyle, sonuçta ortaya çıkan dizinin hangi bölümünü kullanmak istediğinizi belirtebilirsiniz.
Örneğin, aşağıdaki adresi sınırlayıcı olarak virgül kullanarak böldüğümü varsayalım:
2703 Winifred Yolu, Indianapolis, Indiana, 46204
Ortaya çıkan dizi, aşağıda gösterildiği gibi görünecektir:
{"2703 Winifred Yolu", "Indianapolis", "Indiana", "46204"}
Bu bir dizi olduğundan, bu dizinin belirli bir bölümünü görüntülemeyi veya döndürmeyi seçebilirim.
Aşağıda, bir sayı belirtebileceğiniz ve diziden o öğeyi döndüreceği özel bir işlev için bir kod bulunmaktadır. Örneğin, durum adını istersem 3 belirtebilirim (dizideki üçüncü öğe olduğu için).
Function ReturnNthElement(CellRef As Range, ElementNumber As Integer) Dim Result() As String Sonuç = Split(CellRef, ",") ReturnNthElement = Sonuç(ElementNumber - 1) End Function
Yukarıdaki işlev, adresi içeren hücre başvurusu ve döndürmek istediğiniz öğe numarası olmak üzere iki bağımsız değişken alır. Split işlevi, adres öğelerini böler ve onu Result değişkenine atar.
Ardından, ikinci argüman olarak belirttiğiniz eleman numarasını döndürür. Taban 0 olduğundan, adresin doğru kısmını döndürmek için ElementNumber-1'in kullanıldığını unutmayın.
Şehir adını istiyorsanız, ikinci argüman olarak 2 kullanabilirsiniz. Toplam öğe sayısından daha yüksek bir sayı kullanmanız durumunda, #DEĞER! hata.
Kodu aşağıda gösterildiği gibi daha da basitleştirebilirsiniz:
İşlev ReturnNthElement(Aralık Olarak HücreRef, Tamsayı olarak ElementNumber) ReturnNthElement = Böl(HücreRef, ",")(ElementNumber - 1) Fonksiyonu Bitir
Yukarıdaki kodda, Result değişkenini kullanmak yerine sadece belirtilen eleman numarasını döndürür.
Bu nedenle, Split(“Günaydın”)(0) varsa, yalnızca “İyi” olan ilk öğeyi döndürür.
Benzer şekilde, yukarıdaki kodda sadece belirtilen eleman numarasını döndürür.