E

Çözüldü Makro ile Veri Doğrulama Yapma

  • Konuyu başlatan Konuyu başlatan ErolU
  • Başlangıç tarihi Başlangıç tarihi
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

ErolU

Normal Üye
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Arkadaşlar,
Ekli belgede ayrıntılı açıklama yaptığım isteğim şöyle:
Belli bir alanda birden fazla şarta göre makro ile veri doğrulama yapılması.
Yardımlarınızı rica ediyorum.
 

Ekli dosyalar

Çözüm
5'inci satırda boş olan hücrenin sütununa veri giriş kontrolü tamam.

Kanaatimce; üst taraftaki soru not değerlerinin girişinin tamamlandığı ve 100 kontrolü için eklediğim belgedeki gibi bir uygulama uygun olur. Böyle bir yöntem olmazsa, sarı alana her not yazıldığında uyarıyla karşılaşmak can sıkıcı olabilir.

C5 hücresinde HAYIR yazılıysa alt tarafa veri girişi (soru not değeriyle karşılaştırma işemi tabii ki devam) serbest.
C5'deki HAYIR elle seçilir veya alta veri girişi yapılırken üst tarafın toplamı 100 değilse 1 kez uyarı alınır,
bu uyarıya verien cevaba göre, C5 değeri ya aynı kalır (uyarıya devam) veya C5 kod tarafından değiştirilir (uyarı durur).

Yaparak bir bakın, deneyin isterseniz.

.
Sayın @Erol U.

Dosyada açıklama yazmışsınız ancak; ben yine de sözel olarak sormak istedim.
Özetle isteğiniz; VERİ DOĞRULAMA >> LİSTE özelliği değil, elle veri girilirken koşullara bağlı üst sınıra göre veri girilebilmesi.

İsteğiniz (öncelik sırasına göre gidersek);
-- NO ve ADI SOYADI yazılmayan satırda veri yazılamaması,
-- 5'inci satırda hedef hücrenin sütunundaki hücre boşsa veri girilememesi,
-- hücreye en fazla, ilgili sütun 5'inci satırdaki değerin yazılabilmesi
doğru mudur?

Her adım için neden UYARI ekranı istediğinizi anlamadım doğrusu.

.
 
Sayın @Erol U. .
Önce bundan önceki cevabıma bakınız.

Bir şeyi eklemeyi/sormayı unutmuşum.
Anladığım kadarıyla soldan sağa doğru boşluk bırakmadan, sırayla veri girişi öngörüyorsunuz.
Yani örneğin E7'ye değer yazılmadan F7'ye yazılamasın gibi bir koşul daha var doğru mudur?

.
 

Sayın Ömer BARAN,​

Önce son iletinize cevap yazayım:
"soldan sağa doğru boşluk bırakmadan, sırayla veri girişi" yapmayla ilgili bir koşul yok. Bu, benim öngördüğüm bir durum değil.

İlk iletinizle ilgili açıklamalarım:
Özetle isteğiniz; VERİ DOĞRULAMA >> LİSTE özelliği değil, elle veri girilirken koşullara bağlı üst sınıra göre veri girilebilmesi.
Amacım Veri Doğrulamayı kullanmadan bu işi makro ile yapmak.


İsteğiniz (öncelik sırasına göre gidersek);
-- NO ve ADI SOYADI yazılmayan satırda veri yazılamaması,
-- 5'inci satırda hedef hücrenin sütunundaki hücre boşsa veri girilememesi,
-- hücreye en fazla, ilgili sütun 5'inci satırdaki değerin yazılabilmesi
doğru mudur?
Yazılacak makro toplam 9 koşula (Koşulların sırası önemlidir.) göre çalışmalı:
1.
$E$5:$AM$5 bu aralığın toplamı 100 olmadan E7:AM66 alanına bir şey yazılamasın.
2. Ad Soyad ve no yoksa o satıra veri girilemesin.
3. No yoksa o satıra veri girilemesin.
4. Ad Soyad yoksa o satıra veri girilemesin.
5. Veri girilen hücrenin 5. satırdaki karşılığı boşsa o hücreye veri girilemesin.
RASTGELE ÖRNEK: E7'ye veri girebilmek için E5'in dolu olması gerekir. R66'ya veri girebilmek için R5'in dolu olması gerekir gibi.
6. E7:AM66 sütunlarında veri yazarken ilgili sütunun 5. satırındaki değerden fazla puana izin verilmemesi.
RASTGELE ÖRNEK: E7'ye girilen değerE5'ten büyük olmalı. T66'ya girilen değer T5'ten büyük olmalı gibi.
7. E7:AM66 aralığına sıfırdan küçük değer girilemesin.
8. E7:AM66 aralığına sadece sayısal değer girilsin.
9. Hangi satıra veri giriliyorsa o satırın AT:AX arası boş olmalı.

Her adım için neden UYARI ekranı istediğinizi anlamadım doğrusu.
Makro yukarıdaki koşullara uymayan ilk durumda MsgBox uyarısı ile sonlanmalı. Örneğin yukarıdaki 3 koşula uymayan bir giriş yapılıyorsa makro uymayan ilk durumu MsgBox uyarısı ile göstermeli, diğer hataları söz konusu etmeden sonlanmalı.
Bundan dolayı her adımda uyarı ihtiyacı var.

Dosya içerisinde daha anlaşılır olabilir diye formülle göstermiştim. Sözel olarak daha iyi açıklandı gibi.
 
Elbette işlem VERİ DOĞRULAMA değil.
Gerçi standart bir uyarı metniyle, formülle yapılmış bir veri doğrulama işlemi de düşünülebilirdi.
Bu yönüyle bakmadım tabi. Tercih sizin.

Soldan üstten sağ alta doğru bir veri girişi öngördüm.
sayı yazılıp ENTER tuşuna basınca satırda bir sonraki hücreye
(son not yazılacak sütundayken bir alt satır ilk hücreye) giçilir.
Bence önce 5'inci satırda 100 kontrolü olmalı.

Deneyin bakalım.
 

Ekli dosyalar

Dosya için teşekkür ederim.

Gerçi standart bir uyarı metniyle, formülle yapılmış bir veri doğrulama işlemi de düşünülebilirdi.
Böyle bir formülüm var, hatasız çalışıyor ama sorun Veri Doğrulama>Hata Uyarısının karakter sınırı olmasında. Hata için yeterli açıklama yapılamıyor. Ondan dolayı makro düşündüm.
Formül şöyle: =YADA(E7="";VE(BAĞ_DEĞ_SAY(E$5)=1;BOŞLUKSAY($C7:$D7)=0;E7<=E$5;BOŞLUKSAY($AT7:$BA7)=8;TOPLA($E$5:$AM$5)=100;ESAYIYSA(E7);E7>=0))

Dosyadaki eksikler:
1.
E5:AM5 aralığının toplamı 100 olmadan veri girişi yapmaya izin vermemesi lazım.
2. Çıkan MsgBox'lara TAMAM deyince hatalı giriş yapılan hücre değil bir sağındaki hücre seçiliyor. MsgBox'tan sonra hatalı işlem yapılan hücreye geçse iyi olur.
3. E7:AM66 aralığına sıfırdan küçük değer girilememesi lazım.
4. E7:AM66 aralığına sadece sayısal değer girilsin. Metinsel değer girilemesin. Mevcut hâlinde metinsel değer yazınca "Sorunun puan değerinden fazla puan yazdınız." uyarısı çıkıyor.
5. AT7:AX66 aralığı yasaklı bölge olmuş. Yasaklı olmaması gerekiyor. E7:AM66 aralığının veri girilen satırındaki AT:AX hücreleri tamamen boş olmalı. En az biri dolu ise "Sağda puan var." gibi bir uyarı lazım.
 
@Ömer BARAN bey konuyla ilintili olduğu için merak ettiğim bir durumu sormak istiyorum.
php de bir formdan gelen verileri kontrol ederken genelde şöyle bir metot izleniyor.

"form1" isminde gizli bir form elemanı oluyor bu <form name='form1> şeklinde ya da <input name="form1"> oluyor.
Kişi formu gönder ya da kaydet dediğinde aşağıdaki gibi bir kod ile formun submit edililmediği/gönderilip gönderilmediği kontrol edilerek form kontrollerine başlanıyor...
Excel makrolarla userform aracılığıyla formdan bilgi alırken bu kontröle benzer bir yapı var mı illaki vardır ama bu kontrol nasıl yapılıyor...
kontrol sebebi şunun için... Adını yazmadın mail adresini mail formatında yaz vb. için

if(isset($_POST['form1'])) {
'işlemler burada icra ediliyor...
}
 
Moderatörün son düzenlenenleri:
KAYDET işlemlerinde; girilen verilerin eksiksiz/koşullara uygun olduğuna dair elbette kontrol aşaması oluyor.
Verileri giren, kaydet prosedürünü tetikleyen, kaydetme onayını veren aynı taraf.
Dolayısıyla amaç, koşullara uymayan veriyi reddetmek değil,
mümkün olduğunca veri girişinin her aşamasında kontrol mekanızması koyup doğru veri girişini sağlamak.

Tabi bu konu sayfasındaki belge ve istenien işlemle bu yazdıklarım arasında pek bağlantı yok.
Konu sahibi arkadaşımız, belli bir sırayla kontrol ve uyarı mesajları istiyor idi.

.
 
Ömer BARAN Bey,
7. iletinizdeki dosyada birkaç durum dışında istenilen yapılabiliyor.
Tekrar yardımlarınızı rica ederim.


