Özellik ikonu

Replace

İndirme izni yok

Genel Bakış

Replace (Değiştir işlevi), bir metin içinde aranan parçayı bulup başka bir metinle değiştiren ve sonucu yeni bir metin olarak döndüren VBA işlevidir. Telefon numarasındaki tireleri silmek, yanlış yazılmış ifadeleri düzeltmek ya da belirli sayıda değişiklik yapmak gibi metin temizleme işlerinde kullanılır. Özgün metni değiştirmez; değişmiş kopyayı verir, sonucu bir değişkene ya da hücreye siz yazarsınız.

Söz dizimi​

Replace işlevi altı bağımsız değişken alır. İlk üçü zorunludur, son üçü isteğe bağlıdır:
VBA
Replace(expression, find, replace, start, count, compare)
  • expression: Değiştirilecek parçayı içeren metin. Zorunludur.
  • find: Aranan alt metin. Zorunludur.
  • replace: Bulunan parçanın yerine konacak metin. Zorunludur. Boş metin ("") verirseniz bulunan parçalar silinir.
  • start: Aramanın başlayacağı karakter konumu. İsteğe bağlıdır, varsayılanı 1'dir. Dönen metin de bu konumdan başlar, yani önceki karakterler sonuca dahil edilmez.
  • count: Yapılacak en fazla değişiklik sayısı. İsteğe bağlıdır, varsayılanı -1'dir ve tüm eşleşmelerin değiştirileceği anlamına gelir.
  • compare: Karşılaştırma türü. İsteğe bağlıdır; verilmezse modülün Option Compare ayarı geçerlidir, ayar yoksa ikili (büyük/küçük harf duyarlı) karşılaştırma yapılır.

Dönüş değeri ve özel durumlar​

İşlev, değişiklikler yapılmış bir String döndürür. Bazı durumlarda sonuç şöyle olur:
  • expression boşsa: Sonuç boş metindir ("").
  • find boşsa: expression olduğu gibi döner.
  • replace boşsa: find parçaları metinden silinir.
  • count 0 ise: expression olduğu gibi döner.
  • start, expression uzunluğundan büyükse: Sonuç boş metindir.
  • expression Null ise: Çalışma zamanı hatası oluşur.

Karşılaştırma sabitleri​

compare bağımsız değişkeni için şu sabitler kullanılır:
  • vbBinaryCompare (0): İkili karşılaştırma; büyük ve küçük harf farklı sayılır.
  • vbTextCompare (1): Metin karşılaştırması; büyük ve küçük harf fark etmez.
  • vbDatabaseCompare (2): Yalnızca Microsoft Access için geçerlidir, Excel'de kullanılmaz.
Türkçe harflerde (i, ı, İ, I) büyük/küçük harf eşleşmesi sistem yerel ayarına göre beklenmedik sonuç verebilir; bu tür aramalarda sonucu mutlaka sınayın.

1. Telefon numarasındaki tireleri silme​

B sütunundaki telefon numaralarından tireleri silip temiz hali C sütununa yazmak istiyorsunuz. Aşağıdaki kodu standart bir modüle (Ekle > Modül) yapıştırın. Sonuç hücreleri başta üretilen metnin başındaki sıfırın kaybolmaması için metin biçimine alınır.
VBA 15 satır
Option Explicit

Sub TireleriTemizle()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ActiveSheet

    For i = 2 To 6
        ' Önce hücreyi metin biçimine alın, baştaki sıfır korunsun
        ws.Cells(i, 3).NumberFormat = "@"
        ' Tireleri boş metinle değiştirerek silin
        ws.Cells(i, 3).Value = Replace(ws.Cells(i, 2).Value, "-", "")
    Next i
End Sub
Replace
Formülünü incelemek için bir hücre seçin.
ABC
1Ad SoyadTelefonTemiz Telefon
2Ayşe Yılmaz0532-111-22-3305321112233
3Mehmet Demir0505-444-55-6605054445566
4Fatma Kaya0542-777-88-9905427778899
5Ali Çelik0533-222-33-4405332223344
6Zeynep Arslan0555-666-77-8805556667788
TelefonExcelDepo v1.0.0
Makro çalışınca C2 hücresine 05321112233, C3 hücresine 05054445566 yazılır. replace bağımsız değişkeni boş metin olduğu için tireler silinmiş, baştaki sıfır ise korunmuştur.

2. Büyük/küçük harf duyarlılığı​

A sütunundaki notlarda para birimi farklı yazımlarla geçiyor (tl, TL, Tl). B sütununa vbTextCompare ile, C sütununa varsayılan ikili karşılaştırmayla sonuç yazılır ve fark görülür. Kodu standart modüle yapıştırın.
VBA 16 satır
Option Explicit

Sub ParaBirimiDuzelt()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ActiveSheet

    For i = 2 To 4
        ' Büyük/küçük harf fark etmeksizin tüm "tl" ifadelerini değiştirin
        ws.Cells(i, 2).Value = Replace(ws.Cells(i, 1).Value, "tl", "TRY", 1, -1, vbTextCompare)

        ' İkili karşılaştırmada yalnız küçük harfli "tl" eşleşir
        ws.Cells(i, 3).Value = Replace(ws.Cells(i, 1).Value, "tl", "TRY", 1, -1, vbBinaryCompare)
    Next i
End Sub
Replace
Formülünü incelemek için bir hücre seçin.
ABC
1AçıklamaDuyarsızDuyarlı
2Kargo 45 tlKargo 45 TRYKargo 45 TRY
3Toplam 1200 TLToplam 1200 TRYToplam 1200 TL
4Fiyat 80 TlFiyat 80 TRYFiyat 80 Tl
Fiyat NotlarıExcelDepo v1.0.0
vbTextCompare kullanılan B sütununda üç satır da değişir; örneğin B3 hücresi Toplam 1200 TRY olur. Varsayılan ikili karşılaştırmanın kullanıldığı C sütununda ise büyük harfli yazımlar eşleşmediği için C3 hücresi Toplam 1200 TL olarak kalır.

3. Değişiklik sayısını ve başlangıcı sınırlama​

Ürün kodlarında tireler var. B sütununa yalnızca ilk tireyi değiştiren (count = 1), C sütununa ise 4. karakterden başlayıp tüm tireleri değiştiren (start = 4) sonuç yazılır. Kodu standart modüle yapıştırın.
VBA 16 satır
Option Explicit

Sub SinirliDegistir()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ActiveSheet

    For i = 2 To 4
        ' Yalnızca ilk eşleşmeyi değiştirin (start = 1, count = 1)
        ws.Cells(i, 2).Value = Replace(ws.Cells(i, 1).Value, "-", "/", 1, 1)

        ' 4. karakterden başlayın; önceki karakterler sonuca dahil edilmez
        ws.Cells(i, 3).Value = Replace(ws.Cells(i, 1).Value, "-", "/", 4)
    Next i
End Sub
Replace
Formülünü incelemek için bir hücre seçin.
ABC
1Kodİlk TireBaşlangıç 4
2TR-34-IST-001TR/34-IST-00134/IST/001
3TR-06-ANK-014TR/06-ANK-01406/ANK/014
4TR-35-IZM-007TR/35-IZM-00735/IZM/007
Ürün KodlarıExcelDepo v1.0.0
B2 hücresinde TR/34-IST-001 görülür; count değeri 1 olduğu için yalnızca ilk tire değişmiştir. C2 hücresinde ise 34/IST/001 yazılır; start değeri 4 olduğu için kodun ilk üç karakteri sonuca alınmaz, bu davranışa dikkat edin.

Kullanırken dikkat edin​

  • start değeri sonucu kırpar: start bağımsız değişkenini 1'den büyük verirseniz dönen metin, o konumdan öncesini içermez. Metnin tamamını koruyup yalnızca belirli bir yerden sonrasını değiştirmek istiyorsanız Left ve Mid işlevleriyle parçaları birleştirin.
  • Özgün metin değişmez: Replace sonucu yalnızca döndürür. Hücredeki değeri değiştirmek için sonucu aynı ya da başka bir hücreye yazmanız gerekir.
  • Sayısal görünümlü sonuçlar: Sonuç yalnızca rakamlardan oluşuyorsa hücreye yazarken Excel bunu sayıya çevirebilir ve baştaki sıfırları siler. Telefon numarası, posta kodu gibi değerlerde hücrenin NumberFormat özelliğini önce "@" yapın.
  • Büyük/küçük harf ve Türkçe karakterler: Varsayılan karşılaştırma büyük/küçük harfe duyarlıdır. Duyarsız arama için vbTextCompare kullanın; ancak i, ı, İ, I harfleri içeren aramalarda sonucu önceden deneyin.
  • Null ve hata değerleri: expression bağımsız değişkeni Null ise hata alırsınız. Hücrede hata değeri (#N/A gibi) varsa Value ile okumak uyumsuzluk hatası verir; önce IsError ile denetleyin.
  • Replace işlevi ile Range.Replace yöntemi: Replace işlevi bir metin değişkeni üzerinde çalışır. Range.Replace yöntemi ise hücre aralığındaki değerleri doğrudan değiştirir ve Bul ve Değiştir penceresi ayarlarını (MatchCase, LookAt gibi) kullanır. İki yapı birbirinin yerine geçmez.
  • İlgili konular:
    • Range.Replace yöntemi: Hücre aralığında toplu bul ve değiştir yapar.
    • InStr: Bir metin içinde alt metnin konumunu bulur.
    • Mid, Left, Right: Metnin parçalarını alır.
    • Split ve Join: Metni ayırıcıya göre böler ve yeniden birleştirir.
    • Trim: Baştaki ve sondaki boşlukları siler.
    • YERİNEKOY: Çalışma sayfasında metin içindeki belirli parçayı değiştirir (SUBSTITUTE).
    • DEĞİŞTİR: Çalışma sayfasında konum ve uzunluğa göre metin değiştirir (REPLACE).
    • Option Compare: Modülün varsayılan karşılaştırma türünü belirler.
Ö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
7
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst