Kapalı Dosyadan İki sütuna göre veri alma

Katılım
24 Şubat 2009
Mesajlar
1,077
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
01-03-2023
Merhaba arkadaşlar; herkese iyi geceler; elimde iki dosya var biri açık biri kapalı, açık olan dosyamda AD VE SOYAD yazınca bu personele ait KAPALI dosyada bulunan B ve G sütunlarındaki verilerin gelmesini istiyorum, personelin ismi hatırlanıyor, ama SİCİLİ ve TC. bilmek hafızada tutmak zor oluyor, bu verileri getirmek için bana bir kod yazabilir seniz çok sevinirim. Örnek dosyam da ektedir. Teşekkür ederim
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,766
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

C++:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Baglanti As Object, Kayit_Seti As Object, Sorgu As String
    Dim Dosya As String, Ad As String, Soyad As String
    
    If Intersect(Target, Range("B2")) Is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    
    Set Baglanti = CreateObject("ADODB.Connection")
    
    Dosya = ThisWorkbook.Path & "\KAPALI.xlsm"
    
    Range("D5,E3").ClearContents
    
    Baglanti.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & _
                   Dosya & ";Extended Properties=""Excel 12.0;Hdr=No"""
    
    If InStr(1, Target, " ") > 0 Then
        Ad = Left(Target, InStr(1, Target, " ") - 1)
        Soyad = Replace(Target, Ad & " ", "")
        Sorgu = "Select F2,F7 From [LİSTE$] Where F3 = '" & Ad & "' And F4 = '" & Soyad & "'"
        Set Kayit_Seti = Baglanti.Execute(Sorgu)
        If Not Kayit_Seti.EOF Then
            Range("E3").Value = Kayit_Seti.Fields(0).Value
            Range("D5").Value = Kayit_Seti.Fields(1).Value
        Else
            MsgBox "Uygun kayıt bulunamadı!", vbCritical
        End If
        Kayit_Seti.Close
        Baglanti.Close
    Else
        MsgBox "İşleme devam edebilmek için lütfen Ad-Soyad bilgisini tam giriniz!", vbCritical
    End If
    
    Set Kayit_Seti = Nothing
    Set Baglanti = Nothing
End Sub
 
Katılım
24 Şubat 2009
Mesajlar
1,077
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
01-03-2023
Merhaba Korbay bey; Eline sağlık çok güzel olmuş size dua ediyorum, benim düşünemediğimi siz düşünüp yapmışsınız, ama şöyle bir sorun var onlar da şu; Eğer İsimler çift ile Örneğin Mehmet Ali, Hacı Bayram gibi çift isimler olursa getirmiyor, kayıt bulunamadı diyor, tabi ki bunun Soy isim dede çift olabilen oluyor özellikle bayan personellerin çift soy isimleri oluyor, son olarak da abiciğim şimdilik bu listemde yok ama bazen oluyor, Mesele özellikle Mehmet isimlerinde Örneğin Mehmet GÜL bundan iki tane olabiliyor bunu denedim, sadece en önde gelen ismi veriyor, yani ikincisini getirmiyor, bunun içinde bir mesajla bu isimden iki tane veya üç tane var gibi yazarsa bunu listemi açıp bakarak doğruyu yazabilirim, yada yapılırsa olursa "Aradığınız isim mükerrer bunu mu aradınız? hayır ise ikinci Mehmet GÜL isimli şahın verilerini getirmesini istiyorum. Bu dediğim olmaz ise bana sadece mükerrer olduğunu söylesin, bunun için ben listemi açık yazarım. Teşekkür ederim iyi akşamlar. Umarım çok bir şey istemedim. Sizler bizlere hep yardımcı oluyorsunuz sizleri de kırmak istemiyorum. Tekrar Teşekkür ederim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,766
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
HACI BAYRAM dediğiniz kişinin soyadı da vardır. Çift isimli ya da çift soyisimli kişiler varsa kodu basitleştirmek adına iki ayrı hücre kullanılması daha sağlıklı olacaktır.

ADI'nı bir hücreye yazarsınız. SOYADI'nı ayrı bir hücreye yazıp sorgularsınız. Bu şekilde uygun olur mu?

Birde tekrar eden isimlerden hangisini seçeceğinizi hangi kritere göre belirliyorsunuz?
 
Katılım
24 Şubat 2009
Mesajlar
1,077
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
01-03-2023
Merhaba abim; Zaten isimler ve Soy isimler ayrı ayrı sütunlarda, İsimler C sütununun da Soy isimler ise D sütununun da, bunda sorun yok, sorun şöyle oluyor, Örneğin Personelin Adı soyadı Hacı ÖZKAN ise, bu geliyor, Ama İsmi Hacı Bayram Soyadı ÖZKAN olunca bulmuyor, yani çift isimli olanları getirmiyor, tekrar eden isimlerden ise Örneğin Korhan Ayhan ismi iki tane olabilir, yani mükerrer ama bunların sicil ve tc leri muhakkak farklı olacaktır, bunu ikaz etmesini yani mükerrer olduğunu ikaz etmesini istiyorum. Bu özellik sadece mesajlada olabilir, yani "Uyarı bu isimden mükerrer var diye bir mesaj verirse dosyadan açık doğru olanı yaza bilirim bu istisna 200 'de bir olasılık belki daha fazla
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,766
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
KAPALI dosyanızı kast etmedim.

Mevcut dosyanıza göre çift soyisimli bir bayan personel olduğunda bunu excel neye göre ayıracak.

Açık olan dosyanızda sorgulama yaparken adını bir hücreye soyadını da ayrı bir hücreye yazarsanız daha sağlıklı sorgulama olacaktır.

Ben bunu kast etmiştim.
 
Katılım
24 Şubat 2009
Mesajlar
1,077
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
01-03-2023
Anladım Korhan bey; o zaman bu kodu B2 (ad)ye ek olarak B3 (soyad) de olsun böyle yapalım zahmet olmaz sa
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,766
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

C++:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Baglanti As Object, Kayit_Seti As Object, Sorgu As String
    Dim Dosya As String, Ad As String, Soyad As String
    
    If Intersect(Target, Range("B2:B3")) Is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    
    If Range("B2") = "" Then
        MsgBox "Lütfen ADI bilgisiniz giriniz!", vbCritical
        Range("B2").Select
        Exit Sub
    End If
    
    If Range("B3") = "" Then
        MsgBox "Lütfen SOYADI bilgisiniz giriniz!", vbCritical
        Range("B3").Select
        Exit Sub
    End If
    
    Set Baglanti = CreateObject("ADODB.Connection")
    
    Dosya = ThisWorkbook.Path & "\KAPALI.xlsm"
    
    Range("D5,E3").ClearContents
    
    Baglanti.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & _
                   Dosya & ";Extended Properties=""Excel 12.0;Hdr=No"""
    
    Ad = Range("B2").Value
    Soyad = Range("B3").Value
    
    Sorgu = "Select F2, F7  From [LİSTE$] Where F3 = '" & Ad & "' And F4 = '" & Soyad & "'"
    Set Kayit_Seti = Baglanti.Execute(Sorgu)
    
    If Not Kayit_Seti.EOF Then
        Range("E3").Value = Kayit_Seti.Fields(0).Value
        Range("D5").Value = Kayit_Seti.Fields(1).Value
    Else
        MsgBox "Uygun kayıt bulunamadı!", vbCritical
    End If
    
    Sorgu = "Select Count(*) From [LİSTE$] Where F3 = '" & Ad & "' And F4 = '" & Soyad & "'"
    Set Kayit_Seti = Baglanti.Execute(Sorgu)
    
    If Not Kayit_Seti.EOF Then
        If Kayit_Seti.Fields(0).Value > 1 Then
            MsgBox "Birden fazla eşleşen kayıt bulundu!", vbCritical
        End If
    End If
    
    Kayit_Seti.Close
    Baglanti.Close
    
    Set Kayit_Seti = Nothing
    Set Baglanti = Nothing
