Tekrar Eden Kayıtlardan En Doğrusuna Ulaşmak

Çözüldü Tekrar Eden Kayıtlardan En Doğrusuna Ulaşmak

  • Konuyu başlatan Konuyu başlatan merakli
  • Başlangıç tarihi Başlangıç tarihi

merakli

Site Üyesi
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhaba,

Sayfalar Arası Verileri Karşılaştırıp Yanlışları Düzenleme başlıklı konumuzda iki problemin olduğuna dair bir konu açmıştık ve @Ömer BARAN her zamanki gibi destekleriyle ilk problemi çözmüştük.
İnşallah son problemimizde hallolur ve de başka hesapta olmayan problemler çıkmaz.

Kısaca açıklamaya çalışırsam

Önceki Örneğe DATA_NUMARA_DEGISTIR() sub'ını ekleyerek ikinci aşılması gereken konuya geçiyorum.
Senaryo şu şekildeydi.
Şuanki Data sayfasındaki 103. satırdaki öğrenci Yılmaz ONUK ilk kayıtta numarasını doğru yazmıştı yani 21173
Ancak Data sayfasındaki 106. satırdaki yine aynı öğrenci Yılmaz ONUK bu defa ikinci bir kayıt girdi ve numarasını yanlış yazmıştı.
Bizde DATA_NUMARA_DEGISTIR() ile bunu tespit edip yanlış olan numarayı Liste sayfasından kontrol ederek doğrusunu yazdırmış ve kırmızı renkle belirtmiştik.
Yani artık 106. satırda 21173 numarası var. Ama bu durumda 2 tane farklı kayıt ortaya çıktı. (bu kayıtlar bazen iki değil üç, dört hatta beş defa tekrar edebiliyor)
Bundan sonra ikinci senaryo geliyor.
Bu aynı numaraya ait iki farklı cevap var
Bu cevaplar birebir aynıda olabilir ozaman direk bir tanesini silebiliriz.
Ancak birebir aynı değil burada
103. satırdaki cevaplarda 6 doğru 4 yanlış var (Doğru cevaplar Veri!B7:B16 satırlarındadır...)
106. satırdaki cevaplarda 8 doğru 2 yanlış var...
Belki bu öğrenciye ait bir kaç satır daha olabilirdi yani tekrar eden kayıt sayısı iki ile sınırlı değil.
Burada yapılacak tek şey kalıyor
Bu öğrenciye/numaraya ait girilen tüm kayıtlar Veri!B7:B16 satırlarındaki doğru şıklarla karşılaştırılıp en çok doğru sayısı olan kaydın verilerinin Liste sayfasına aktarılmasıdır. Şuan bizim mevcut kodumuz kaç kayıt olduğuna bakmaksızın ilk girilen kaydın verilerini Liste sayfasına aktarıyor.
Silinmese de olur bu kayıtlar.

sorum.webp
 

Ekli dosyalar

Moderatörün son düzenlenenleri:
VeriCek makrosunda End sub satırının hemen üstüne ekleyin.
Baş harflerin büyük olmasını sağlanır başta/sondaki BOŞLUK karakterlerini silinir, CEVAP sütunlarındaki BOŞ lar silinir.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(9 satır)

Ömer bey Türkçe karakter işini askıya alarak şu şekle getirip ekledim


VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(9 satır)
 
Yanılıyor olabilirim, kafam biraz dolu.

-- ...... GECERLI_OLANI_BUL_AKTAR kodunda
mukerrer = ..... ile altındaki For ds = 1 To .... satırının arasına, bak = 0 diye bir satır ekleyerek tekrar kontrol yaparsınız.
-- Soyadı'nın BOŞ olma ihtimali dolayısıyla ilgili satırı da şöyle değiştirirsiniz.
mySh.Range(mySh.Cells(1, 6), mySh.Cells(Rows.Count, Columns.Count)).Replace "Boş", ""

.
 
Yanılıyor olabilirim, kafam biraz dolu.

-- ...... GECERLI_OLANI_BUL_AKTAR kodunda
mukerrer = ..... ile altındaki For ds = 1 To .... satırının arasına, bak = 0 diye bir satır ekleyerek tekrar kontrol yaparsınız.
-- Soyadı'nın BOŞ olma ihtimali dolayısıyla ilgili satırı da şöyle değiştirirsiniz.
mySh.Range(mySh.Cells(1, 6), mySh.Cells(Rows.Count, Columns.Count)).Replace "Boş", ""

.
Teşekkür ederim @Ömer BARAN bak = 0 elkleyince okunmayan kayıtlarda da işlem yapıldı.

Şöyle bir açığımızda kaldı gibi geliyor bana

DATA_NUMARA_DEGISTIR

Data sayfasındaki numaraları Liste sayfasındaki numaralarla karşılaştırdık. Eğer data sayfasındaki numara Liste sayfasında yoksa Ad ve Soyada göre karşılaştırıp eşit olanın numarasını liste sayfasından alıp data sayfasına kaydettik ve kırmızı renkle renklendirdik.

Burada şu ihtimali atladık gibi

ad soyadlar uyuşan satırlarda işlem yaptık ama ad soyad karşılaştırmasında uyuşmayanlar için herhangi bir işlem yapmadık.

yani liste sayfasında olmayan data sayfasında olan numaraların bulunduğu hücrelerin arka planını kırmızı olarak renklendirebilir miyiz

tabiki üstte söylediğim iki farklı durum mudur tek bir durumumu ifade ediyor karar veremedim

1. durum =>> Data sayfasındaki bir numaranın liste sayfasında olmayıp isim soy isim karşılaştırmasında da uyuşmayan kayıtlar
2. durum =>> Liste sayfasında olmayan Data sayfasında olan numaralar

Data sayfasında hücre değerleri bu iki durumda olanların arka plan rengi..
 
Bir süre bilgisayarda olmayacağım.

Belki de; başlangıçta Data safası A-D sütunları kırmızı boyanıp,
-- birebir eşleşenler için
-- font rengi değiştirilenler (kırmızı veya yeşil) için
arka plan rengi kaldırılırsa, işleme sokulmuş satırlar renksiz kalmış olur.
Böylece kırmızı renkli olarak sadece Liste sayfasında hiç işlem görmemiş olanlar kalır gibi geliyor bana.

.
 
Bir süre bilgisayarda olmayacağım.

Belki de; başlangıçta Data safası A-D sütunları kırmızı boyanıp,
-- birebir eşleşenler için
-- font rengi değiştirilenler (kırmızı veya yeşil) için
arka plan rengi kaldırılırsa, işleme sokulmuş satırlar renksiz kalmış olur.
Böylece kırmızı renkli olarak sadece Liste sayfasında hiç işlem görmemiş olanlar kalır gibi geliyor bana.

.
Evet mantıklı gibi :) böyle tersten düşünmemiştim
 
@merakli
Şöyle tamam olması lazım, deneyip sonucu iletirsiniz.
TEK_ISE_DOGRUDAN_DEGILSE_GECERLI_OLANI_BUL_AKTAR isimli makro kodunda,
siyah satırların altına yeşil olanları ekleyin.
Data sayfasında başlık satırı olacaksa, ilk yeşil satırdaki A1:E kısmını A2:E olarak değiştirirsiniz.
Ya da hep A1:E olarak kalır ve başlık olduğunda o satır hep zaman kırmızı kalmış olur.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(10 satır)
 
@merakli
Şöyle tamam olması lazım, deneyip sonucu iletirsiniz.
TEK_ISE_DOGRUDAN_DEGILSE_GECERLI_OLANI_BUL_AKTAR isimli makro kodunda,
siyah satırların altına yeşil olanları ekleyin.
Data sayfasında başlık satırı olacaksa, ilk yeşil satırdaki A1:E kısmını A2:E olarak değiştirirsiniz.
Ya da hep A1:E olarak kalır ve başlık olduğunda o satır hep zaman kırmızı kalmış olur.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(10 satır)
Çok teşekkür ederim çalıştı.
 
@Ömer BARAN bey.
Tekrar teşekkür ediyorum ki artık bir sorun kalmadı gibi.
Bu örneği 10 soruluk liste ve data sayfası için yapmıştık.
bu şekilde iki tane excel dosyam var.
Bir tanesi 10 soruluk olan diğeri 20 soruluk olan.
Bu örneğe bakarak 20 soruluk dosyaya uyarladım gibi
Ancak DATA_NUMARA_DEGISTIR() ve TEK_ISE_DOGRUDAN_DEGILSE_GECERLI_OLANI_BUL_AKTAR() Sub'larında 10 sütunluk haliyle işlem yapan kısımları 20 sütunlukla işlem yapacak şekle getirdiğimde sonuçlanmış olacak.
Fakat bu Sub işlemlerine tam hakim olmadığım için döngüleri 20 sütuna çevirmede tedirginlik yaşıyorum.
Bu konuda yani hangi satırlardaki 10 rakamlarını değiştirmem gerektiği konusunda bilgi verebilir misiniz
örneğin şurada olayı tam anlamadım
ReDim snc(1 To 10, 1 To 1)

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(25 satır)

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(45 satır)


soru 01.webp
soru 02.webp
 
Moderatörün son düzenlenenleri:
@Ömer BARAN Bey Merhabalar
Üstteki işlemleri tamamladığımız makroda kullanım aşamasında şöyle bir açık farkettim.
excel dosyada örnek açıklama sayfasından ve görsel ile bu durumu açıklamaya çalıştım.
Bu işlem açığını düzeltmek için makroyu nasıl güncellemeliyiz

Screenshot_1.webp


VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(25 satır)

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(45 satır)
 

Ekli dosyalar

Moderatörün son düzenlenenleri:
@Ömer BARAN Bey üstteki bahsettiğim problemi aşmak için DATA_NUMARA_DEGISTIR sub ının ilk başında data sayfası ile liste sayfasını isim soyisim birleştirilmiş halde karşılaştırıp numaraları farklı olanları liste sayfasından data sayfasına yazdırıp rengini bold kırmızı şekline getirsek bu sorun kendiliğinden ortadan kalkar gibi düşünüyorum
 
@Ömer BARAN Bey üstteki bahsettiğim problemi aşmak için DATA_NUMARA_DEGISTIR sub ının ilk başında data sayfası ile liste sayfasını isim soyisim birleştirilmiş halde karşılaştırıp numaraları farklı olanları liste sayfasından data sayfasına yazdırıp rengini bold kırmızı şekline getirsek bu sorun kendiliğinden ortadan kalkar gibi düşünüyorum

@Ömer BARAN Bey sizn kodlarınızdan yola çıkarak üstteki sorduğum işlemi yapmaya çalışıyorum.
Yani
Örnek dosyadaki
Sub Uygula()
içinde

Call DATA_NUMARA_DEGISTIR
Call DATA_NUMARA_DUZENLE
Call TEK_ISE_DOGRUDAN_DEGILSE_GECERLI_OLANI_BUL_AKTAR

şeklinde yeni bir sub ekledim amacım bir üstteki işlemi gerçekleştirmek çünkü üstte bahsettiğim işlem açığını kapatmak için aklıma başka bir çözüm yolu gelmiyor malesef.

yaptığım işlem ise DATA_NUMARA_DEGISTIR da sizin yaptığını gibi data sayfasındaki data sayfasındaki veri sayısı kadar for next döngüsü oluşturup buradaki ad soyadları birleştirip liste sayfasındakilerle karşılaştırmak sonrasında eşit olanlarda liste sayfasındaki ilgili satırdaki öğrencinin numarasını data sayfasındaki aynı isimli öğrencinin numarasıyla değiştirmek....
ancak liste sayfasındaki sim aynı sütunlardayken data sayfasında ayrı sütunlarda olduğu için bu ismi FIND ile aratamıyorum. Burada tıkandım :)
bu işlem iki üst mesajda bahsettiğim açığı gidermek için mantıklı bir işlem midir ondan da emin değilim.

VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(28 satır)
 
@Ömer BARAN Bey teşekkürler dünden beri uğraşıyordum :)
sizin kodlarda şu dikkatimi çekti
bir sayfa için ThisWorkbook.Sheets("Data") şeklinde kullanmışsınız hemen altında diğer sayfa için Sheets("Liste") şeklinde kullanmışsınız yani ThisWorkbook.Sheets("Liste") şeklinde kullanmamışsınız bunun özel bir sebebi var mıdır?
VBA:
Görüntülemek için giriş yapmanız gerekmektedir.
(6 satır)
 
Üst