• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

veri girişinde hatayı engelleme

Katılım
10 Mayıs 2009
Mesajlar
1,080
Excel Vers. ve Dili
2003 türkçe
Merhabalar;

Belirli bir alana girilecek olan verilerin her bir hücreye veri girilişinde DATA sayfasındaki veri seti ile karşılaştırılması ve bu veri setinde girdiğim değer yoksa "Hatalı Giriş Yaptınız..!" uyarısı verilmesi ile ilgili bir sorum var.

Diyelim hücreye AHMET CN ismini girmiş olayım.DATA sayfasındaki sette bu veri aranacak eğer varsa hiçbir işlem yapılmayacak..Eğer yoksa;"Hatalı Giriş Yaptınız..!" uyarısı verecek.Dahası eğer mümkünse bu uyarıyı şu şekilde verirse harika olacak:

Eğer yoksa : girilmiş olan veriye DATA setinde en benzeyen veriyi bir öneri olarak sunacak "Girmek istediğiniz veri ........... mıdır?" diye soracak evet dersem önerdiği veriyi girmiş olduğum yanlış verinin yerine yazacak hayır dersem sadece yanlış veri girmiş olduğum hücreyi seçecek..

Bu soruyu aslında bir kapalı dosya sorusu şeklinde sordum ancak kapalı dosya sorusuna yanıt verebilecek kişi sayısı çok fazla değil bir de bunun üzerine forum kurallarına uymayan bir başlık açmış olmam (ki gerçekten sürekli özen göstermeme rağmen istemeden) eklenince soruma yanıt bulamadım.

Bu haliyle sorumla ilgilenecek olan herkese şimdiden teşekkür ederim.
 

Ekli dosyalar

veri doğrulamadan isimleri liste olarak ekleyip hiç hatalı giriş yaptırmasanız.
 
sorunuzun ikinci kısmı veri işleme, kara liste vb uygulamalarında "fuzzy matching" olarak geçer.

google'da "fuzzy vlookup" diye aratırsanız şahane bir UDF bulacaksınız.
 
veri doğrulamadan isimleri liste olarak ekleyip hiç hatalı giriş yaptırmasanız.

doğrulama ile liste kullanma konusunda haklısınız.Akla hemen o geliyor.Ancak ana dosyamdaki alan çok daha geniş bir alan daha önce liste kullanmayı denedim ancak çalışma hızını düşürdüğünü farkettim ayrıca çok sayıda hücrede çalışınca klavye kullanımının mouse kullanımına göre daha pratik olduğunu düşünüyorum.Bu sebeplerden doğrulama listesi kullanmak istemedim.İlginiz için teşekkür ederim.
 
sorunuzun ikinci kısmı veri işleme, kara liste vb uygulamalarında "fuzzy matching" olarak geçer.

google'da "fuzzy vlookup" diye aratırsanız şahane bir UDF bulacaksınız.

Sn mancubus google'da aramayı yaptım ancak ingilizcem çok yeterli olmadığı için sanırım sizin gibi nokta atışı yapıp bahsettiğiniz ktf yi bulamayacağım:(
 
Hatalı girişi tespit etme işini hallettim.İsim önerme işi içinse girilen verinin soldan ilk üç harfini DATA sayfasındaKİ veri setinde arayarak yapmaya çalıştım.Çok sağlıklı değil biliyorum ama şimdil,ik hiç yoktan iyi.Belki bir geliştiren olur dosyayı ekte veriyorum.

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B2:H14")) Is Nothing Then Exit Sub
Set s1 = Sheets("DATA").Range("a:a")
If Not IsEmpty(Target) Then
Set ara = s1.Cells.Find(Target, lookat:=xlWhole)
If Not ara Is Nothing Then
Exit Sub
Else
Sorgu = MsgBox("Hatalı giriş yaptınız.." & Chr(10) & "Yazmak istediğiniz isim:" & _
s1.Find(Left(Target, 3), lookat:=xlPart) & " olarak değiştirilsin mi?", vbYesNo, "SORGU EKRANI")
If Sorgu = vbYes Then
Target.Value = s1.Cells.Find(Left(Target, 3), lookat:=xlPart).Value
ElseIf Sorgu = vbNo Then
Target.Select
End If
End If
End If
End Sub
 

Ekli dosyalar

sn mancubus

linke baktım.ama sadece baktım ve kaldım:)siz o kodların tam olarak istediğim işi yaptığına eminseniz fırsatınız olduğunda bir dosyaya uygulayabilir misiniz?Sanırım ben o işi pek kıvıramayacağım..

geçmişte bir kaç iş için kullanmıştım ve işimi görmüştü.
kendi dosyamı bulamadım. konuya yetecek miktarda boş vakit yaratabilirsem üzerinde çalışırım.
belki bu arada bilen bir arkadaşımız katkı verebilir.

koda gelince...
işinizi görüyorsa tamamdır.

yalnız soldan 3 karakter az. zannediyorum Türkçe'mizde en kısa ismin 3 harf olduğunu düşünerek (gerçi Su az kullanılsa da 2 harfli bir bayan ismi) bunu belirlediniz. liste büyürse bu sıkıntı yaratabilir.
yine birden çok eşleşme için kod geliştirilirse iyi olur. bunu da arada bir öneri gelmez ise ileride ben yapmaya çalışabilirim. aslında siz de yapabilirsiniz. forumda find (bul) uygulamalarını aratırsanız findnext üzerinde çalışın. Set ara = FindNext(ara) gibi.
 
sn mancubus sanıyorum şu findnext olayı daha geliştirmeme yardımcı olacak.Çünkü bir öneri mesajı geldiğinde hayır dediysem sıradaki şartlara uyan bir başka ismi önermesi iyi olabilir diye düşünmüştüm.Bu şekilde ardarda 3 mesaj alabilirim diye düşünüyorum.soldan 3 ü taratıyorum ancak xlpart olarak aradığı için ismin değil isim ve soyadların tamamının içinde arıyor bu yüzden en kısa ismin 3 harfli olup olmaması ile ilgili değil zannımca en az 3 harf ile anlamlı bir şekilde isimlerin birbirinden farklılaşabileceği ile ilgiliydi soldan 3 seçmem..
 
aşağıdaki gibi bir örnek işinizi görür zannediyorum.

Kod:
Find(Left(Target, [B][COLOR="Red"]5[/COLOR][/B]), lookat:=xlPart)
soldan 5 aldım, siz kendinize göre düzeltin.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim isimler As Range, ara As Range
Dim ilkadres As String

If Intersect(Target, Range("B2:H14")) Is Nothing Then Exit Sub

Set isimler = Sheets("DATA").Range("A:A")

If Not IsEmpty(Target) Then
    Set ara = isimler.Find(Target, lookat:=xlWhole)
    If Not ara Is Nothing Then
        Exit Sub
    Else
        Set ara = isimler.Find(Left(Target, 5), lookat:=xlPart)
        If Not ara Is Nothing Then
            ilkadres = ara.Address
karar:
            Select Case MsgBox("Hatalı giriş yaptınız." & Chr(10) & "Yazmak istediğiniz isim:" & _
            ara & " olarak değiştirilsin mi?", vbYesNoCancel, "SORGU EKRANI")
                Case vbYes
                    Target.Value = ara.Value
                Case vbNo
                    Do
                        Set ara = isimler.FindNext(ara)
                        If ara.Address = ilkadres Then Exit Do
                        GoTo karar:
                    Loop Until ara Is Nothing
                Case vbCancel
                    Target.Select
            End Select
        End If
    End If
End If

End Sub
 
Sn.mancubus böyle çok daha iyi oldu ellerinize sağlık.Denemelerimden kodun eski haliyle de bu haliyle de soldan kaç tane aldığımızın pek bir şey değiştirmediği izlenimine kapıldım.Bu yüzden değeri yazdığınız gibi bırakıyorum.Vaktinizi ayırdığınız ve emeğiniz için teşekkür ederim.
 
rica ederim.

tabii isim listesi büyürse farketmeye başlayabilir. ama küçük listede seçenek fazla olmayacağı için dediğiniz gibi olacaktır.
 
Geri
Üst