Numaraları eşleştirerek Kapalı dosyadan veri alma ve işleme

Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
İyi geceler,
"Kaynak Dosyan"ın "B" Sütunu ile "Hedef Dosya"nın "E" sütunlarında eşleşen numaralardan "E" ve "F" sütunlarındaki verileri "HEDEF DOSYA"nın "I" ve "j" sütunlarına çekecek koda ihtiyacım var. Örnek dosyalar ektedir. Yardımlarını esirgemeyecek olan siz EXCEL dostlarına minnettar olurum.
 

Ekli dosyalar

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
ADO ile bir alternatif ektedir...

.
 

Ekli dosyalar

Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Sayın @Haluk hızlı ve kesin çözüm için çok teşekkür ederim. Sağ olun, emeğinize sağlık...
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
ADO ile bir alternatif ektedir...

.
@Haluk Bey kod ile alakalı bir durum fark ettim sonradan. Veri çekme işlemini iki dosyadaki öğrenci numaraları eşleştirerek. Birinci dosyada olan numaraları ikinci dosyadaki numaralarda bulup verileri karşısına yazacak. Burada kaynak dosyada var olan dosyaların tümünü alıp ikinci dosyada yukarıdan aşağıya doğru yapıştırıyor. Dolayısıyla bilgileri yanlış kişilerin karşısına yazmış oluyor. özetle birinci dosyada olup ikinci dosyada olmayan numaraları es geçecek var olan aynı numaranın karşısına yazacak. İnşallah doğru anlatabildim. Bu kısmı çözerseniz duacınız olurum. Saygıyla
 

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
Deneyiniz.....

(7 No'lu mesajdaki açıklamayı da okuyun....)

.
 

Ekli dosyalar

Son düzenleme:

Korhan Ayhan

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

DÜŞEYARA fonksiyonu makro olarak uygulanmıştır.

C++:
Option Explicit

Sub Aktar()
    Dim Dosya_Yolu As String, Son As Long, Zaman As Double

    Zaman = Timer

    Application.ScreenUpdating = False

    Dosya_Yolu = ThisWorkbook.Path & Application.PathSeparator & "[KAYNAK DOSYA.xlsm]Sheet1"

    Son = Cells(Rows.Count, 5).End(3).Row

    With Range("I2")
        .Resize(Rows.Count - 1).ClearContents
        .Resize(Son).Formula = "=IFERROR(VLOOKUP(E2,'" & Dosya_Yolu & "'!$B:$F,4,0),"""")"
        .Resize(Son).Value = .Resize(Son).Value
    End With
    
    With Range("J2")
        .Resize(Rows.Count - 1).ClearContents
        .Resize(Son).Formula = "=IFERROR(VLOOKUP(E2,'" & Dosya_Yolu & "'!$B:$F,5,0),"""")"
        .Resize(Son).Value = .Resize(Son).Value
    End With

    Application.ScreenUpdating = True
    
    MsgBox "Veri aktarımı tamamlanmıştır." & vbCr & vbCr & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
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
@Feylosof ;

Dosyalar karışmasın diye, 5 No'lu mesajımdaki dosya isimlerinin sonuna 2 eklemiştim ama kodda bunu değiştirmeyi unutmuşum.

Siz, aşağıdaki düzenlemeyi yaparsınız...

Rich (BB code):
    adoCN.ConnectionString = ThisWorkbook.Path & "\KAYNAK DOSYA2.xlsm"
.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,247
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu da başka bir alternatif;

İNDİS+KAÇINCI fonksiyonlarının makro karşılığıdır.

C++:
Option Explicit

Sub Aktar()
    Dim Dosya_Yolu As String, Son As Long, Zaman As Double

    Zaman = Timer

    Application.ScreenUpdating = False

    Dosya_Yolu = ThisWorkbook.Path & Application.PathSeparator & "[KAYNAK DOSYA.xlsm]Sheet1"

    Son = Cells(Rows.Count, 5).End(3).Row

    With Range("I2")
        .Resize(Rows.Count - 1).ClearContents
        .Resize(Son).Formula = "=IFERROR(INDEX('" & Dosya_Yolu & "'!$E:$E,MATCH(E2,'" & Dosya_Yolu & "'!$B:$B,0)),"""")"
        .Resize(Son).Value = .Resize(Son).Value
    End With
    
    With Range("J2")
        .Resize(Rows.Count - 1).ClearContents
        .Resize(Son).Formula = "=IFERROR(INDEX('" & Dosya_Yolu & "'!$F:$F,MATCH(E2,'" & Dosya_Yolu & "'!$B:$B,0)),"""")"
        .Resize(Son).Value = .Resize(Son).Value
    End With

    Application.ScreenUpdating = True
    
    MsgBox "Veri aktarımı tamamlanmıştır." & vbCr & vbCr & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
@Feylosof ;

Dosyalar karışmasın diye, 5 No'lu mesajımdaki dosya isimlerinin sonuna 2 eklemiştim ama kodda bunu değiştirmeyi unutmuşum.

Siz, aşağıdaki düzenlemeyi yaparsınız...

Rich (BB code):
    adoCN.ConnectionString = ThisWorkbook.Path & "\KAYNAK DOSYA2.xlsm"
.
@Haluk Bey müteşekkirim. Varolun
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Bu da başka bir alternatif;

İNDİS+KAÇINCI fonksiyonlarının makro karşılığıdır.

C++:
Option Explicit

Sub Aktar()
    Dim Dosya_Yolu As String, Son As Long, Zaman As Double

    Zaman = Timer

    Application.ScreenUpdating = False

    Dosya_Yolu = ThisWorkbook.Path & Application.PathSeparator & "[KAYNAK DOSYA.xlsm]Sheet1"

    Son = Cells(Rows.Count, 5).End(3).Row

    With Range("I2")
        .Resize(Rows.Count - 1).ClearContents
        .Resize(Son).Formula = "=IFERROR(INDEX('" & Dosya_Yolu & "'!$E:$E,MATCH(E2,'" & Dosya_Yolu & "'!$B:$B,0)),"""")"
        .Resize(Son).Value = .Resize(Son).Value
    End With
   
    With Range("J2")
        .Resize(Rows.Count - 1).ClearContents
        .Resize(Son).Formula = "=IFERROR(INDEX('" & Dosya_Yolu & "'!$F:$F,MATCH(E2,'" & Dosya_Yolu & "'!$B:$B,0)),"""")"
        .Resize(Son).Value = .Resize(Son).Value
    End With

    Application.ScreenUpdating = True
   
    MsgBox "Veri aktarımı tamamlanmıştır." & vbCr & vbCr & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
Sayın @Korhan Ayhan desteğinizden dolayı çok teşekkür ederim. Varolun. Arşivimde saklı kalacak.
 
Üst