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.
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.
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.
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.
Söz dizimi
Replace işlevi altı bağımsız değişken alır. İlk üçü zorunludur, son üçü isteğe bağlıdır: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.
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.| A | B | C | |
|---|---|---|---|
| 1 | Ad Soyad | Telefon | Temiz Telefon |
| 2 | Ayşe Yılmaz | 0532-111-22-33 | 05321112233 |
| 3 | Mehmet Demir | 0505-444-55-66 | 05054445566 |
| 4 | Fatma Kaya | 0542-777-88-99 | 05427778899 |
| 5 | Ali Çelik | 0533-222-33-44 | 05332223344 |
| 6 | Zeynep Arslan | 0555-666-77-88 | 05556667788 |
TelefonExcelDepo v1.0.0
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.| A | B | C | |
|---|---|---|---|
| 1 | Açıklama | Duyarsız | Duyarlı |
| 2 | Kargo 45 tl | Kargo 45 TRY | Kargo 45 TRY |
| 3 | Toplam 1200 TL | Toplam 1200 TRY | Toplam 1200 TL |
| 4 | Fiyat 80 Tl | Fiyat 80 TRY | Fiyat 80 Tl |
Fiyat NotlarıExcelDepo v1.0.0
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.| A | B | C | |
|---|---|---|---|
| 1 | Kod | İlk Tire | Başlangıç 4 |
| 2 | TR-34-IST-001 | TR/34-IST-001 | 34/IST/001 |
| 3 | TR-06-ANK-014 | TR/06-ANK-014 | 06/ANK/014 |
| 4 | TR-35-IZM-007 | TR/35-IZM-007 | 35/IZM/007 |
Ürün KodlarıExcelDepo v1.0.0
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.