Genel Bakış
RTrim (Right Trim), verilen metnin sonundaki (sağ taraftaki) boşluk karakterlerini kaldırıp temizlenmiş metni döndüren bir VBA işlevidir. Dışarıdan alınan, sisteme ya da veri tabanından aktarılan listelerde sık görülen "görünmeyen" sondaki boşlukları temizlemek, karşılaştırma ve eşleştirme hatalarını önlemek için kullanılır. Metnin başındaki ve ortasındaki boşluklara dokunmaz.
Çalışma sayfası işlevi KIRP (TRIM) ise farklıdır; baştaki ve sondaki boşlukların yanında kelimeler arasındaki fazla boşlukları da tek boşluğa indirir. Hücrede kullanımı:
VBA içinden bu çalışma sayfası işlevine Application.WorksheetFunction.Trim ile ulaşılır; bu, VBA'nın Trim işlevinden farklı davranır.
B2 hücresine temizlenmiş ad olarak Kalem yazıldı. İlk satırda ad önce 8 karakterdi, sondaki boşluklar silindikten sonra 5 karakter oldu. Aynı mantık diğer satırlar için de geçerlidir; ürün adının kendisi ve içindeki harfler değişmez.
İlk satırda LTrim sütununda [Ankara ], RTrim sütununda [ Ankara], Trim sütununda [Ankara] görünür. Köşeli parantezler sayesinde LTrim'in yalnızca baştaki, RTrim'in yalnızca sondaki, Trim'in ise iki uçtaki boşlukları sildiği kolayca ayırt edilir. Dördüncü satırda boşluklar yalnızca başta olduğundan RTrim metni değiştirmez: [ Adana].
İlk satırda ham uzunluk 11, RTrim sonrası 11, özel işlev sonrası 11 olur; üç değer aynıdır, yani bu satırda hiçbir işlev karakter silmemiştir. Bunun nedeni, hücrenin sonunda gerçek bir bölünemez boşluk yerine düz metin olarak yazılmış bir ifadenin bulunmasıdır. İkinci satırda da RTrim sonrası uzunluk 5, özel işlevin sonucu 5 çıkar; burada da ham uzunluktan bir değişiklik yoktur. Yalnızca normal boşluk içeren üçüncü satırda ise iki yöntem aynı sonucu verir: 5 ve 5.
Söz dizimi
RTrim işlevi tek bir bağımsız değişken alır:RTrim(string)
- string: Zorunlu. Sağ tarafı temizlenecek herhangi bir metin ifadesi (değişken, hücre değeri, sabit metin ya da başka bir işlevin sonucu). İsteğe bağlı bağımsız değişken yoktur.
Dönüş değeri ve davranışı
RTrim, metnin yalnızca sonundaki normal boşluk karakterlerini (ASCII kodu 32) siler ve yeni metni döndürür. Özgün değişken ya da hücre değişmez; sonucu bir değişkene ya da hücreye sizin yazmanız gerekir.- Başındaki boşluklar: Olduğu gibi kalır; bunun için LTrim kullanılır.
- Ortadaki boşluklar: Silinmez ve birden fazla olsalar da tekilleştirilmez.
- Null değer: Bağımsız değişken Null ise sonuç da Null olur.
- Boş metin: Yalnızca boşluklardan oluşan metin, boş metne (uzunluğu 0) dönüşür.
- Silinmeyen karakterler: Sekme (vbTab), satır sonu (vbCr, vbLf) ve bölünemez boşluk (ChrW(160)) boşluk sayılmaz; RTrim bunları silmez.
LTrim, Trim ve KIRP ile farkı
VBA'da üç kırpma işlevi vardır: LTrim baştaki, RTrim sondaki, Trim ise hem baştaki hem sondaki boşlukları siler. Üçü de metnin içindeki boşluklara dokunmaz.Çalışma sayfası işlevi KIRP (TRIM) ise farklıdır; baştaki ve sondaki boşlukların yanında kelimeler arasındaki fazla boşlukları da tek boşluğa indirir. Hücrede kullanımı:
VBA içinden bu çalışma sayfası işlevine Application.WorksheetFunction.Trim ile ulaşılır; bu, VBA'nın Trim işlevinden farklı davranır.
1. Ürün adlarının sonundaki boşlukları temizleme
A sütunundaki ürün adlarının sonunda fazladan boşluklar var. Aşağıdaki kodu standart bir modüle yapıştırın. Makro, temizlenmiş adı B sütununa, temizlemeden önceki ve sonraki karakter sayılarını C ve D sütunlarına yazar.
VBA
17 satır
Option Explicit
' A sütunundaki ürün adlarının sağındaki boşlukları temizler
Sub SagBosluklariTemizle()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
For i = 2 To 7
' Temizlenmiş adı B sütununa yaz
ws.Cells(i, 2).Value = RTrim(ws.Cells(i, 1).Value)
' Temizlemeden önceki ve sonraki karakter sayıları
ws.Cells(i, 3).Value = Len(ws.Cells(i, 1).Value)
ws.Cells(i, 4).Value = Len(ws.Cells(i, 2).Value)
Next i
End Sub
RTrim
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün Adı | Temiz Ad | Önceki Uzunluk | Sonraki Uzunluk |
| 2 | Kalem | Kalem | 8 | 5 |
| 3 | Defter | Defter | 7 | 6 |
| 4 | Silgi | Silgi | 5 | 5 |
| 5 | Kalemtıraş | Kalemtıraş | 14 | 10 |
| 6 | Cetvel | Cetvel | 8 | 6 |
| 7 | Ataş | Ataş | 5 | 4 |
Ürün ListesiExcelDepo v1.0.0
2. LTrim, RTrim ve Trim farkını görme
A sütunundaki şehir adlarının başında ve/veya sonunda boşluk var. Aşağıdaki kodu standart bir modüle yapıştırın. Boşlukların etkisini görebilmek için sonuçlar köşeli parantez içine alınarak yazılır.
VBA
17 satır
Option Explicit
' Üç kırpma işlevinin sonucunu köşeli parantezle gösterir
Sub KirpmaFarkiniGoster()
Dim ws As Worksheet
Dim i As Long
Dim s As String
Set ws = ActiveSheet
For i = 2 To 5
s = ws.Cells(i, 1).Value
ws.Cells(i, 2).Value = "[" & LTrim(s) & "]"
ws.Cells(i, 3).Value = "[" & RTrim(s) & "]"
ws.Cells(i, 4).Value = "[" & Trim(s) & "]"
Next i
End Sub
RTrim
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ham Metin | LTrim | RTrim | Trim |
| 2 | Ankara | (Ankara ) | ( Ankara) | (Ankara) |
| 3 | İzmir | (İzmir ) | ( İzmir) | (İzmir) |
| 4 | Bursa | (Bursa ) | (Bursa) | (Bursa) |
| 5 | Adana | (Adana) | ( Adana) | (Adana) |
Kırpma FarkıExcelDepo v1.0.0
3. Sekme ve bölünemez boşluğu da silen özel işlev
Dışarıdan aktarılan verilerde sonda sekme ya da bölünemez boşluk (ChrW(160)) bulunabilir; RTrim bunları silmez. Aşağıdaki kodu standart bir modüle yapıştırın. Kod, A sütunundaki metinlerin ham uzunluğunu, RTrim sonrası uzunluğunu ve özel SagTemizle işlevi sonrası uzunluğunu yazar. Bu örnekteki tabloda A2 ve A3 hücreleri gerçek bir bölünemez boşluk ya da sekme karakteri içermez; hücrelerde düz metin olarak \u00a0 ve \t yazısı bulunur. Bu nedenle bu iki satırda özel işlev de karakter silmez.
VBA
30 satır
Option Explicit
' Sondaki boşluk, sekme, bölünemez boşluk ve satır sonlarını siler
Function SagTemizle(ByVal metin As String) As String
Dim son As String
Do While Len(metin) > 0
son = Right(metin, 1)
If son = " " Or son = vbTab Or son = ChrW(160) Or son = vbLf Or son = vbCr Then
metin = Left(metin, Len(metin) - 1)
Else
Exit Do
End If
Loop
SagTemizle = metin
End Function
Sub UzunluklariKarsilastir()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
For i = 2 To 5
ws.Cells(i, 2).Value = Len(ws.Cells(i, 1).Value)
ws.Cells(i, 3).Value = Len(RTrim(ws.Cells(i, 1).Value))
ws.Cells(i, 4).Value = Len(SagTemizle(ws.Cells(i, 1).Value))
Next i
End Sub
RTrim
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Metin | Ham Uzunluk | RTrim Sonrası | Özel Sonrası |
| 2 | Konya\u00a0 | 11 | 11 | 11 |
| 3 | Van\t | 5 | 5 | 5 |
| 4 | Sivas | 8 | 5 | 5 |
| 5 | Rize \t | 7 | 7 | 7 |
Özel TemizlikExcelDepo v1.0.0
Kullanırken dikkat edin
- Sonucu geri yazmayı unutmayın: RTrim özgün değeri değiştirmez, yalnızca yeni bir metin döndürür. Hücreyi temizlemek istiyorsanız sonucu aynı hücreye ya da başka bir hücreye yazmanız gerekir.
- Yalnızca normal boşluğu siler: Sekme, satır sonu ve bölünemez boşluk (ChrW(160)) silinmez. Web'den ya da sistemlerden gelen verilerde bölünemez boşluk sık görülür; bu durumda Replace işleviyle ChrW(160) karakterini normal boşluğa çevirip ardından RTrim kullanabilir ya da bu karakterleri silen özel bir işlev yazabilirsiniz. Üçüncü örnekteki tabloda ise ilgili hücreler gerçek bu karakterleri değil düz metni içerdiğinden, o satırlarda hiçbir yöntem karakter silmemiştir.
- Null değerlere dikkat: Null içeren bir değere RTrim uygulandığında sonuç Null olur. RTrim$ ise Null ile hata verir. Veri tabanından gelen alanlarda önce Null denetimi yapın.
- Sayı görünümlü metinler: Hücrede sayı gibi görünen ama sonunda boşluk bulunan değerler metindir. RTrim boşluğu sildikten sonra sonucu hücreye yazdığınızda Excel metni sayıya çevirebilir; hücre biçimi Metin ise değer metin olarak kalır.
- Çok sayıda hücrede hız: Büyük aralıklarda hücreleri tek tek okuyup yazmak yavaştır. Aralığı bir diziye aktarıp döngüde RTrim uygulayın ve diziyi tek seferde geri yazın; ayrıca işlem sırasında Application.ScreenUpdating özelliğini False yapmak süreyi kısaltır.
- İlgili konular: