[:tr]Düşeyara Yetmiyorsa[:]

[:tr] Excel gündelik problemlerinizde en çok kullandığınız çözüm ortağınız ise benim gibi bazı durumlarda Microsoft tarafından yazılmış standart fonksiyonlarının yetmediği keşke şu işi şöyle yapan bir fonksiyon olsaydı diyor musun? İşte bir Excel kitabında kendine ait bir fonksiyonu nasıl yazabilirsin anlatmaya çalışacağım. Benim örneğimde elimdeki iki farklı kitapta yer alan liste elemanlarını her birini diğer […]

Yazan - Fatih Anıl

Kasım 15, 2022
"
[:tr]

Excel gündelik problemlerinizde en çok kullandığınız çözüm ortağınız ise benim gibi bazı durumlarda Microsoft tarafından yazılmış standart fonksiyonlarının yetmediği keşke şu işi şöyle yapan bir fonksiyon olsaydı diyor musun? İşte bir Excel kitabında kendine ait bir fonksiyonu nasıl yazabilirsin anlatmaya çalışacağım.

Benim örneğimde elimdeki iki farklı kitapta yer alan liste elemanlarını her birini diğer listede var olup olmadığını belirlemek amacıyla düşeyara() fonksiyonunun yetmediği bir durumla karşılaştım.

Veri güvenliği nedeniyle listedeki örnek isimleri değiştirdim elbet. Burada düşeyara() fonksiyonunun yetmediği nokta arama yatığım listede aradığım isimler tam olarak yazılmadığı için düşeyara() fonksiyonunun son parametresine “doğru” değer verdiğinizde tabi olarak tam eşleşme bulamıyor. Parametreyi “yanlış” değer vererek arama yapılınca ise doğru sonuç döndüremiyor ne yazık ki. Böyle durumlarda hep Ctrl+F ile ulaştığım Ara işlevinin yaptığı gibi bulan bir fonksiyona ihtiyacım oluyor.

Bu problemde fonksiyonumu kendim yazdım.

Fonksiyonu yazmak için ister Ctrl+F11 tuşuyla isterseniz Excel şeridinde “Geliştirici” sekmesini görünür yaparak bu sekme içindeki Visual Basic düğmesiyle ulaşabilirsiniz.

Açılan ekran Excel için Visual Basic diliyle yerleşik işlevlerini de kullanarak bu işlevlerin dışında kalan her türlü ihtiyacınızı kod yazarak Excel’e yaptırabileceğiniz bir alan. Oyun bile yapanı görmüştüm!! Neyse bu ekranı kullanabilmek için bazı temel programlama bilgisine ihtiyacımız olacak. Örneğin değişken nedir gibi, bunların bilindiğini varsayarak devam ediyorum.

VBA for Excel için Visual Basic düzenleme ortamı

Bu ekranda sol tarafta gördüğümüz bölüm açık olan Excel kitaplarını ve bu kitap içerisindeki sayfaları “SheetX” biçiminde gösterir. Burada bulunan sayfalara ya da “ThisWorkbook” yazan nesneye çift tıklayarak sadece bir sayfaya ya da tüm kitapta gerçekleşen eylemler için kodlar yazabiliriz. Ancak bir fonksiyon oluşturmak istiyoruz. Bunun için editörün menüsünde yer alan “Insert” düğmesine basarak alt menüden “Add Module” e tıklamalıyız. Bu düğme ortadaki gri alanda fonksiyonumuzu oluşturacak kodları yazabileceğimiz bir metin editörü oluşturarak, sağdaki Project penceresine de bir “Module1” isminde nesne ekleyecektir.

Editöre ekleyeceğimiz kodlar Excel’de kullanılabilmesi için bir yordam (procedure) olmalıdır yani alt program. Bu yüzden editöre Excel’de işlev olarak kullanabilmek için bir fonksiyon eklemeliyiz. Insert menü tuşuna tıklayarak Add Procedure düğmesiyle bir pencereye ulaşıyoruz. Bu pencerede oluşturacağımız fonksiyona bir isim ve özelliklerini ayarlayacağız. İsim verirken boşluk bırakmadan ve Türkçe karakterler kullanmadan isimlendirmeliyiz. (örneğin EnKüçükDeğeriBul() yerine EnKucukDegeriBul() gibi…) Verdiğimiz ismi doğrudan Excel hücresinde fonksiyonu yazarken kullanacağız. İsmi belirledikten sonra fonksiyonun Excel den çağrılabilmesi için Public özelliğini işaretlemeliyiz, tabi Function tipini de işaretlemeyi unutmadan.

OK düğmesine basıp kod yazmaya geçebiliriz artık. Kodu yazarken test esnasında kodun çalışmasının yolunda olduğunu görebilmek için kullanmak zorunda kaldığım satırları açıklama satırı halinde tutuyorum kodun içerisinde.

Public Function AraliktaVarMi(ByVal findWhat As Range, ByVal findWhere As Range) As Boolean
  Dim c As Range
    Dim foundFirstAddress As String
    foundFirstAddress = ""    
    'MsgBox foundFirstAddress
    'MsgBox findWhat.Text
    'MsgBox findWhere.Address        
    Set c = findWhere.Find(findWhat.Text, LookIn:=xlValues)
    'Debug.Print c.Address    
    If Not c Is Nothing Then
        foundFirstAddress = c.Address
        AraliktaVarMi = True
    Else
        AraliktaVarMi = False
    End If 
    'MsgBox foundFirstAddress
End Function

Elbette kendi yazdığınız kod doğrudan çalışmayabilir. Test edip düzenledikten sonra artık Excel içinde kullanıma hazır olunca fonksiyonu aynı kitap içinde tabi ki kullanabiliriz. Hücre düzenleme modundayken “=” ile başlayarak oluşturduğumuz fonksiyonunun ilk harflerini yazdığımızda Excel’in tamamlamaya çalıştığı listede yazdığımız fonksiyonu görebiliriz.

Yazdığımız fonksiyon işlevini yerine getiriyor ve her satırdaki aradığı hücre değeri için bulmaya çalıştığı aralıkta karşılaşırsa “Doğru”, bulamaz ise “Yanlış” sonucunu döndürüyor. Listeyi daha güzel okunaklı yapmak için işlev yazdığımız B sütunundaki sonuçlara göre “Koşullu biçimlendirme” yaparak bulunan listede olan değerlerin renklendirilmesini sağlayabiliriz.

Koşullu biçimlendirmeyi yapabilmek için aradığımız değer aralığı olan A2 ile A34 aralığını seçip, “Giriş” sekmesinde “Stiller” bölümündeki “Koşullu Biçimlendirme” düğmesine tıklayın. Açılan pencerede “Yeni Kural Ekle”, ardından da “Biçimlendirilecek hücreleri belirlemek için formül kullan” seçeneğine tıklayınca hemen altında açılan “Bu formül doğru olduğunda değerleri biçimlendir” başlıklı kutuya aşağıdaki formülü yazıyoruz:

=B2=Doğru

Ardından pencerenin sağ alt köşesindeki “Biçimlendir” düğmesine tıklayarak listede bulunan hücrelerin nasıl görünmesini arzuluyorsak biçimlendirmesini yapıyoruz. Yazdığımız kod işlevin döndürdüğü sonuca göre hücreyi biçimlendirecek böylece hangi değerin listede bulunduğunu daha kolay ayırt edebileceğiz.

Bahsini ettiğimiz işlemlerin uygulanmış olduğu dosyanın bağlantısını burada bulabilirsiniz.

[:]

0 Comments

Submit a Comment

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir