Excel VBA'da Bul ve Değiştir'i Kullanma

Bu öğretici, Excel VBA'da Bul ve Değiştir yöntemlerinin nasıl kullanılacağını gösterecektir.

VBA Bul

Excel'de mükemmel yerleşik Bulmak ve Bul ve Değiştir aletler.

Kısayollarla etkinleştirilebilirler CTRL + F (Bul) veya CTRL + H (Değiştir) veya Şerit aracılığıyla: Ana Sayfa > Düzenleme > Bul ve Seç.

Tıklayarak Seçenekler, gelişmiş arama seçeneklerini görebilirsiniz:

VBA kullanarak hem Bul hem de Değiştir yöntemlerine kolayca erişebilirsiniz. Bu yerleşik yöntemler, VBA'da kendiniz yazabileceğiniz her şeyden çok daha hızlıdır.

VBA Örneği Bul

Bul işlevini göstermek için, Sayfa1'de aşağıdaki veri setini oluşturduk.

Takip etmek isterseniz, verileri kendi çalışma kitabınıza girin.

<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>

İsteğe Bağlı Parametreler Olmadan VBA Bul

VBA Find yöntemini kullanırken, ayarlayabileceğiniz birçok isteğe bağlı parametre vardır.

Bul Yöntemini kullanırken tüm parametreleri tanımlamanızı şiddetle tavsiye ederiz!

İsteğe bağlı parametreleri tanımlamazsanız, VBA, Excel'in Bul penceresinde şu anda seçili olan parametreleri kullanır. Bu, kod çalıştırıldığında hangi arama parametrelerinin kullanıldığını bilemeyebileceğiniz anlamına gelir. Bul, çalışma kitabının tamamında veya bir sayfada çalıştırılabilir. Formüller veya değerler arayabilir. Excel'in Bul Penceresinde seçili olanı manuel olarak kontrol etmediğiniz sürece bilmenin bir yolu yoktur.

Basit olması için, isteğe bağlı parametre tanımlanmamış bir örnekle başlayacağız.

Basit Bul Örneği

Basit bir Bul örneğine bakalım:

123456789 Alt TestBul()Aralık Olarak MyRange DimMyRange = Sheets("Sayfa1").UsedRange.Find("çalışan") olarak ayarlayınMsgBox MyRange.AddressMsgBox MyRange.ColumnMsgBox MyRange.RowAlt Bitiş

Bu kod, Kullanılan Sayfa1 Aralığında "çalışan"ı arar. “Çalışan” bulursa, ilk bulunan aralığı MyRange değişkenine atar.

Ardından, bulunan metnin adresi, sütunu ve satırı ile mesaj kutuları görüntülenecektir.

