İç İçe Veri Doğrulama Sorunu

Katılım
4 Mart 2012
Mesajlar
69
Excel Vers. ve Dili
2007
Altın Üyelik Bitiş Tarihi
18-10-2022
Merhabalar.

Excelde tek satır için iç içe veri doğrulama işlemini belli kodlarla yapabiliyorum. Ancak bu sefer ki sorunum biraz farklı. Ekli örnekte görüleceği üzere "KATEGORİ" ve "ÇİZELGE" olmak üzere iki çalışma sayfam var. İki sorunum var.
  • "Çizelge" sayfasında satırın ilgili kategori hücresine tıklandığında veri doğrulama ile BENZERSİZ kategori seçtirmem lazım.
  • Hemen yan hücrede yalnızca seçilen kategoriye bağlı alt kategori BENZERSİZ olarak gelmeli
Bu ikisini bir türlü yapamadım. Yardımcı olursanız sevinirim. Çalışma sayfalarına da ekledim gerekli açıklamaları.
 

Ekli dosyalar

KMLZDMR

Altın Üye
Katılım
9 Nisan 2015
Mesajlar
494
Excel Vers. ve Dili
2003 TÜRKÇE EXCEL
Altın Üyelik Bitiş Tarihi
10-04-2025
Sayın Muygun güzel bir çalışma yapmışsınız. Yararlandım.
 
Katılım
4 Mart 2012
Mesajlar
69
Excel Vers. ve Dili
2007
Altın Üyelik Bitiş Tarihi
18-10-2022
Merhaba;
Makro yada formüllü çözümleri inceleyin.
İyi çalışmalar.
Çok teşekkür ederim @muygun tam aradığım şey. Özellikle makrolu olan. Ancak merak ettiğim ve öğrenmek istediğim makrodaki kodlar. Kategorideki kodları anladım,çözümleyebildim. Ancak çizelgedeki kodları anlamadım. Onlara açıklama yazmanızı rica etsem çok mu şey istemiş olurum?
 

muygun

Özel Üye
Katılım
6 Temmuz 2004
Mesajlar
9,181
Excel Vers. ve Dili
Excel-2003 Türkçe
Merhaba;

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set s1 = ThisWorkbook.Worksheets("KATEGORİ")
Set s2 = ThisWorkbook.Worksheets("ÇİZELGE")
s1.Range("f2:f65536").ClearContents

sut = Selection.Cells.Column
sat = Selection.Cells.Row
If sut <> 4 Or sat < 4 Or s2.Cells(sat, 3) = "" Then Exit Sub

sat = Target.Row
süt = Target.Column
If s2.Cells(sat, 3) <> "" Then
satt = 2
For i = 2 To s1.Range("c65536").End(xlUp).Row
If s1.Cells(i, 3) = s2.Cells(sat, 3) Then
s1.Cells(satt, "f") = s1.Cells(i, "d")
satt = satt + 1
End If
Next i
End If
End Sub

