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