Bu örnekte, varsayılan Bul ayarları kullanılmıştır (Excel'in Bul Penceresinde değiştirilmediği varsayılarak):

  • Arama metni kısmen hücre değeriyle eşleştirildi (tam hücre eşleşmesi gerekli değildir)
  • Arama büyük/küçük harf duyarlı değildir.
  • Bul yalnızca tek bir çalışma sayfasında arama yapar

Bu ayarlar çeşitli isteğe bağlı parametrelerle değiştirilebilir (aşağıda tartışılmıştır).

Yöntem Notlarını Bul

  • Bul, metnin bulunduğu hücreyi seçmez. Yalnızca, kodunuzda değiştirebileceğiniz bulunan aralığı tanımlar.
  • Find yöntemi yalnızca bulunan ilk örneği bulur.
  • Joker karakterler (*) kullanabilirsiniz, ör. 'E*' için arama yapın

Hiçbirşey Bulunamadı

Arama metni yoksa, aralık nesnesi boş kalacaktır. Bu, kodunuz konum değerlerini görüntülemeye çalıştığında, var olmadıkları için büyük bir soruna neden olur. Bu, istemediğiniz bir hata mesajıyla sonuçlanacaktır.

Neyse ki, Is Operator'u kullanarak VBA içinde boş bir aralık nesnesini test edebilirsiniz:

1 MyRange Değilse O Zaman Hiçbir Şey Değilse

Kodu önceki örneğimize ekleyerek:

12345678910111213 Alt TestBul()Aralık Olarak MyRange DimMyRange = Sheets("Sayfa1").UsedRange.Find("çalışan") olarak ayarlayınMyRange Değilse O Zaman Hiçbir Şey DeğilseMsgBox MyRange.AddressMsgBox MyRange.ColumnMsgBox MyRange.RowBaşkaMsgBox "Bulunamadı"BitirAlt Bitiş

Parametreleri Bul

Şimdiye kadar, Find yöntemini kullanmanın yalnızca temel bir örneğine baktık. Ancak, aramanızı hassaslaştırmanıza yardımcı olacak bir dizi isteğe bağlı parametre vardır.

Parametre Tip Açıklama değerler
Ne Gerekli Aranacak değer Dize veya sayısal gibi herhangi bir veri türü
Sonrasında İsteğe bağlı Aramanıza başlamak için tek hücre referansı hücre adresi
İçine bakmak İsteğe bağlı Arama için Formüller, Değerler, Yorumlar kullanın xlDeğerler, xlFormüller, xlYorumlar
Bakmak İsteğe bağlı Bir hücrenin bir kısmını veya tamamını eşleştirme xlBütün, xlPart
AramaSiparişi İsteğe bağlı Satırlarda veya sütunlarda arama sırası xlByRows, xlByColummns
Arama Yönü İsteğe bağlı Arama yapmak için yön - ileri veya geri xlSonraki, xlÖnceki
kibrit kutusu İsteğe bağlı Arama büyük/küçük harf duyarlıdır veya değildir Doğru ya da yanlış
MatchByte İsteğe bağlı Yalnızca çift baytlık dil desteği yüklediyseniz kullanılır, örn. Çin Dili Doğru ya da yanlış
Arama Biçimi İsteğe bağlı Hücre biçimine göre aramaya izin ver Doğru ya da yanlış

Parametreden Sonra ve Birden Çok Değer Bul

sen kullan parametreden sonra Aramanız için başlangıç ​​hücresini belirtmek için Bu, aradığınız değerin birden fazla örneğinin olduğu durumlarda kullanışlıdır.

Bir arama zaten bir değer bulduysa ve daha fazla değer bulunacağını biliyorsanız, ilk örneği kaydetmek için Find yöntemini 'Sonra' parametresiyle kullanır ve ardından bu hücreyi sonraki arama için başlangıç ​​noktası olarak kullanırsınız.

Arama metninizin birden çok örneğini bulmak için bunu kullanabilirsiniz:

123456789101112131415161718192021222324252627282930313233343536 Alt TestMultipleFinds()MyRange As Range, OldRange As Range, FindStr As String'Işık ve Isı'nın ilk örneğini arayınMyRange = Sheets("Sayfa1").UsedRange.Find("Işık ve Isı") olarak ayarlayın'Bulumazsan çıkMyRange Hiçbir Şey Değilse Sub'dan Çıkın' Bulunan ilk adresi gösterMsgBox MyRange.Address'Aralık nesnesinin bir kopyasını oluşturOldRange = MyRange olarak ayarlayın'Adresi "|" ile sınırlayarak dizeye ekleyin karakterFindStr = FindStr & "|" & MyRange.Adres'Diğer örnekleri arayan aralığı yineleyinYapmakSonra parametresi olarak önceki bulunan adresi kullanarak 'Işık ve Isı' arayınMyRange = Sheets("Sheet1").UsedRange.Find("Light & Heat", After:=Range(OldRange.Address)) olarak ayarlayın'Adres zaten bulunduysa do döngüsünden çıkın - bu sürekli döngüyü durdururInStr(FindStr, MyRange.Address) ise Çıkış Yap'En son bulunan adresi gösterMsgBox MyRange.Address'En son adresi adres dizisine ekleFindStr = FindStr & "|" & MyRange.Adres'geçerli aralığın bir kopyasını oluşturOldRange = MyRange olarak ayarlayınDöngüAlt Bitiş

Bu kod, kullanılan aralık boyunca yinelenir ve bir "Işık ve Isı" örneği bulduğunda adresi görüntüler.

FindStr'de yinelenen bir adres bulunana kadar kodun döngüye devam edeceğini ve bu durumda Do döngüsünden çıkacağını unutmayın.

LookIn Parametresi

kullanabilirsiniz LookIn parametresi hücrenin hangi bileşeninde arama yapmak istediğinizi belirtmek için. Bir hücrede değerler, formüller veya açıklamalar belirtebilirsiniz.

  • xlDeğerler - Hücre değerlerini arar (hesaplandıktan sonra bir hücrenin son değeri)
  • xlFormüller - Hücre formülü içinde arama yapar (hücreye ne girilirse girilir)
  • xlYorumlar - Hücre notları içinde arama yapar
  • xlYorumlarDişli - Hücre yorumları içinde arama yapar

Çalışma sayfasına bir formül girildiğini varsayarak, herhangi bir formülün ilk konumunu bulmak için bu örnek kodu kullanabilirsiniz:

12345678910 Alt TestLookIn()Aralık Olarak MyRange DimMyRange = Sheets("Sheet1").UsedRange.Find("=", LookIn:=xlFormulas) olarak ayarlayınMyRange Değilse O Zaman Hiçbir Şey DeğilseMsgBox MyRange.AddressBaşkaMsgBox "Bulunamadı"BitirAlt Bitiş

"LookIn" parametresi xlValues ​​olarak ayarlandıysa, kodda "Bulunamadı" mesajı görüntülenir. Bu örnekte B10 döndürecektir.

LookAt Parametresini Kullanma

NS LookAt parametresi find tam hücre eşleşmesini mi arayacağını yoksa arama değerini içeren herhangi bir hücreyi mi arayacağını belirler.

  • xlBütün - Tüm hücrenin arama değeriyle eşleşmesini gerektirir
  • xlParça - Arama dizesi için bir hücre içinde arama yapar

Bu kod örneği, "ışık" metnini içeren ilk hücreyi bulacaktır. İle birlikte Bak:=xlPart, “Işık ve Isı” için bir eşleşme döndürür.

123456789 Alt TestLookAt()Aralık Olarak MyRange DimMyRange = Sheets("Sheet1").UsedRange.Find("light", Lookat:=xlPart) olarak ayarlayınMyRange Değilse O Zaman Hiçbir Şey DeğilseMsgBox MyRange.AddressBaşkaMsgBox "Bulunamadı"BitirAlt Bitiş

Eğer xlBütün ayarlandığında, bir eşleşme yalnızca hücre değeri "hafif" olduğunda geri dönecektir.

Arama Sırası Parametresi

NS Arama Sırası parametresi aramanın aralık boyunca nasıl gerçekleştirileceğini belirler.

  • xlSatırlar - Arama satır satır yapılır
  • xlXolumns - Arama sütun sütun yapılır
123456789 Alt TestAramaSiparişi()Aralık Olarak MyRange DimMyRange = Sheets("Sheet1").UsedRange.Find("employee", SearchOrder:=xlColumns) olarak ayarlayınMyRange Değilse O Zaman Hiçbir Şey DeğilseMsgBox MyRange.AddressBaşkaMsgBox "Bulunamadı"BitirAlt Bitiş

Bu, hangi eşleşmenin önce bulunacağını etkiler.

Daha önce çalışma sayfasına girilen test verileri kullanılarak, arama sırası sütun olduğunda, bulunan hücre A5'tir. Arama sırası parametresi xlRows olarak değiştirildiğinde, bulunan hücre C4'tür.

Arama aralığında yinelenen değerleriniz varsa ve belirli bir sütun adı altında ilk örneği bulmak istiyorsanız bu önemlidir.

Arama Yönü Parametresi

NS Arama Yönü parametresi aramanın hangi yöne gideceğini belirler - etkili bir şekilde ileri veya geri.

  • xlSonraki - Aralıktaki bir sonraki eşleşen değeri ara
  • xlÖnceki - Aralıkta önceki eşleşen değeri arayın

Yine, arama aralığında yinelenen değerler varsa, hangisinin önce bulunduğuna etkisi olabilir.

12345678910 Alt TestSearchDirection()Aralık Olarak MyRange DimMyRange = Sheets("Sheet1").UsedRange.Find("heat", SearchDirection:=xlPrevious) olarak ayarlayın.MyRange Değilse O Zaman Hiçbir Şey DeğilseMsgBox MyRange.AddressBaşkaMsgBox "Bulunamadı"BitirAlt Bitiş

Bu kodu test verilerinde kullanarak, xlPrevious arama yönü C9 konumunu döndürür. xlNext parametresinin kullanılması A4 konumunu döndürür.

Sonraki parametre, aramanın arama aralığının sol üst köşesinde başlayacağı ve aşağı doğru çalışacağı anlamına gelir. Önceki parametre, aramanın, arama aralığının sağ alt köşesinde başlayacağı ve yukarı doğru çalışacağı anlamına gelir.

MatchByte Parametresi

NS MatchBye parametresi yalnızca Çince, Rusça ve Japonca gibi her bir karakteri temsil etmek için çift bayt kullanan diller için kullanılır.

Bu parametre 'True' olarak ayarlanırsa Bul, yalnızca çift baytlık karakterlerle çift baytlık karakterlerle eşleşir. Parametre 'Yanlış' olarak ayarlanırsa, çift baytlık bir karakter, tek veya çift baytlık karakterlerle eşleşir.

Arama Biçimi Parametresi

NS Arama Biçimi parametresi eşleşen hücre biçimlerini aramanızı sağlar. Bu, kullanılan belirli bir yazı tipi, kalın bir yazı tipi veya metin rengi olabilir. Bu parametreyi kullanmadan önce, Application.FindFormat özelliğini kullanarak arama için gereken formatı ayarlamalısınız.

İşte nasıl kullanılacağına bir örnek:

12345678910111213 Alt TestSearchFormat()Aralık Olarak MyRange DimApplication.FindFormat.ClearApplication.FindFormat.Font.Bold = DoğruMyRange = Sheets("Sheet1").UsedRange.Find("heat", Searchformat:=True) olarak ayarlayınMyRange Değilse O Zaman Hiçbir Şey DeğilseMsgBox MyRange.AddressBaşkaMsgBox "Bulunamadı"BitirApplication.FindFormat.ClearAlt Bitiş

Bu örnekte, BulFormat özellik, kalın bir yazı tipi arayacak şekilde ayarlanmıştır. Find ifadesi daha sonra SearchFormat parametresini True olarak ayarlayarak 'ısı' kelimesini arar, böylece yazı tipi kalınsa bu metnin yalnızca bir örneğini döndürür.

Daha önce gösterilen örnek çalışma sayfası verilerinde bu, kalın yazı tipinde 'ısı' kelimesini içeren tek hücre olan A9'u döndürecektir.

Kodun sonunda FindFormat özelliğinin temizlendiğinden emin olun. Bunu yapmazsanız, bir sonraki aramanız yine de bunu hesaba katacak ve yanlış sonuçlar verecektir.

SearchFormat parametresini kullandığınız yerde, arama değeri olarak bir joker karakter (*) de kullanabilirsiniz. Bu durumda, kalın yazı tipiyle herhangi bir değeri arayacaktır:

1 MyRange = Sheets("Sheet1").UsedRange.Find("*", Searchformat:=True) olarak ayarlayın

Birden Fazla Parametre Kullanma

Burada tartışılan tüm arama parametreleri, gerekirse birbirleriyle kombinasyon halinde kullanılabilir.

Örneğin, hücre metninin tamamına bakmak için "LookIn" parametresini "MatchCase" parametresiyle birleştirebilirsiniz, ancak bu büyük/küçük harf duyarlıdır.

123456789 Alt TestMultipleParameters()Aralık Olarak MyRange DimMyRange = Sheets("Sheet1").UsedRange.Find("Light & Heat", LookAt:=xlWhole, MatchCase:=True) olarak ayarlayınMyRange Değilse O Zaman Hiçbir Şey DeğilseMsgBox MyRange.AddressBaşkaMsgBox "Bulunamadı"BitirAlt Bitiş

Bu örnekte, kod A4 döndürecektir, ancak metnin yalnızca bir bölümünü kullandıysak, ör. 'ısı', hiçbir şey bulunmaz çünkü hücre değerinin tamamında eşleşiriz. Ayrıca, dava eşleşmediği için başarısız olur.

1 MyRange = Sheets("Sheet1").UsedRange.Find("heat", LookAt:=xlWhole, MatchCase:=True) olarak ayarlayın

Excel VBA'da değiştirin

Tahmin edebileceğiniz gibi, Excel VBA'da 'Bul'a çok benzer bir şekilde çalışan ancak bulunan hücre konumundaki değerleri yeni bir değerle değiştiren bir Değiştir işlevi vardır.

Bunlar, Replace method deyiminde kullanabileceğiniz parametrelerdir. Bunlar, Find yöntemi deyimiyle tamamen aynı şekilde çalışır. "Bul"un tek farkı, bir Değiştirme parametresi belirtmeniz gerekmesidir.

İsim Tip Açıklama değerler
Ne Gerekli Aranacak değer Dize veya sayısal gibi herhangi bir veri türü
Yenisiyle değiştirme Gerekli Yedek dize. Dize veya sayısal gibi herhangi bir veri türü
Bakmak İsteğe bağlı Hücrenin bir kısmını veya tamamını eşleştirme xlPart veya xlBütün
AramaSiparişi İsteğe bağlı Arama sırası - Satırlar veya Sütunlar xlByRows veya xlByColumns
kibrit kutusu İsteğe bağlı Arama büyük/küçük harf duyarlıdır veya değildir Doğru ya da yanlış
MatchByte İsteğe bağlı Yalnızca çift bayt dil desteği yüklediyseniz kullanılır Doğru ya da yanlış
Arama Biçimi İsteğe bağlı Hücre biçimine göre aramaya izin ver Doğru ya da yanlış
Biçim Değiştir İsteğe bağlı Yöntemin değiştirme biçimi. Doğru ya da yanlış

Biçim Değiştir parametresi, belirli bir biçime sahip bir hücreyi arar; Kalın, SearchFormat parametresinin Find yönteminde çalıştığı gibi. Daha önce gösterilen Bul örnek kodunda gösterildiği gibi, önce Application.FindFormat özelliğini ayarlamanız gerekir.

İsteğe Bağlı Parametreler Olmadan Değiştir

En basit haliyle, aradığınızı ve yerine ne koymak istediğinizi belirtmeniz yeterlidir.

123 Alt TestDeğiştir()Sheets("Sayfa1").UsedRange.Replace What:="Light & Heat", Replace:="L & H"Alt Bitiş

Find yönteminin yalnızca eşleşen değerin ilk örneğini döndüreceğini, Replace yönteminin ise belirtilen tüm aralıkta çalıştığını ve eşleşme bulduğu her şeyi değiştirdiğini unutmayın.

Burada gösterilen değiştirme kodu, UseRange nesnesi tarafından tanımlanan tüm hücre aralığı boyunca her "Light & Heat" örneğini "L & H" ile değiştirecektir.

VBA Metin Dizesindeki Metni Bulmak veya Değiştirmek için VBA'yı Kullanma

Yukarıdaki örnekler, Excel verileriyle etkileşim kurmak için VBA kullanırken harika çalışır. Ancak, VBA dizeleriyle etkileşim kurmak için INSTR ve REPLACE gibi yerleşik VBA İşlevlerini kullanabilirsiniz.

kullanabilirsiniz INSTR İşlevi daha uzun bir dize içindeki bir metin dizesini bulmak için.

123 Alt TestInstr()MsgBox InStr("Bu MyText dizesidir", "MyText")Alt Bitiş

Bu örnek kod, aranacak dizede 'MyText'in bulunduğu sayı konumu olan 9 değerini döndürür.

Büyük/küçük harfe duyarlı olduğunu unutmayın. Eğer 'MyText' tamamen küçük harf ise, o zaman 0 değeri döndürülür, bu da arama dizesinin bulunamadığını gösterir. Aşağıda, büyük/küçük harf duyarlılığının nasıl devre dışı bırakılacağını tartışacağız.

INSTR - Başlat

Kullanılabilir iki isteğe bağlı parametre daha vardır. Arama için başlangıç ​​noktasını belirleyebilirsiniz:

1 MsgBox InStr(9, "Bu MyText dizesidir", "MyText")

Başlangıç ​​noktası 9 olarak belirtilir, bu nedenle yine 9 döndürür. Başlangıç ​​noktası 10 ise, başlangıç ​​noktası çok ileride olacağından 0 (eşleşme yok) döndürür.

INSTR - Büyük/küçük harf duyarlılığı

Ayrıca bir Karşılaştırma parametresi de ayarlayabilirsiniz. vbBinaryCompare veya vbTextCompare. Bu parametreyi ayarlarsanız, deyimin bir başlangıç ​​parametresi değerine sahip olması gerekir.

  • vbBinaryCompare - Büyük/küçük harfe duyarlı (Varsayılan)
  • vbTextCompare - Büyük küçük harf duyarlı değil
1 MsgBox InStr(1, "Bu MyText dizesidir", "mytext", vbTextCompare)

Arama metni küçük harfle yazılmış olsa bile, bu ifade yine 9 döndürür.

Büyük/küçük harf duyarlılığını devre dışı bırakmak için, kod modülünüzün üst kısmında Metni Karşılaştır Seçeneği'ni de belirtebilirsiniz.

VBA Değiştirme İşlevi

Bir dizedeki karakterleri kodunuzdaki farklı metinlerle değiştirmek istiyorsanız, bunun için Replace yöntemi idealdir:

123 Alt TestDeğiştir()MsgBox Replace("Bu MyText dizesidir", "MyText", "My Text")Alt Bitiş

Bu kod, 'MyText'i' 'My Text' ile değiştirir. İkili karşılaştırma varsayılan olduğundan, arama dizesinin büyük/küçük harfe duyarlı olduğunu unutmayın.

Diğer isteğe bağlı parametreleri de ekleyebilirsiniz:

  • Başlangıç - değiştirmenin başlaması gereken ilk dizideki konumu tanımlar. Find yönteminden farklı olarak, Start parametresi tarafından tanımlanan karakter numarasından başlayarak kesilmiş bir dize döndürür.
  • Saymak - yapılacak değiştirme sayısını tanımlar. Varsayılan olarak Değiştir, bulunan arama metninin her örneğini değiştirir, ancak Count parametresini 1 olarak ayarlayarak bunu tek bir değiştirmeyle sınırlayabilirsiniz.
  • Karşılaştırmak - Find yönteminde olduğu gibi, kullanarak ikili arama veya metin araması belirtebilirsiniz. vbBinaryCompare veya vbTextCompare. İkili dosya büyük/küçük harf duyarlıdır ve metin büyük/küçük harfe duyarlı değildir
1 MsgBox Replace("Bu MyText dizesidir (mytext)", "MyText", "My Text", 9, 1, vbTextCompare)

Bu kod, 'Metin dizem (mytext)' değerini döndürür. Bunun nedeni, verilen başlangıç ​​noktasının 9 olması, dolayısıyla yeni döndürülen dizenin 9 karakterinden başlamasıdır. Count parametresi 1 olarak ayarlandığından sadece ilk 'MyText' değiştirildi.

Değiştir yöntemi, kesme işareti içeren kişilerin adları gibi sorunları çözmek için idealdir; O'Flynn. Bir dize değeri tanımlamak için tek tırnak kullanıyorsanız ve bir kesme işareti varsa, kod kesme işaretini dizenin sonu olarak yorumlayacağından ve dizenin geri kalanını tanımayacağından bu bir hataya neden olur.

Kesme işaretini hiçbir şey olmadan değiştirmek ve tamamen kaldırmak için Replace yöntemini kullanabilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave