İKİ FARKLI Ç.KİTABINDAKİ VERİYİ KOŞULA GÖRE EŞLEŞTİRME HK

bkk

Katılım
30 Aralık 2019
Mesajlar
186
Excel Vers. ve Dili
Ofis 2019
Altın Üyelik Bitiş Tarihi
06-12-2025
Merhabalar, elimde iki tane çalışma kitabı vardır, a çalışma kitabındaki tarih,2 ve 3 sütunları, b kitabındaki tarih ,x ve y sütunları ile eşleştiği takdirde,
a kitabında adet sütunundaki sayı kadar satırı çoğaltıp, b sütununda eşlesen farklı isimleri yan sütuna getirmelidir. Sonuç c kitabında örneklidir, Konu hakkında yardımcı olabilir misiniz? Teşekkür ederim
 

Ekli dosyalar

bkk

Katılım
30 Aralık 2019
Mesajlar
186
Excel Vers. ve Dili
Ofis 2019
Altın Üyelik Bitiş Tarihi
06-12-2025
aşağıdaki kod ile çoğaltma işlemini sağladım, ancak ikinci kitaptan hala veriyi çekemedim;

Sub SatirCokalt()
Dim satirSayisi As Integer
Dim i As Integer
Dim adet As Integer

' İlk satırı atla, başlıkları tutmak için
satirSayisi = Cells(Rows.Count, "F").End(xlUp).Row

For i = satirSayisi To 2 Step -1
' F sütunundaki adet değerini al
adet = Cells(i, "g").Value

' Adet kadar satırı çoğalt
If adet > 1 Then
' Satırı adet kadar çoğalt
Rows(i + 1 & ":" & i + adet - 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
' İlgili satırın verilerini çoğalt
Rows(i).Copy
Rows(i + 1 & ":" & i + adet - 1).PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False ' Kopyalama modunu kapat
End If
Next i
End Sub
 
Son düzenleme:

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,651
Excel Vers. ve Dili
Pro Plus 2021
PQ and ADO ....
Kod:
Sub birlestir()
    Application.ScreenUpdating = False
    Dim strSQL$, rs As Object, r, dosya(1 To 2), sat, i, ii, dic As Object, adoCon As Object, ky$, w
    Set dic = CreateObject("Scripting.Dictionary")
    Set adoCon = CreateObject("AdoDB.Connection")
    With Sheets("Dosyalar")
        dosya(1) = .Range("A2").Value & "\" & .Range("B2").Value
        dosya(2) = .Range("A3").Value & "\" & .Range("B3").Value
    End With

    With adoCon
        strSQL = "SELECT [NO],FORMAT(TARİH,'dd.mm.yyyy'),[1],[2],[3],ADET,[5],[6],[7] FROM [Sayfa1$]"
        .Open "Provider=Microsoft.Ace.Oledb.12.0;Extended Properties='Excel 12.0;HDR=YES;IMEX=1';" & _
              "Data Source=" & dosya(1)
        Set rs = .Execute(strSQL)
    End With
    sat = 1
    With Sheets("ADO")
        .Cells.ClearContents
        .Range("A1:O1").Value = Array("NO", "TARİH", "1", "2", "3", "ADET", "5", "6", "7", "S.N", "AD", "SOYAD", "X", "Y", "TARİHİ")
        If Not rs.EOF Then
            Do While Not rs.EOF
                For i = 1 To rs("ADET")
                    sat = sat + 1
                    For ii = 0 To rs.Fields.Count - 1
                        .Cells(sat, ii + 1).Value = rs.Fields(ii)
                    Next ii
                    ky = .Cells(sat, 2).Value & .Cells(sat, 4).Value & .Cells(sat, 5).Value
                    If Not dic.exists(ky) Then
                        dic(ky) = Array(sat, sat)
                    Else
                        w = dic(ky)
                        w(1) = sat
                        dic(ky) = w
                    End If
                Next i
                rs.MoveNext
            Loop
        End If
        rs.Close
    End With
    adoCon.Close
    With adoCon
        strSQL = "SELECT [S#N],AD,SOYAD,X,Y,FORMAT(TARİHİ,'dd.mm.yyyy') FROM [Sayfa1$]"
        .Open "Provider=Microsoft.Ace.Oledb.12.0;Extended Properties='Excel 12.0;HDR=YES;IMEX=1';" & _
              "Data Source=" & dosya(2)
        Set rs = .Execute(strSQL)
    End With
    sat = 1
    With Sheets("ADO")
        If Not rs.EOF Then
            Do While Not rs.EOF
                ky = rs(5) & rs(3) & rs(4)
                If dic.exists(ky) Then
                    w = dic(ky)
                    sat = w(0)
                    For ii = 0 To rs.Fields.Count - 1
                        .Cells(sat, ii + 10).Value = rs.Fields(ii)
                    Next ii
                    w(0) = w(0) + 1
                    If w(0) > w(1) Then
                        dic.Remove (ky)
                    Else
                        dic(ky) = w
                    End If
                End If
                rs.MoveNext
            Loop
        End If
        rs.Close
        .Columns.AutoFit
    End With
    Application.ScreenUpdating = True
End Sub
 

Ekli dosyalar

bkk

Katılım
30 Aralık 2019
Mesajlar
186
Excel Vers. ve Dili
Ofis 2019
Altın Üyelik Bitiş Tarihi
06-12-2025
Çok teşekkür ediyorum. Emeğiniz için ayrıca teşekkür ediyorum. Denedim sonuç aldım.
 
Üst