End Sub
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Bilgi için;

Aslında "Recordset" nesnesinden verileri almak için Execute metodu yerine Open kullanırsak, mükerrer kayıt sayısı için 2. sorguya gerek kalmaz....

Kod:
    '..........
    '.....
    Sorgu = "Select F2, F7  From [LİSTE$] Where F3 = '" & Ad & "' And F4 = '" & Soyad & "'"
   
    Set Kayit_Seti = CreateObject("ADODB.Recordset")
   
    adOpenStatic = 3
    adLockReadOnly = 3
   
    Kayit_Seti.Open Sorgu, Baglanti, adOpenStatic, adLockReadOnly

    If Not Kayit_Seti.EOF Then
        If Kayit_Seti.RecordCount > 1 Then
            MsgBox "Birden fazla eşleşen kayıt bulundu!", vbCritical
            Exit Sub
        End If
        Range("E3").Value = Kayit_Seti.Fields(0).Value
        Range("D5").Value = Kayit_Seti.Fields(1).Value
    Else
        MsgBox "Uygun kayıt bulunamadı!", vbCritical
    End If
   
    '........
    '....

.
 
Katılım
24 Şubat 2009
Mesajlar
1,077
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
01-03-2023
Merhaba Korhan bey; 2 numaralı mesajındaki kodlarla Soyisim çift olursa istenilen verileri buluyor, bunu Ad için yapamaz mıyız, yani ad çift olunca bulsun soyisim tek olsun, bu olur mu? Soyisim çift olursa oluyor,
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,766
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu şekilde iki örnek verebilir misiniz?

AD (Çift) SOYADI (Tek)
AD (Tek) SOYADI (Çift)
 
Katılım
24 Şubat 2009
Mesajlar
1,077
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
01-03-2023
Evet Abi Sana attığım listemde yok ama gerçek listem de var, Örneğin;
Ad HACI BAYRAM SOYAD: ÖZKAN bu gelmiyor, ama soyad çift olunca geliyor oda
Ad HACER soyad ÜNLÜ ŞAHİN
Bunları kapalı dosyama eklersen oluyor abim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,766
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Benim 2. mesajda verdiğim kod şu mantıkla çalışıyor.

Yazdığınız AD-SOYAD bilgisindeki boşluk karakterine bakıyor.
İlk boşluk karakterinden ayırıp bunu AD olarak baz alıyor.
Sonrasında "değiştir" komutu ile ad bilgisini AD-SOYAD bilgisinden temizliyor.( ki burası aslında riskli olmuş) Kalan bilgi SOYAD olarak dikkate alınıyor.

Sizin verdiğiniz örnekler üzerinden gidersek;

HACI BAYRAM ÖZKAN
HACER ÜNLÜ ŞAHİN

Bu iki örnekte 3 kelimeden oluşuyor. Excel bunun AD ya da SOYAD olacağını neye göre ayıracak.

Ben sıkıntılı bölümleri koyu renkle belirttim. Biz bu ayrışımı gözle yapabiliyoruz. Ama bunu excele anlatmak gerekiyor ki doğru sonucu verebilsin.

Bu sebepten dolayı AD ve SOYAD bilgisini ayrı hücrelere yazmanızı talep ettim.

Sizin aklınıza bir çözüm geliyorsa uygulayabiliriz.
 
Katılım
24 Şubat 2009
Mesajlar
1,077
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
01-03-2023
Yoo yoo abim nerden gelecek deneyince bu şekilde olunca İsim de de çift olunca olacağını düşündüm, soyisim tek olsun istedim, eğer böyle olursa kodu değiştirmeni isteyecektim, teşekkür ederim iyi geceler Allah rahatlık versin.
 
Üst