Özellik ikonu

Right

İndirme izni yok

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.

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.
Right sonucu Variant olarak, Right$ ise doğrudan String olarak döndürür. Çoğu durumda iki yazım da aynı sonucu verir; Right$ yalnızca Null değer gelmeyeceği biliniyorsa tercih edilir.

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.
ABC
1Ürün KoduÜrün AdıSon 3 Karakter
2KLV-2024-015Klavye15
3MSE-2023-102Fare102
4EKR-2024-007Ekran7
5YZC-2022-230Yazıcı230
6TLF-2024-481Telefon481
7KBL-2023-056Kablo56
Ürün KodlarıExcelDepo v1.0.0
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.

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.
AB
1Dosya AdıUzantı
2Satış_Raporu.xlsxxlsx
3Bütçe_2024.xlsmxlsm
4Müşteri_Listesi.csvcsv
5Sunum.pptxpptx
6NotlarUzantı yok
7Yedek.tar.gzgz
Dosya ListesiExcelDepo v1.0.0
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.

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.
ABC
1MüşteriKart NoMaskeli Kart
2Ayşe Yılmaz5412750123456789************6789
3Mehmet Demir4543123498761234************1234
4Zeynep Kaya374245455400126***********0126
5Can Öztürk12341234
6Elif Arslan987987
Kart MaskelemeExcelDepo v1.0.0
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.

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.
Ö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
14
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst