Genel Bakış
Right (Right function), bir metin ifadesinin sağ ucundan (sonundan) istenen sayıda karakteri alıp döndüren VBA metin işlevidir. Ürün kodunun son hanelerini, dosya uzantısını ya da kart numarasının son dört hanesini ayırmak gibi işlerde kullanılır. Çalışma sayfasındaki SAĞ işlevinin VBA karşılığıdır.
Makro 2. satırdan 7. satıra kadar döner. İlk kod için C2 hücresine 15, üçüncü kod için C4 hücresine 7 yazılır. Right işlevi "015" ve "007" gibi metin döndürür; ancak bu metin hücreye yazılırken Excel onu sayıya çevirdiği için baştaki sıfırlar görünmez.
B2 hücresine xlsx, B4 hücresine csv yazılır. "Notlar" adında nokta olmadığı için InStrRev 0 döndürür ve B6 hücresine Uzantı yok yazılır. "Yedek.tar.gz" adında birden çok nokta vardır; InStrRev sondan aradığı için B7 hücresinde yalnızca son parça, yani gz görünür.
16 haneli ilk kart için C2 hücresinde 6789, 15 haneli üçüncü kart için C4 hücresinde *0126 görünür. Tam 4 karakterlik değer olan C5 hücresinde 1234, 3 karakterlik değer olan C6 hücresinde 987 yazar; çünkü Right, istenen sayı metnin uzunluğunu aşınca hata vermez, metnin tamamını döndürür.
Söz dizimi
VBA
2 satır
Right(string, length)
Right$(string, length)
- string: Karakterlerin alınacağı metin ifadesi; zorunludur. Null içeriyorsa işlev Null döndürür.
- length: Sağdan kaç karakter alınacağını belirten sayı (Long); zorunludur. 0 verilirse boş metin ("") döner. Metnin uzunluğuna eşit ya da ondan büyükse metnin tamamı döner. Negatif değer verilirse 5 numaralı çalışma zamanı hatası (Invalid procedure call or argument) oluşur.
Dönüş değeri ve davranış
İşlev, string bağımsız değişkeninin son length karakterini metin olarak verir. Sayı ya da tarih gibi metin olmayan bir değer verirseniz önce metne çevrilir; örneğin sayı 12345 için Right ile 2 karakter istendiğinde "45" metni döner ve sonuç sayı değil metindir.- Boşluklar: Sondaki boşluklar da karakter sayılır; gerekirse önce Trim kullanın.
- Sayısal hücreler: Hücre sayı içeriyorsa baştaki sıfırlar zaten kaybolmuştur; Right hücredeki değeri olduğu gibi işler.
- Bayt sürümü: Karakter yerine bayt sayarak çalışan RightB işlevi de vardır; günlük işlerde nadiren gerekir.
Len, InStrRev ve String ile birlikte kullanım
Kaç karakter alınacağı çoğu zaman sabit değildir. Bu durumda length değerini Len ve InStrRev ile hesaplarsınız. Örneğin son noktadan sonrasını almak için Len(ad) - InStrRev(ad, ".") biçiminde bir uzunluk hesaplanır. Metnin başını gizleyip sonunu göstermek için ise String işleviyle yıldız dizisi üretip Right sonucuna ekleyebilirsiniz. Metnin başından karakter almak için Left, ortasından almak için Mid kullanılır.1. Ürün kodunun son üç karakterini alma
A sütununda ürün kodları var. Her kodun sonundaki 3 haneli sıra numarasını C sütununa yazacağız. Alt+F11 ile VBA düzenleyicisini açın, Ekle > Modül (Insert > Module) ile standart modül ekleyin ve aşağıdaki kodu yapıştırın.
VBA
13 satır
Option Explicit
Sub SonUcKarakter()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
For i = 2 To 7
' Kodun sağdan son 3 karakterini C sütununa yaz
ws.Cells(i, 3).Value = Right(ws.Cells(i, 1).Value, 3)
Next i
End Sub
Right
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ürün Kodu | Ürün Adı | Son 3 Karakter |
| 2 | KLV-2024-015 | Klavye | 15 |
| 3 | MSE-2023-102 | Fare | 102 |
| 4 | EKR-2024-007 | Ekran | 7 |
| 5 | YZC-2022-230 | Yazıcı | 230 |
| 6 | TLF-2024-481 | Telefon | 481 |
| 7 | KBL-2023-056 | Kablo | 56 |
Ürün KodlarıExcelDepo v1.0.0
2. Dosya uzantısını ayırma
A sütunundaki dosya adlarının uzantısını B sütununa yazacağız. Uzantının uzunluğu değiştiği için karakter sayısı InStrRev ile son noktanın konumundan hesaplanır. Kodu standart modüle yapıştırın. Bu örnekte gerçek dosyalara erişilmez; yalnızca hücredeki metin işlenir.
VBA
23 satır
Option Explicit
Sub UzantiBul()
Dim ws As Worksheet
Dim i As Long
Dim ad As String
Dim nokta As Long
Set ws = ActiveSheet
For i = 2 To 7
ad = ws.Cells(i, 1).Value
' Son noktanın konumunu bul
nokta = InStrRev(ad, ".")
If nokta > 0 Then
' Noktadan sonraki karakter sayısı kadar sağdan al
ws.Cells(i, 2).Value = Right(ad, Len(ad) - nokta)
Else
ws.Cells(i, 2).Value = "Uzantı yok"
End If
Next i
End Sub
Right
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Dosya Adı | Uzantı |
| 2 | Satış_Raporu.xlsx | xlsx |
| 3 | Bütçe_2024.xlsm | xlsm |
| 4 | Müşteri_Listesi.csv | csv |
| 5 | Sunum.pptx | pptx |
| 6 | Notlar | Uzantı yok |
| 7 | Yedek.tar.gz | gz |
Dosya ListesiExcelDepo v1.0.0
3. Kart numarasının son dört hanesini gösterme
B sütunundaki kart numaralarının yalnızca son 4 hanesini gösterip kalanını yıldızla gizleyeceğiz. Sonuç C sütununa yazılır. 4 karakterden kısa ya da 4 karakterlik değerlerde String işlevine negatif sayı gitmemesi için uzunluk önce denetlenir. Kodu standart modüle yapıştırın.
VBA
24 satır
Option Explicit
Sub KartMaskele()
Dim ws As Worksheet
Dim i As Long
Dim no As String
Dim maskeli As String
Set ws = ActiveSheet
For i = 2 To 6
no = CStr(ws.Cells(i, 2).Value)
If Len(no) > 4 Then
' Baştaki haneleri yıldızla, son 4 haneyi Right ile ekle
maskeli = String(Len(no) - 4, "*") & Right(no, 4)
Else
' Kısa değerde Right zaten metnin tamamını döndürür
maskeli = Right(no, 4)
End If
ws.Cells(i, 3).Value = maskeli
Next i
End Sub
Right
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Müşteri | Kart No | Maskeli Kart |
| 2 | Ayşe Yılmaz | 5412750123456789 | ************6789 |
| 3 | Mehmet Demir | 4543123498761234 | ************1234 |
| 4 | Zeynep Kaya | 374245455400126 | ***********0126 |
| 5 | Can Öztürk | 1234 | 1234 |
| 6 | Elif Arslan | 987 | 987 |
Kart MaskelemeExcelDepo v1.0.0
Kullanırken dikkat edin
- Negatif uzunluk hata verir: length değeri negatif olursa 5 numaralı hata oluşur. Uzunluğu Len(metin) - InStrRev(metin, ".") gibi hesaplıyorsanız ve aranan karakter yoksa sonucun beklenmedik çıkabileceğini unutmayın; önce If ile konumun 0'dan büyük olduğunu denetleyin.
- Null değerlere dikkat: Right, Null içeren bir ifade alırsa Null döndürür. Bunu String türünde bir değişkene atarsanız 94 numaralı hata (Invalid use of Null) alabilirsiniz. Veritabanından gelen alanlarda önce IsNull ile denetleyin ya da değeri boş metinle birleştirin.
- Hücre değeri sayı ise: Hücre sayı biçimindeyse baştaki sıfırlar saklanmaz ve Right yalnızca kalan rakamlarla çalışır. Kod, telefon ya da kimlik numarası gibi verileri sıfırlarıyla birlikte işlemek için hücreleri veri girmeden önce Metin biçimine çevirin.
- Sonuç her zaman metindir: Right ile ayırdığınız rakamlar, işlevin döndürdüğü değerde sayı değil metindir. Ancak bu metni hücreye yazdığınızda Excel onu sayıya çevirebilir; Örnek 1'de "015" hücreye 15, "007" ise 7 olarak yazılır ve baştaki sıfırlar görünmez. Sıfırların korunmasını istiyorsanız hücreyi değeri yazmadan önce Metin biçimine çevirin. Hesaplamada kullanacaksanız değişkendeki metni CLng ya da Val ile sayıya çevirin.
- Çalışma sayfası işlevi ile farkı: Sayfa hücresinde SAĞ (RIGHT) işlevi kullanılır; VBA kodunda ise Right yazılır. Right içinde hücre başvurusu değil, değer verirsiniz. Ayrıca VBA'da bu adı bir değişken ya da yordam adı olarak kullanmayın; işlevi gölgeleyip karışıklığa yol açar.
- İlgili konular:
- Left: Metnin başından karakter alır.
- Mid: Metnin ortasından karakter alır.
- Len: Metnin karakter sayısını verir.
- InStrRev: Bir metni sondan başa doğru arar.
- Trim: Baştaki ve sondaki boşlukları temizler.
- String: Bir karakteri istenen sayıda tekrarlar.
- SAĞ: Çalışma sayfasındaki karşılığı olan işlev.
- SOL, PARÇAAL, UZUNLUK: Diğer metin ayırma ve ölçme işlevleri.