Genel Bakış
Split (İşlev), bir metin ifadesini belirlediğiniz ayırıcıya göre parçalara böler ve parçaları sıfır tabanlı bir dizi olarak döndürür. Noktalı virgül, virgül, boşluk ya da eğik çizgi ile birleşmiş verileri ayrı hücrelere dağıtmak, kelime saymak veya bir yolun son parçasını almak için kullanılır. Join işlevinin tersini yapar.
Öğe sayısını UBound(dizi) + 1 ile bulursunuz. Örnek kullanım:
Karşılaştırma sabitleri:
Parçaların başındaki ve sonundaki boşlukları Trim işleviyle temizlemek iyi bir alışkanlıktır. Dizinin öğelerini hücrelere yazarken bir For döngüsünü 0 ile UBound arasında çalıştırın.
Makro çalıştıktan sonra ilk kayıt için B2 hücresine Ahmet Yılmaz, C2 hücresine Ankara ve D2 hücresine Satış yazılır. Son kayıtta bölüm adı iki kelimeden oluşsa da ayırıcı yalnızca noktalı virgül olduğu için D5 hücresi İnsan Kaynakları değerini tek parça olarak alır.
Limit 2 olduğu için ilk satırda ad sütununa Ayşe, soyad sütununa ise kalan metin olan Nur Çelik yazılır. Üçüncü satırda yalnızca iki kelime bulunduğundan B4 hücresi Zeynep, C4 hücresi Demir değerini alır. Limit verilmeseydi üç kelimeli adlar üç parçaya bölünecekti.
İlk satırda büyük harfli VE sözcüğü de ayırıcı sayılır ve ürünler Elma, Armut ile Kiraz olarak yazılır. Üçüncü satırdaki Ve sözcükleri de bölme noktası olur; böylece D4 hücresi Kavun değerini alır. İkinci satırda yalnızca iki ürün bulunduğu için D3 hücresi boş kalır.
Söz dizimi
Split işlevinin söz dizimi şöyledir:Split(expression, [delimiter], [limit], [compare])
- expression: Bölünecek metin. Zorunludur. Boş metin verilirse sonuç, öğesi olmayan bir dizidir ve UBound değeri -1 olur.
- delimiter: Parçaları ayıran karakter ya da karakter dizisi. İsteğe bağlıdır; varsayılanı bir boşluk karakteridir. Birden fazla karakterli ayırıcılar (örneğin " ve ") kullanılabilir. Ayırıcı olarak boş metin ("") verilirse metnin tamamı tek öğeli dizi olarak döner.
- limit: Döndürülecek en fazla parça sayısı. İsteğe bağlıdır; varsayılanı -1'dir ve metnin tamamı bölünür. Sınıra ulaşıldığında kalan metin son öğede tek parça olarak kalır.
- compare: Ayırıcı aranırken kullanılacak karşılaştırma türü. İsteğe bağlıdır; varsayılanı vbBinaryCompare değeridir (büyük/küçük harf duyarlı).
Dönüş değeri ve karşılaştırma sabitleri
Split, String türünde öğeler içeren sıfır tabanlı bir dizi döndürür. Dizinin ilk öğesi her zaman 0 numaralıdır; Option Base 1 bildirimi bunu değiştirmez. Sonucu bir Variant değişkene ya da Dim parca() As String gibi dinamik bir String dizisine atayabilirsiniz; sabit boyutlu bir diziye atama hata verir.Öğe sayısını UBound(dizi) + 1 ile bulursunuz. Örnek kullanım:
VBA
3 satır
Dim parca() As String
parca = Split("Ankara;İzmir;Bursa", ";")
' parca(0) = Ankara, UBound(parca) = 2
- vbBinaryCompare (0): İkili karşılaştırma; büyük/küçük harf ayrımı yapılır. Varsayılandır.
- vbTextCompare (1): Metin karşılaştırması; büyük/küçük harf ayrımı yapılmaz.
- vbDatabaseCompare (2): Yalnızca Microsoft Access'te anlamlıdır, Excel'de kullanılmaz.
Davranış ayrıntıları
Arka arkaya gelen iki ayırıcı arasında boş metin içeren bir öğe oluşur; örneğin Split("a;;b", ";") üç öğe döndürür ve ortadaki öğe boştur. Metnin başında ya da sonunda ayırıcı varsa baştaki veya sondaki öğeler de boş olur. Ayırıcı metinde hiç bulunmazsa sonuç, metnin tamamını içeren tek öğeli bir dizidir.Parçaların başındaki ve sonundaki boşlukları Trim işleviyle temizlemek iyi bir alışkanlıktır. Dizinin öğelerini hücrelere yazarken bir For döngüsünü 0 ile UBound arasında çalıştırın.
1. Noktalı virgülle birleşmiş kaydı sütunlara ayırma
A sütununda her personelin adı, şehri ve bölümü noktalı virgülle tek hücrede durmaktadır. Aşağıdaki kodu standart bir modüle yapıştırın; makro her kaydı ayırıp B, C ve D sütunlarına yazar.
VBA
17 satır
Sub KayitlariAyir()
Dim ws As Worksheet
Dim son As Long, i As Long, j As Long
Dim parca() As String
Set ws = ActiveSheet
' A sütunundaki son dolu satırı bul
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
' Kaydı noktalı virgüle göre böl
parca = Split(ws.Cells(i, 1).Value, ";")
For j = 0 To UBound(parca)
ws.Cells(i, 2 + j).Value = parca(j)
Next j
Next i
End Sub
Split
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Kayıt | Ad Soyad | Şehir | Bölüm |
| 2 | Ahmet Yılmaz;Ankara;Satış | Ahmet Yılmaz | Ankara | Satış |
| 3 | Elif Demir;İzmir;Muhasebe | Elif Demir | İzmir | Muhasebe |
| 4 | Mehmet Kaya;Bursa;Üretim | Mehmet Kaya | Bursa | Üretim |
| 5 | Zeynep Arslan;Adana;İnsan Kaynakları | Zeynep Arslan | Adana | İnsan Kaynakları |
Personel ListesiExcelDepo v1.0.0
2. limit parametresiyle ad ve soyadı ayırma
Bazı kişilerin birden fazla adı vardır. İlk boşluğa göre bölüp ilk kelimeyi Ad, geri kalan metni Soyad sütununa yazmak için limit değerini 2 verin. Kodu standart bir modüle yapıştırın.
VBA
18 satır
Sub AdSoyadAyir()
Dim ws As Worksheet
Dim son As Long, i As Long
Dim parca() As String
Set ws = ActiveSheet
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
' En fazla 2 parça: ilk kelime ve kalan metin
parca = Split(Trim(ws.Cells(i, 1).Value), " ", 2)
ws.Cells(i, 2).Value = parca(0)
' Metinde boşluk yoksa dizide tek öğe vardır
If UBound(parca) >= 1 Then
ws.Cells(i, 3).Value = parca(1)
End If
Next i
End Sub
Split
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ad Soyad | Ad | Soyad |
| 2 | Ayşe Nur Çelik | Ayşe | Nur Çelik |
| 3 | Mehmet Ali Kaya | Mehmet | Ali Kaya |
| 4 | Zeynep Demir | Zeynep | Demir |
| 5 | Burak Can Yıldız | Burak | Can Yıldız |
Ad SoyadExcelDepo v1.0.0
3. vbTextCompare ile büyük/küçük harf ayrımı yapmadan bölme
A sütunundaki ürünler " ve " sözcüğüyle birleştirilmiş, ancak bazı satırlarda sözcük "VE" ya da "Ve" biçiminde yazılmıştır. Varsayılan karşılaştırma bu satırları bölmez; bu nedenle karşılaştırma türü olarak vbTextCompare verilir. Kodu standart bir modüle yapıştırın.
VBA
16 satır
Sub UrunleriAyir()
Dim ws As Worksheet
Dim son As Long, i As Long, j As Long
Dim p As Variant
Set ws = ActiveSheet
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
' limit için -1: tüm parçalar; büyük/küçük harf ayrımı yok
p = Split(ws.Cells(i, 1).Value, " ve ", -1, vbTextCompare)
For j = 0 To UBound(p)
ws.Cells(i, 2 + j).Value = Trim(p(j))
Next j
Next i
End Sub
Split
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Sipariş | Ürün 1 | Ürün 2 | Ürün 3 |
| 2 | Elma VE Armut ve Kiraz | Elma | Armut | Kiraz |
| 3 | Portakal ve Muz | Portakal | Muz | |
| 4 | Üzüm Ve Çilek Ve Kavun | Üzüm | Çilek | Kavun |
Ürün ListesiExcelDepo v1.0.0
Kullanırken dikkat edin
- Dizi sıfırdan başlar: Split sonucunun ilk öğesi parca(0) ile alınır. Öğe sayısı UBound + 1'dir; son öğeye UBound(parca) ile ulaşırsınız. Bu yapı Option Base 1 ayarından etkilenmez.
- Boş metin ve ardışık ayırıcılar: Boş bir metni böldüğünüzde UBound değeri -1 olur ve parca(0) çağrısı alt simge hatası verir. Bu yüzden hücreyi bölmeden önce boş olup olmadığını kontrol edin. Arka arkaya gelen ayırıcılar boş öğeler üretir; bunları atlamak için öğeyi yazmadan önce uzunluğunu denetleyin.
- Büyük/küçük harf duyarlılığı: Varsayılan karşılaştırma büyük/küçük harfe duyarlıdır. Ayırıcı bir sözcükse ve yazımı değişebiliyorsa vbTextCompare kullanın. limit parametresini atlamak için -1 yazın ya da araya boş virgül koyun.
- Sayılar metin olarak gelir: Split her zaman String öğeler döndürür. Parçalardan sayı veya tarih gerekiyorsa CLng, CDbl ya da CDate gibi dönüştürme işlevlerini kullanın; aksi halde hücreye metin olarak yazılır ve toplama gibi işlemlerde sorun çıkabilir.
- Sonucu tek seferde yazma: Parçaları döngüyle tek tek yazmak yerine, sonucu Range.Resize ile boyutlandırılmış bir aralığa atamak isterseniz dizinin tek boyutlu ve yatay olduğunu unutmayın; Split dizisi satır olarak yazılır. Büyük veri kümelerinde ekran güncellemesini Application.ScreenUpdating ile kapatmak hızı artırır.
- İlgili konular:
- Join: Bir dizinin öğelerini ayırıcı ile tek metinde birleştirir; Split'in tersidir.
- UBound ve LBound: Dizinin üst ve alt sınırını verir.
- Replace: Metin içindeki ifadeleri değiştirir; bölmeden önce ayırıcıları düzenlemek için kullanılır.
- Trim: Parçaların baştaki ve sondaki boşluklarını temizler.
- Array: Elle bir Variant dizi oluşturur.
- Veri > Veri Araçları > Metni Sütunlara Dönüştür (Data > Data Tools > Text to Columns): Aynı işi kod yazmadan arayüzden yapar.
- SOLDAN, SAĞDAN, PARÇAAL, BUL: Çalışma sayfasında metin parçalamak için kullanılan işlevlerdir.