Çizelgede sayfasında kullanılan kodlar bunlar.
Her satıra sıra no'su vererek basit şekilde kodları yorumlarsak;
1-sayfada işlem yapılırsa makro tetiklenir.
2-3 sayfalar tanımlandı
4-kategori sayfası f2:f65536 aralığı temizlendi
5- imlecin bulunduğu sütun nosu değişkene atandı
6- imlecin bulunduğu satır no'su değişkene atandı
7- eğer sütun no 4'e eşit değil , veya satır no 4 den küçük veya çizelge sayfası işlem yapılan satır,3 sütun=boş değerse makro sonlandırıldı.
8-9 satır ve sütun no'ları değişkenlere atandı
10-çizelge sayfası işlem yapılan satır,3 sütun boş değilse
11-satt değişkeni 2 olarak belirlendi
12- i döngüsü kategori sayfası c2 den başlatılarak son var olan veriye kadar döndürüldü
13- eğer kategori sayfası i satırnosu, 3sütun değeri çizelge sayfası işlem yapılan satır,3.sütun değerine eşitse;
14- kategori sayfası satt, F sütununa (yani F2 adresine yine kategori sayfası i satırnosu, D sütun değeri yazdırıldı
15- bir sonraki verinin yazılacağı satırno su için satt değişkeni 1 artırıldı
16-if değişkeni sonlandırıldı
17- i döngüsü sonlandırıldı
18-if değişkeni sonlandırıldı
19-makro sonlandırıldı.

Böylece Kategori sayfasında F sütununa Çizelge sayfasında seçim yapılan kategoriye göre alt kategoriler sıralandı.
F1 hücresinde bir formül var. Burada dolaylı kullanacağımız adres (yani açılır liste aralığı) belirlendi.
Aynı zamanda F1 hücresine altkategoriler ismi verilerek bu dosyada tüm sayfalarda kullanılabilirliği sağlandı.
çizelge sayfasında D4 : D18 aralığında herhangi bir hücrede veri>doğrulama'ya bakarsanız =DOLAYLI(altkategoriler) formülünü görürsünüz.
Kısaca yapılan işlem bu...
İyi çalışmalar.
:cool:
 
Son düzenleme:
Katılım
4 Mart 2012
Mesajlar
69
Excel Vers. ve Dili
2007
Altın Üyelik Bitiş Tarihi
18-10-2022
Merhaba;

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set s1 = ThisWorkbook.Worksheets("KATEGORİ")
Set s2 = ThisWorkbook.Worksheets("ÇİZELGE")
s1.Range("f2:f65536").ClearContents

sut = Selection.Cells.Column
sat = Selection.Cells.Row
If sut <> 4 Or sat < 4 Or s2.Cells(sat, 3) = "" Then Exit Sub

sat = Target.Row
süt = Target.Column
If s2.Cells(sat, 3) <> "" Then
satt = 2
For i = 2 To s1.Range("c65536").End(xlUp).Row
If s1.Cells(i, 3) = s2.Cells(sat, 3) Then
s1.Cells(satt, "f") = s1.Cells(i, "d")
satt = satt + 1
End If
Next i
End If
End Sub

Çizelgede sayfasında kullanılan kodlar bunlar.
Her satıra sıra no'su vererek basit şekilde kodları yorumlarsak;
1-sayfada işlem yapılırsa makro tetiklenir.
2-3 sayfalar tanımlandı
4-kategori sayfası f2:f65536 aralığı temizlendi
5- imlecin bulunduğu sütun nosu değişkene atandı
6- imlecin bulunduğu satır no'su değişkene atandı
7- eğer sütun no 4'e eşit değil , veya satır no 4 den küçük veya çizelge sayfası işlem yapılan satır,3 sütun=boş değerse makro sonlandırıldı.
8-9 satır ve sütun no'ları değişkenlere atandı
10-çizelge sayfası işlem yapılan satır,3 sütun boş değilse
11-satt değişkeni 2 olarak belirlendi
12- i döngüsü kategori sayfası c2 den başlatılarak son var olan veriye kadar döndürüldü
13- eğer kategori sayfası i satırnosu, 3sütun değeri çizelge sayfası işlem yapılan satır,3.sütun değerine eşitse;
14- kategori sayfası satt, F sütununa (yani F2 adresine yine kategori sayfası i satırnosu, D sütun değeri yazdırıldı
15- bir sonraki verinin yazılacağı satırno su için satt değişkeni 1 artırıldı
16-if değişkeni sonlandırıldı
17- i döngüsü sonlandırıldı
18-if değişkeni sonlandırıldı
19-makro sonlandırıldı.

Böylece Kategori sayfasında F sütununa Çizelge sayfasında seçim yapılan kategoriye göre alt kategoriler sıralandı.
F1 hücresinde bir formül var. Burada dolaylı kullanacağımız adres (yani açılır liste aralığı) belirlendi.
Aynı zamanda F1 hücresine altkategoriler ismi verilerek bu dosyada tüm sayfalarda kullanılabilirliği sağlandı.
çizelge sayfasında D4 : D18 aralığında herhangi bir hücrede veri>doğrulama'ya bakarsanız =DOLAYLI(altkategoriler) formülünü görürsünüz.
Kısaca yapılan işlem bu...
İyi çalışmalar.
:cool:
Gerçekten çok teşekkürler. Gerekli açıklamalardan sonra olayı kavradım ve fazlasıyla işime yaradı. Elinize emeğinize yüreğinize sağlık.
 
Üst