Özellik ikonu

Split

İndirme izni yok

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.

Söz dizimi​

Split işlevinin söz dizimi şöyledir:
VBA
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
Karşılaştırma sabitleri:
  • 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.
ABCD
1KayıtAd SoyadŞehirBölüm
2Ahmet Yılmaz;Ankara;SatışAhmet YılmazAnkaraSatış
3Elif Demir;İzmir;MuhasebeElif DemirİzmirMuhasebe
4Mehmet Kaya;Bursa;ÜretimMehmet KayaBursaÜretim
5Zeynep Arslan;Adana;İnsan KaynaklarıZeynep ArslanAdanaİnsan Kaynakları
Personel ListesiExcelDepo v1.0.0
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.

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.
ABC
1Ad SoyadAdSoyad
2Ayşe Nur ÇelikAyşeNur Çelik
3Mehmet Ali KayaMehmetAli Kaya
4Zeynep DemirZeynepDemir
5Burak Can YıldızBurakCan Yıldız
Ad SoyadExcelDepo v1.0.0
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.

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.
ABCD
1SiparişÜrün 1Ürün 2Ürün 3
2Elma VE Armut ve KirazElmaArmutKiraz
3Portakal ve MuzPortakalMuz
4Üzüm Ve Çilek Ve KavunÜzümÇilekKavun
Ürün ListesiExcelDepo v1.0.0
İ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.

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.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
10
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst