Anasayfa | Akademik Forum | Sizden Gelenler | Sipariş
Menü Açıklamaları
Sorular - Cevaplar
Makaleler
Makrolar
Yerleşik İşlevler
Animasyonlar
Yumurtalar
Fonksiyonlar
MTK Programlar
ExcelCE
Dosya İndir
Neler Yaptık?
İletişim
Makaleler
Veri Doğrulama (Data Validation) - 4  -  M. Temel Korkmaz
Veri Doğrulamanın VBA Yönü - 2

.Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Formula1:="=D1:D10"
Add komutunun dördüncü argümanı ise Formula’dır. "Veri Doğrulama" penceresinde bulunan “Ayarlar” sayfa sekmesindeki “Kaynak” kutusu/kutularına girilen formüllerin yazılması ile oluşur.

Kodu ilk yazdığımızda bir yorumda bulunacağımızdan bahsetmiştik. Bunun için Şekil-2 ve Şekil-3’deki görüntülere tekrar bakmanızı ve neden A1 hücresinde 10 kayıt varken A9 hücresinde 2 kayıt bulunuyor.

YORUM
Bu farklılığın nedeni Add komutuna ait  Formula1:="=D1:D10" argümanın farklı tanımlanmasından kaynaklanmaktadır. Excel’i baştan öğrenen okurlarımız şunu biliyorlar ki Excel hücrelerinde iki farklı adres tanımlama tipi vardır. Bunlardan birisi “Mutlak Başvuru” diğeri ise “Göreceli Başvuru”dur. Bu konuyu bildiğiniz varsayarak kısa bir açıklama yapacağız. Hücrelere ait adres tanımlamalarında eğer “$” işaretini kullanmışsanız, başında bu işaretin geldiği satır yada sütun tanımlaması sabitlenmiştir. Yani yukarıdaki formülü Formula1:="=$D$1:$D$10" şeklinde yazmış olsaydınız. A1:A20 arasındaki bütün sütunlardaki liste kutularında kesinlikle 10’ar tane seçenek olacaktı.

Excel her bir hücreye tek tek veri doğrulamayı gerçekleştirmektedir. Her ne kadar bunu hızla yapmış olsa da ve siz fark etmeseniz de, seçim içerisinde bulunan A1.A20 arasındaki bütün hücrelere bu işlemi tek tek ama hızlıca uygulamıştır. Şimdi Şekil-19 ve Şekil-20’ye dikkatlice bakın.





Şekil-19’a baktığınızda göreceksiniz ki, önce A1 hücresini seçtik ve sonra “"Veri Doğrulama" komutunu çalıştırdık. “Kaynak” kutusuna fare imlecini konumlandırdık. Hücre aralığının D1:D10 arasında kesikli çizgilerle belirlendiğine şahit olduk. "Veri Doğrulama" penceresini kapattık ve bu defa Şekil-20’deki gibi A9 hücresini seçtik. "Veri Doğrulama" penceresini çalıştırdık ve “Kaynak” kutuna fare imlecimizi konumlandırdık. Bu defada D9:D18 hücrelerinin kesikli çizgilerle belirlendiğini gördük.

Nasıl ki, A1 hücresine =B1 yazdığınızda ve sonra da A1 hücresindeki bu formülü aşağıya doğru çoğalttığımızda A2’deki formül =B2 ve A3’deki formül =B3 oluyor ise burada da durum aynıdır. Aslında yukarıdaki örnekte A9 hücresinde yine 10 adet seçenek var ancak kaynak verilerde kayma gerçekleştiği için diğer 8 tane seçenek listede boş olarak görüntülenmektedir. Eğer A1 hücresine =$B$1 yazmış olup ve bu formülü çoğaltmış olsaydınız A2, a3 ve diğer hücrelerdeki formülün hep =$B$1 olarak sabitlendiğini görecektiniz. İşte bu durum Göreceli ve Mutlak Başvuru arasındaki farkı açıklamaktadır.

.IgnoreBlank = True
“A1:A20 hücreleri arasında bulunan veri doğrulamalardaki hücre veya başvurular veya formüller için bağımlı bir hücre boş olduğunda hata iletisinin görünmesini durdurur.” "Veri Doğrulama" penceresinde, “Ayarlar” sayfa sekmesinde ki “Boşluğu yoksay” seçeneği ile aynı işlemi görür.

.InCellDropdown = True
“A1:A20 hücreleri arasında bulunan veri doğrulamalardaki hücrelerde açılır kutu oluşturulmasına izin ver.” Bu seçenek "Veri Doğrulama" penceresinde “Ayarlar” sayfa sekmesindeki “Hücrede açılma” seçeneği ile aynı işlevi görür.

Eğer bu seçeneği False yaparsanız, kaynak listeniz "Veri Doğrulama" oluşturacak hücrelere yerleşir ancak size herhangi bir açılır kutu sunmaz. Ancak siz o listede olmayan bir veri girdiğinizde ve hata uyarısını belirlediğinizde, olmayan veri için uyarı alırsınız.

Kod içerisindeki diğer seçeneklerin ne manaya geldiğini açıklamıştık.

ÖRNEK ÇALIŞMA
Dilerseniz birlikte içerisinde Veri Doğrulamanın da bulunduğu bir örnek hazırlayalım. Ancak bu örnekte sadece Liste özelliğini kullanacağız. Önce hazırlıklarımız yapalım.

1. Bir Excel Çalışma Kitabı açın.

2. Çalışma kitabında tek bir sayfa kalsın ve diğer bütün sayfaları silin.

3. Tek kalan bu çalışma sayfasına “VeriDogrulama” adını verin.

4. Çalışma sayfasının A1,A2 ve A3 hücrelerini Şekil-21’deki gibi düzenleyin. Bu hücrelerde, daha önce oluşturduğumuz kaynak listesindeki hücrelerden veri alacağız.



5. Kaynak listesini de D, E ve F hücrelerine Şekil-21’de görüldüğü gibi yerleştirin ve verilerinizi de bu hücrelere yine aynı şekildeki gibi girin. Konuyu anlamak için lütfen F sütunundaki verileri aynen girin. İlk etapta kaynak listenin tam olarak bizim girdiğimiz veriler kadar olmasına özen gösterin.

6. Denetim Araç Çubuğunda bulunan IMAGE nesnesinden bir adet Şekil-21’deki gibi bizim yerleştirdiğimiz bölgeye yerleştirin.

Image nesnesini yerleştirdiğinizde “Tasarım Modu” araç çubuğu açılacaktır. “Tasarım Modu” dediğimiz şey Denetim Araç Çubuğunda bulunan cetvel simgesidir.

7. Tasarım modu açık iken, image nesnesinin üzerine sağ fare tuşu ile tıklayın. Açılan menüden, Özellikler (Properties) seçeneğini seçin. Ekrana Image nesnesine ait Properties penceresi gelecektir.

8. Properties penceresinden AutoSize özelliğinin False olduğunu göreceksiniz. Bunu True olarak değiştirin. Burada amacımız şu, image nesnesine aktarılacak olan resimlerin boyutları farklı olabilir. Bu özelliği geçerli yaptığımızda image nesnesi resmin boyutuna göre değişecektir.

9. Image nesnesi ile yapılacak işlemler bitti ise Tasarım Modu’nu kapatın. Çükü tasarım modu açık iken yazılan kodları çalıştıramazsınız.

10. "Veri Doğrulama" işlemini gerçekleştirmek için “B1” hücresini seçin ve Veri menüsünden veri doğrulama komutunu çalıştırın.

11. Ayarlar sayfa sekmesinden LİSTE seçeneğini seçin ve Kaynak kutusuna da =$D$2:$D$11 formülü girin yada fare ile bu hücreleri seçin.

12. Tamam düğmesine tıklayın.

13. Şimdi sizden isteyeceğimiz konuya azami özen gösteriniz. Yapacağımız şey şu, F sütununa yazdığımız isimler ile ilgili olarak resimler ayarlayın. Bu resimlerin isimleri, ilgili sütun ile aynı ve uzantısı “.gif” olmalı. Bu resimleri C:\Belgelerim klasöründe oluşturacağınız “KursResim” klasörü içerisine yerleştirmelisiniz. Kesinlikle F hücresindeki isimler ile Resimlere ait uzantısız ön isimler aynı olmalıdır.

Neredeyse ön hazırlıklar tamam.

14. VeriDogrulama Sayfasının adı üzerine gelin ve sağ fare tuşuna tıklayın.

15. Açılan menüden “Kod Görüntüle” komutuna tıklayın.

16. Aşağıdaki kodları bu sayfaya harfiyen yazın.

Kodları yazma işlemini bitirdiyseniz, B1 hücresine gelin ve Oluşturduğunuz "Veri Doğrulama" listesinden bir isim seçiniz. Göreceksiniz ki bu isimlere ait bilgiler ve resim diğer hücrelerde ve image nesnesinde belirecektir.

Image nesnesi üzerine tıkladığınızda hem hücrelerdeki bilgiler kaybolacak hem de image nesnesi görüntüden kaybolacaktır. B1 hücresindeki listeden yeni bir isim seçtiyseniz yine aynı işlemler tekrarlanacaktır.

Şimdi işin can alıcı noktasına gelelim. Soru şöyle olsun. “Pekala kaynak listemize yeni isim ve bilgiler eklediğimizde ne olacak?”

Normalde "Veri Doğrulama" da bu sıkıntı yaşanırdı ancak biz olaya kodlamayı da dahil ettiğimiz için bu konuyu aştık. Siz yeni bir isim eklediğinizde yani D12 hücresine yeni bir isim yazdığınızda, kod satırlarında ki, ELSEIF il başlayan kod kısmı çalışacak ve B1’deki listenize bu isim eklenecektir. Eğer bu isme uygun bir resmi 13. maddede anlattığımız gibi aynı isimdeki bir resim ile desteklemiş iseniz kodlamanız sorunsuz olarak çalışacaktır.

Not:
Eğer yukarıda anlattıklarımızı yapamıyorsanız, buraya tıklayarak örnek dosyayı indiriniz. KursResim.zip adında bir dosya olacak. Bu dosyayı C:\Belgelerim dizinine açın. Yani yol şöyle olacak.

C:\Belgelerim\KursResim\

Private Sub Image1_Click()
  Image1.Picture = LoadPicture("")
  Image1.Visible = False
  Range("B1:B3").ClearContents
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim ara As Range
  Dim say As Integer
  If Target.Address = "$B$1" Then
    say = WorksheetFunction.CountA(Range("D1:D100"))
    For Each ara In Range("D2:D" & say)
      If ara.Value = Range("B1").Value Then
        Range("B2").Value = ara.Offset(0, 1).Value
        Range("B3").Value = ara.Offset(0, 2).Value
        Image1.Visible = True
        Image1.Picture = LoadPicture("C:\Belgelerim\KursResim\" _
              & ara.Offset(0, 2).Value & ".gif")
        Exit Sub
      End If
    Next ara
  ElseIf Target.Address = "$D$" & ActiveCell.Row Then
    say = WorksheetFunction.CountA(Range("D1:D100"))
    With Range("B1").Validation
      .Delete
      .Add Type:=xlValidateList, _
        AlertStyle:=xlValidAlertStop, _
        Formula1:="=$D$2:$D$" & say
      .IgnoreBlank = True
      .InCellDropdown = True
    End With
  End If
End Sub

VERİ DOĞRULAMA İLE İLGİLİ BİR SORU VE CEVAP
Soru: Ben “EĞER işlevini kullanarak bir hücreye önceden tanımlamış olduğum farklı listeleri yerleştirebilir miyim?” Bunu öğrenmek istiyorum. Mesela bir çalışma sayfasında tanımladığım “OKUL” ve “EV” isimli iki liste olsun. Ben dosya içinde aynı ya da farklı bir sayfada “Eğer A5 hücresi “x” değerine eşitse B7 hücresine “OKUL”, eğer A5 hücresi “y” değerine eşitse de yine B7 hücresine “EV” tanımlı grubun liste olarak gelmesini sağlayabilir miyim? İki gündür bir çok şey denedim. Eğer yapmaya çalıştığım şey imkansız bir şeyse zamanımı daha fazla harcamak istemiyorum.

Bu konuda öneriniz olursa çok teşekkür ederim. Ayrıca aktardığınız bilgiler için teşekkür ederim. İyi çalışmalar.

Not: Bilgisayarımda Wnndows XP Home Edition ve OffıceXP Standart kullanmaktayım. (Bülent Gündüz- İZMİR)

Cevap:
Sayın Bülent Gündüz’ün göndermiş olduğu soru gerçekten bir çok okuyucumuzun işine yarayacaktır. Soru ilginç ve güzel. Ne yalan söyleyeyim benim de aklıma bu soruyu okuyana kadar böyle bir işlem yapmak gelmemişti. Öncelikle yapılacak işlemi tasarlayalım.



Şart 1: A5 hücresine “x” değeri girildiğinde, B7 hücresine D sütunundaki veriler liste oluşturacak.

Şart 2: A5 hücresine “y” değeri girildiğinde, B7 hücresine E sütunundaki veriler liste oluşturacak.

1. B7 hücresini seçin. 2. “Veri” menüsünden “Doğrulama” komutunu tıklayın. 3. Açılan “Veri Doğrulama” penceresinden “Ayarlar” sayfa sekmesinde bulunan “İzin verilen” kutusundan “LİSTE” seçeneğini seçin. 4. Kaynak kutusuna aşağıdaki formülü yazın. (Şekil-23)

=EĞER(A5="x";$D$1:$D$10;EĞER(A5="y";$E$1:$E$10;$F$1))



Kaynak kutusundaki yazılan formülü dilediğiniz gibi kullanabilirsiniz. Aşağıdaki şekilde ise A5 hücresine “x” yazarsanız D sütununu alacak yazmazsanız E sütununu alacaktır.

=EĞER(A5="x";$D$1:$D$10; $E$1:$E$10)



<< Veri Doğrulama Makale 4/4

Destek
M.ÖZTÜRK - Y.KARAMAN
Bu siteyi, "Hayatını çocuklarının Ahlâklı ve Dürüst yetişmesi için harcamış olan Cefakar ve Fedakar, Canım ANNEM'e adadım."
Copyright © 1998-2011 M. Temel Korkmaz - Tüm hakları saklıdır.