İçindekiler
Bu eğitimde, ihtiyaçlarınıza en uygun olanı seçebilmeniz için birden fazla kelimeyi, dizeyi veya tek tek karakterleri bulmanın ve değiştirmenin çeşitli yollarını inceleyeceğiz.
İnsanlar Excel'de genellikle nasıl arama yaparlar? Çoğunlukla, tek değerler için iyi çalışan Bul ve Değiştir özelliğini kullanarak. Peki ya değiştirilecek onlarca hatta yüzlerce öğeniz varsa? Elbette, hiç kimse tüm bu değiştirmeleri tek tek manuel olarak yapmak ve ardından veriler değiştiğinde her şeyi yeniden yapmak istemez. Neyse ki, Excel'de toplu değiştirme yapmak için birkaç daha etkili yöntem var veher birini ayrıntılı olarak inceleyeceğiz.
İç içe SUBSTITUTE ile birden çok değeri bulma ve değiştirme
Excel'de birden fazla girişi bulmanın ve değiştirmenin en kolay yolu SUBSTITUTE işlevini kullanmaktır.
Formülün mantığı çok basittir: eski bir değeri yenisiyle değiştirmek için birkaç ayrı işlev yazarsınız. Ve sonra, bu işlevleri birbiri içine yerleştirirsiniz, böylece sonraki her SUBSTITUTE bir sonraki değeri aramak için önceki SUBSTITUTE'ın çıktısını kullanır.
IKAME(IKAME(IKAME( Metin , old_text1 , new_text1 ), old_text2 , new_text2 ), old_text3 , new_text3 )A2:A10'daki konumlar listesinde, kısaltılmış ülke adlarını değiştirmek istediğinizi varsayalım (örneğin FR , BIRLEŞIK KRALLIK ve ABD ) tam adlarıyla birlikte.
Bunu yapmak için, aşağıdaki ekran görüntüsünde gösterildiği gibi eski değerleri D2: D4'e ve yeni değerleri E2: E4'e girin. Ardından, aşağıdaki formülü B2'ye yerleştirin ve Enter tuşuna basın:
=SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
...ve tüm değişimleri bir kerede yapacaksınız:
Lütfen unutmayın, yukarıdaki yaklaşım yalnızca Excel 365 dinamik dizileri destekler.
Excel 2019, Excel 2016 ve önceki dinamik sürümlerde, formülün en üstteki hücre (B2) için yazılması ve ardından aşağıdaki hücrelere kopyalanması gerekir:
=SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Lütfen bu durumda, değiştirme değerlerini mutlak hücre referanslarıyla kilitlediğimize dikkat edin, böylece formül aşağı kopyalanırken kaymazlar.
Not: SUBSTITUTE işlevi büyük/küçük harfe duyarlı yani eski değerleri yazmanız gerekir ( old_text ) orijinal verilerde göründükleri gibi aynı harf durumunda.
Her ne kadar kolay olsa da, bu yöntemin önemli bir dezavantajı vardır - değiştirilecek düzinelerce öğeniz olduğunda, iç içe geçmiş işlevleri yönetmek oldukça zorlaşır.
Avantajlar Uygulaması kolay; tüm Excel sürümlerinde desteklenir
Dezavantajlar : sınırlı sayıda bul/değiştir değeri için kullanılması en iyisidir
XLOOKUP ile birden çok girişi arama ve değiştirme
Değiştirmek istediğinizde tüm hücre içeriği değil, XLOOKUP işlevi kullanışlı hale gelir.
Diyelim ki A sütununda bir ülke listeniz var ve tüm kısaltmaları ilgili tam adlarla değiştirmeyi hedefliyorsunuz. Önceki örnekte olduğu gibi, "Bul" ve "Değiştir" öğelerini ayrı sütunlara (sırasıyla D ve E) girerek başlarsınız ve ardından bu formülü B2'ye girersiniz:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Excel dilinden insan diline çevrildiğinde, formülün yaptığı şey şudur:
D2:D4 (lookup_array) içinde A2 değerini (lookup_value) arayın ve E2:E4 (return_array) içinden bir eşleşme döndürün. Bulunamazsa, A2'den orijinal değeri çekin.
Formülün aşağıdaki hücrelere kopyalanmasını sağlamak için doldurma tutamacına çift tıklayın ve sonuç sizi bekletmesin:
DÜŞEYARA işlevi yalnızca Excel 365'te mevcut olduğundan, yukarıdaki formül önceki sürümlerde çalışmayacaktır. Ancak, EĞERHATA veya EĞERNA ve DÜŞEYARA kombinasyonuyla bu davranışı kolayca taklit edebilirsiniz:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Not: SUBSTITUTE işlevinin aksine, XLOOKUP ve VLOOKUP işlevleri büyük/küçük harfe duyarlı değil yani harf büyüklüğünü göz ardı ederek arama değerlerini ararlar. Örneğin, formülümüz hem FR ve fr ile Fransa .
Avantajlar : olağan işlevlerin alışılmadık kullanımı; tüm Excel sürümlerinde çalışır
Dezavantajlar : hücre düzeyinde çalışır, hücre içeriğinin bir kısmını değiştiremez
Özyinelemeli LAMBDA işlevi kullanarak çoklu değiştirme
Microsoft 365 aboneleri için Excel, geleneksel bir formül dili kullanarak özel işlevler oluşturmaya izin veren özel bir işlev sağlar. Evet, LAMBDA'dan bahsediyorum. Bu yöntemin güzelliği, çok uzun ve karmaşık bir formülü çok kompakt ve basit bir formüle dönüştürebilmesidir. Dahası, Excel'de bulunmayan kendi işlevlerinizi oluşturmanıza olanak tanır, bu daha önce olan bir şeydisadece VBA ile mümkündür.
Özel LAMBDA işlevleri oluşturma ve kullanma hakkında ayrıntılı bilgi için lütfen şu eğitime göz atın: Excel'de LAMBDA işlevleri nasıl yazılır. Burada, birkaç pratik örneği tartışacağız.
Avantajlar : sonuç, değiştirme çiftlerinin sayısı ne olursa olsun, zarif ve kullanımı inanılmaz derecede basit bir işlevdir
Dezavantajlar : yalnızca Excel 365'te kullanılabilir; çalışma kitabına özgüdür ve farklı çalışma kitaplarında yeniden kullanılamaz
Örnek 1. Birden fazla kelimeyi / dizeyi aynı anda arayın ve değiştirin
Birden fazla kelimeyi veya metni tek seferde değiştirmek için özel bir LAMBDA işlevi oluşturduk MultiReplace Bu formlardan birini alabilir:
=LAMBDA(metin, eski, yeni, IF(eski"", MultiReplace(SUBSTITUTE(metin, eski, yeni), OFFSET(eski, 1, 0), OFFSET(yeni, 1, 0)), metin)
Ya da
=LAMBDA(metin, eski, yeni, IF(eski="", metin, MultiReplace(SUBSTITUTE(metin, eski, yeni), OFFSET(eski, 1, 0), OFFSET(yeni, 1, 0))))
Her ikisi de kendilerini çağıran özyinelemeli fonksiyonlardır. Aralarındaki fark sadece çıkış noktasının nasıl belirlendiğidir.
İlk formülde, EĞER işlevi aşağıdakilerin olup olmadığını kontrol eder eski listesi boş değil (eski""). DOĞRU ise MultiReplace fonksiyonu çağrılır. FALSE ise, fonksiyon Metin mevcut halini alır ve çıkar.
İkinci formül ters mantık kullanır: eğer eski boş ise (old=""), o zaman return Metin ve çıkın; aksi takdirde MultiReplace .
En zor kısım tamamlandı! Yapmanız gereken tek şey MultiReplace işlevini aşağıdaki ekran görüntüsünde gösterildiği gibi Ad Yöneticisinde adlandırın. Ayrıntılı yönergeler için lütfen LAMBDA işlevi nasıl adlandırılır bölümüne bakın.
Fonksiyon bir isim aldıktan sonra, onu diğer dahili fonksiyonlar gibi kullanabilirsiniz.
İki formül varyasyonundan hangisini seçerseniz seçin, son kullanıcı açısından sözdizimi bu kadar basittir:
MultiReplace(metin, eski, yeni)Nerede?
- Metin - kaynak veri
- Eski - bulunacak değerler
- Yeni - ile değiştirilecek değerler
Önceki örneği biraz daha ileri götürerek, sadece ülke kısaltmalarını değil, eyalet kısaltmalarını da değiştirelim. Bunun için kısaltmaları ( eski değerleri) D2'den başlayarak D sütununda ve tam adları ( yeni değerleri) E2'de başlayan E sütununda.
B2'de MultiReplace işlevini girin:
=MultiReplace(A2:A10, D2, E2)
Enter tuşuna basın ve sonuçların tadını çıkarın :)
Bu formül nasıl çalışır?
Formülü anlamak için ipucu özyinelemeyi anlamaktır. Bu karmaşık gelebilir, ancak prensip oldukça basittir. Her yinelemede, özyinelemeli bir işlev daha büyük bir sorunun küçük bir örneğini çözer. Bizim durumumuzda MultiReplace fonksiyonu eski ve yeni değerler arasında döngüler yapar ve her döngüde bir değiştirme gerçekleştirir:
MultiReplace (SUBSTITUTE(metin, eski, yeni), OFFSET(eski, 1, 0), OFFSET(yeni, 1, 0))
İç içe SUBSTITUTE işlevlerinde olduğu gibi, bir önceki SUBSTITUTE işlevinin sonucu Metin parametresini bir sonraki SUBSTITUTE için kullanır. Başka bir deyişle, sonraki her MultiReplace SUBSTITUTE işlevi orijinal metin dizesini değil, önceki çağrının çıktısını işler.
üzerindeki tüm öğeleri işlemek için eski listesinde, en üstteki hücre ile başlarız ve her etkileşimde 1 satır aşağı gitmek için OFFSET işlevini kullanırız:
OFFSET(eski, 1, 0)
Aynı işlem yeni Liste:
OFFSET(yeni, 1, 0)
En önemli şey, bir çıkış noktası özyinelemeli çağrıların sonsuza kadar devam etmesini önlemek için. Bu IF fonksiyonu yardımıyla yapılır - eğer eski hücre boşsa, işlev şu sonucu döndürür Metin bugünkü halini alır ve çıkar:
=LAMBDA(metin, eski, yeni, IF(eski="", metin, MultiReplace(...))
veya
=LAMBDA(metin, eski, yeni, IF(eski"", MultiReplace(...), metin))
Örnek 2. Excel'de birden çok karakteri değiştirin
Prensip olarak MultiReplace işlevi, yukarıdaki ekran görüntülerinde kısaltılmış ve tam adlarda olduğu gibi, her eski ve yeni karakterin ayrı bir hücreye girilmesi koşuluyla, tek tek karakterleri de işleyebilir.
Eski karakterleri bir hücreye ve yeni karakterleri başka bir hücreye girmeyi veya bunları doğrudan formüle yazmayı tercih ederseniz, şu adda başka bir özel işlev oluşturabilirsiniz ReplaceChars Bu formüllerden birini kullanarak:
=LAMBDA(text, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), text)
Ya da
=LAMBDA(text, old_chars, new_chars, IF(old_chars="", text, ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
Yeni Lambda işlevinizi her zamanki gibi Ad Yöneticisi'nde adlandırmayı unutmayın:
Ve yeni özel fonksiyonunuz kullanıma hazırdır:
ReplaceChars(text, old_chars, new_chars)Nerede?
- Metin - orijinal dizeler
- Eski - aranacak karakterler
- Yeni - ile değiştirilecek karakterler
Bir saha testi yapmak için, içe aktarılan veriler üzerinde sıklıkla gerçekleştirilen bir şeyi yapalım - akıllı tırnak işaretlerini ve akıllı kesme işaretlerini düz tırnak işaretleri ve düz kesme işaretleriyle değiştirelim.
İlk olarak, akıllı tırnak ve akıllı kesme işaretini D2'ye, düz tırnak ve düz kesme işaretini E2'ye giriyoruz ve daha iyi okunabilirlik için karakterleri boşluklarla ayırıyoruz. (Her iki hücrede de aynı sınırlayıcıyı kullandığımız için, sonuç üzerinde herhangi bir etkisi olmayacaktır - Excel sadece bir boşluğu bir boşlukla değiştirecektir).
Bundan sonra, bu formülü B2'ye giriyoruz:
=ReplaceChars(A2:A4, D2, E2)
Ve tam olarak aradığımız sonuçları elde ettik:
Karakterleri doğrudan formülün içine yazmak da mümkündür. Bizim durumumuzda, düz tırnak işaretlerini şu şekilde "çoğaltmayı" unutmayın:
=ReplaceChars(A2:A4, "" " '", "" "" '")
Bu formül nasıl çalışır?
Bu ReplaceChars fonksiyonunun döngüsü old_chars ve new_chars ve soldaki ilk karakterden başlayarak her seferinde bir değiştirme yapar. Bu kısım SUBSTITUTE fonksiyonu tarafından yapılır:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Her yinelemede, RIGHT işlevi hem soldan hem de sağdan birer karakter çıkarır. old_chars ve new_chars dizgileri, böylece LEFT ikame için bir sonraki karakter çiftini getirebilir:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Her özyinelemeli çağrıdan önce, IF fonksiyonu old_chars Eğer boş değilse, işlev kendini çağırır. Son karakter değiştirilir değiştirilmez, yineleme işlemi biter, formül geri döner Metin bugünkü halini alır ve çıkar.
Not: Temel formüllerimizde kullanılan SUBSTITUTE işlevi büyük/küçük harfe duyarlı , her iki Lambda ( MultiReplace ve ReplaceChars ) büyük ve küçük harfleri farklı karakterler olarak ele alır.
UDF ile toplu bulma ve değiştirme
LAMBDA işlevinin Excel'inizde mevcut olmaması durumunda, VBA kullanarak geleneksel bir şekilde çoklu değiştirme için kullanıcı tanımlı bir işlev yazabilirsiniz.
UDF'yi LAMBDA tarafından tanımlananlardan ayırmak için MultiReplace fonksiyonunu farklı bir şekilde adlandıracağız, örneğin MassReplace Fonksiyonun kodu aşağıdaki gibidir:
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'sonuçları saklamak için dizi Dim arSearchReplace(), sTmp As String 'bulma/değiştirme çiftlerinin saklanacağı dizi, geçici dize Dim iFindCurRow, cntFindRows As Long 'SearchReplace dizisinin geçerli satırının indeksi, satır sayısı Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'kaynak aralığındaki geçerli satırın indeksi, kaynak aralığındaki geçerli sütunun indeksi, satır sayısı, sütun sayısı cntInputRows = InputRng.Rows.Count cntInputCols = InputRng.Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'bul/değiştir çiftleri dizisini hazırlama ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Kaynak aralıkta arama ve değiştirme For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Her hücredeki tüm bulma/değiştirme çiftlerini değiştirmeFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Sonraki arRes(iInputCurRow, iInputCurCol) = sTmp Sonraki Sonraki MassReplace = arRes End FonksiyonuLAMBDA tanımlı fonksiyonlar gibi, UDF'ler de çalışma kitabı genelinde Bu da demek oluyor ki MassReplace işlevi yalnızca kodu eklediğiniz çalışma kitabında çalışacaktır. Bunu doğru şekilde nasıl yapacağınızdan emin değilseniz, lütfen Excel'de VBA kodu ekleme bölümünde açıklanan adımları izleyin.
Kod çalışma kitabınıza eklendikten sonra, işlev formül intellisense'inde görünecektir - yalnızca işlevin adı, bağımsız değişkenler değil! Yine de, sözdizimini hatırlamanın önemli olmadığına inanıyorum:
MassReplace(input_range, find_range, replace_range)Nerede?
- Input_range - değerleri değiştirmek istediğiniz kaynak aralığı.
- Find_range - aranacak karakterler, dizeler veya sözcükler.
- Replace_range - ile değiştirilecek karakterler, dizeler veya sözcükler.
Excel 365'te, dinamik diziler için destek nedeniyle, bu yalnızca en üst hücreye (B2) girilmesi gereken normal bir formül olarak çalışır:
=MassReplace(A2:A10, D2:D4, E2:E4)
Dinamik öncesi Excel'de bu, eski tarz bir CSE dizi formülü olarak çalışır: tüm kaynak aralığını (B2:B10) seçer, formülü yazar ve tamamlamak için Ctrl + Shift + Enter tuşlarına aynı anda basarsınız.
Avantajlar : Excel 2019, Excel 2016 ve önceki sürümlerde özel bir LAMBDA işlevine iyi bir alternatif
Dezavantajlar : çalışma kitabı makro özellikli bir .xlsm dosyası olarak kaydedilmelidir
Excel'de VBA makrosu ile toplu değiştirme
Genel görevleri makrolarla otomatikleştirmeyi seviyorsanız, bir aralıktaki birden çok değeri bulmak ve değiştirmek için aşağıdaki VBA kodunu kullanabilirsiniz.
Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "Kaynak veri:" , "Toplu Değiştirme" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Set ReplaceRng = Application.InputBox( "Değiştirme aralığı:" , "Toplu Değiştirme" , Type :=8) Err.Clear If Not ReplaceRng Is Nothing ThenApplication.ScreenUpdating = False For Each Rng In ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End SubMakroyu hemen kullanmak için kodu içeren örnek çalışma kitabımızı indirebilir veya kodu kendi çalışma kitabınıza ekleyebilirsiniz.
Makro nasıl kullanılır
Makroyu çalıştırmadan önce, eski ve yeni değerleri aşağıdaki resimde gösterildiği gibi iki bitişik sütuna yazın (C2:D4).
Ardından kaynak verilerinizi seçin, Alt + F8 tuşlarına basın ve BulkReplace makrosunu seçin ve Koşmak .
Olarak kaynak öfke önceden seçilidir, referansı doğrulayın ve Tamam'a tıklayın:
Bundan sonra, aşağıdakileri seçin aralığı değiştirin ve Tamam'a tıklayın:
Tamamdır!
Avantajlar : bir kez kurun, istediğiniz zaman yeniden kullanın
Dezavantajlar : makronun her veri değişikliğinde çalıştırılması gerekir
Excel'de Alt Dize aracıyla çoklu bulma ve değiştirme
İlk örnekte, iç içe SUBSTITUTE'ın Excel'de birden fazla değeri değiştirmenin en kolay yolu olduğundan bahsetmiştim. Yanıldığımı kabul ediyorum. Ultimate Suite'imiz işleri daha da kolaylaştırıyor!
Çalışma sayfanızda toplu değiştirme yapmak için Ablebits Verileri sekmesine tıklayın ve Alt Dize Araçları > Alt Dizeleri Değiştir .
Bu Alt Dizeleri Değiştir tanımlamanızı isteyen bir iletişim kutusu görünecektir. Kaynak menzil ve Alt dizeler menzil.
İki aralık seçili durumdayken Değiştirin düğmesine basın ve sonuçları orijinal verilerin sağına eklenen yeni bir sütunda bulun. Evet, işte bu kadar kolay!
İpucu. Tıklamadan önce Değiştirin göz önünde bulundurmanız gereken önemli bir şey var - Harfe duyarlı Büyük ve küçük harfleri farklı karakterler olarak ele almak istiyorsanız bu seçeneği işaretlediğinizden emin olun. Bu örnekte, yalnızca büyük harfli dizeleri değiştirmek ve diğer sözcükler içindeki "fr", "uk" veya "ak" gibi alt dizeleri olduğu gibi bırakmak istediğimiz için bu seçeneği işaretliyoruz.
Dizeler üzerinde başka hangi toplu işlemlerin gerçekleştirilebileceğini merak ediyorsanız, Ultimate Suite'imize dahil olan diğer Substring Araçlarına göz atın. Veya daha da iyisi, aşağıdaki değerlendirme sürümünü indirin ve deneyin!
Excel'de aynı anda birden fazla kelimeyi ve karakteri bulmanın ve değiştirmenin yolu budur. Okuduğunuz için teşekkür ediyor ve gelecek hafta blogumuzda görüşmeyi umuyorum!
Mevcut indirmeler
Excel'de (.xlsm dosyası) çoklu bulma ve değiştirme
Ultimate Suite 14 günlük tam işlevli sürüm (.exe dosyası)