1. Koddaki aşağıdaki bölüm çalışmıyor. 5. satır toplamı 100'ü geçince uyarı çıkmıyor.
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(2 satır)

2. Koddaki bu satır ElseIf Not IsNumeric(XD) Or XD < 0 Or XD > Cells(5, XDsu) Then anladığım kadarı ile metinsel ifadeyi engellemeye yönelik. Metinsel ifade girince bu satır çalışmıyor. Bu satırın hatası geliyor: ElseIf XD > Cells(5, XDsu) Then

3. Kodda birkaç yerde AO sütunu söz konusu edilmiş. AO sütunu satırları dolu olursa sıkıntı olur mu? Örnek belgede burası boştu.

4. Belgenizde
Sub Normal diye ayrıca bir makro var. Bu Worksheet_Change makrosu ile bağlantılı bir makro mu?
 
Bilgisayarda olmadığım için şimdi kontrol/düzeltme şansım yok.
Beklenen mesaj yerine, başka bir mesaj alıyorsanız; kodda daha üstteki bir koşul vardır, onu geçemiyordur. Siz de böyle istiyordunuz gibi hatırlıyorum.

Sıralamayı değiştirmek için ilgili Elseif.... satırının başından bir sonraki Elseif satırına kadarki kısmı KESip istediğiniz şekilde yerlerini değiştirebilirsiniz.

Yine de, uygun olduğumda bakarım.

.
 
Öncelik konusunda hata var mı emin değilim açıkçası,
Birkaç ilave ve yeni bir sıralama yaptım. Heryerde MsgBox,vbCriticam,"UYARI" yazmak yerine
mesaj metinlerini msj isimli değişkine aldım ve böylece MsgBox satırını en sonda 1 kez kullandım.

Üst kısımda 100 kontrolü tamamlandıktan sonra, her soru için de soru puanına göre kontrol varken cevap alanında 100 kontrolü anlamlı gelmediği için böyle bir kontrol yok.

Yapacağınız yer değişikliği iki Elseif bloklarının yerlerinin değiştirilmesiyse mesele yok.

AO sütun adı işleyişe mani değil. Satırda AO hücresi seçiliyken CTRL+SOL OK basıldığında gelinen hücrenin
son veri sütunu (son soru) olduğunu tespit etmek için kullanılıyor. Sadece AO5 hücresinin boş olması gerekiyor.
AO5'in boş olması hali sadece soru sayısı 35 olursa (yani tüm soru sütunları dolu) sorun olur.
Tedbiren soru alanının sağında 1 hücre boş olsun.

Eklediğim belgedeki NORMAL adını verdiğim tek satırlık kod, denemeler yaparken gerekliydi.
Kod çalışmaya başladıktan sonra zaman zaman kodu kendim durduruyordum.
Bu durumda da Application.Enable = False olarak kalmış oluyor.
Böyle olunca da bir sonraki veri girişi için kod tetiklenmez. Herşey tamam olduğunda NORMAL kod bloku silinebilir.
Siz de denemeler yaparken kodu monlandırırsanız, NORMAL kodunu çaıştırdıktan sonra denemeye devam edin.

CPP:
Görüntülemek için giriş yapmanız gerekmektedir.
(51 satır)
 
Sayın BARAN,
Zaman bulamadığımdan ve dosya üzerinde düşündüğümden dönütü geç yapmak zorunda kaldım.

1. Son kodda aynı durumu sorgulayan kod satırları vardı onları düzenledim.
2. Bazı kodları silme durumu ortaya çıktı. Örneğin sıra ile veri girme kodu. Bu sorun yaratacaktı. Zira hatalı hazırlanmış bir soru olursa onu boş bırakamayacaktık.

Düzenlemem sonrası eksik iki konu kaldı. Bunları ekli belgede şekil ile anlatmak daha açıklayıcı olur diye belgede ifade ettim.
 

Ekli dosyalar

5'inci satırda boş olan hücrenin sütununa veri giriş kontrolü tamam.

Kanaatimce; üst taraftaki soru not değerlerinin girişinin tamamlandığı ve 100 kontrolü için eklediğim belgedeki gibi bir uygulama uygun olur. Böyle bir yöntem olmazsa, sarı alana her not yazıldığında uyarıyla karşılaşmak can sıkıcı olabilir.

C5 hücresinde HAYIR yazılıysa alt tarafa veri girişi (soru not değeriyle karşılaştırma işemi tabii ki devam) serbest.
C5'deki HAYIR elle seçilir veya alta veri girişi yapılırken üst tarafın toplamı 100 değilse 1 kez uyarı alınır,
bu uyarıya verien cevaba göre, C5 değeri ya aynı kalır (uyarıya devam) veya C5 kod tarafından değiştirilir (uyarı durur).

Yaparak bir bakın, deneyin isterseniz.

.
 

Ekli dosyalar

Çözüm
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst