Kurum bilgilerini güncelle

ErdalÖzdemir

Altın Üye
Katılım
12 Ağustos 2022
Mesajlar
91
Excel Vers. ve Dili
2013 TÜRKÇE
Altın Üyelik Bitiş Tarihi
21-09-2025
Merhaba arkadaşlar,

Kurum Kodu, iki tabloda da eşit ise istenilen verilerin ilgili Kurum kodunun karşısına getirerek kurum bilgilerini güncelliyorum.
Bunu da ADO kullanarak yapıyorum. Fakat çok yavaş çalışıyor. Asıl verilerin çekildiği dosya 60 bin satır aralığında . 60 bin satırın karşısına veriler getiriliyor.
Bu verileri daha hızlı çekmek için ne yapılabilir. Bu konuda uzman hocalarımızın yardımlarını bekliyorum.

Verileri çektiğim kod;

Kod:
Sub KURUM_BİLGİLERİNİ_GETİR()

With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
    End With

Dim sql As String, rg As Range
Dim yol As String

Set con = New ADODB.Connection
Set rs = New ADODB.Recordset

yol = "D:\1- BELGELERİM\\6- VERİ TABLOLARI\\KURUM_BİLGİLERİ.xlsb"
con.Open "provider=microsoft.ace.oledb.12.0;data source=" & yol & ";extended properties=""Excel 12.0;hdr=yes"""
'MsgBox con.State

Dim ws As Worksheet
Set ws = Sayfa1

sql = "select  [KURUM_KODU],[İLÇE],[GENEL_MÜDÜRLÜK],[KURUM_TÜRÜ],[KURUM_ADI]" _
    & "from [KURUM İLETİSİM BİLGİLERİ$]" _
    & "Group By[KURUM_KODU],[İLÇE],[GENEL_MÜDÜRLÜK],[KURUM_TÜRÜ],[KURUM_ADI]"

Set rs = con.Execute(sql)

On Error Resume Next

Dim Son As Long
Son = ws.Cells(Rows.Count, 1).End(xlUp).Row
'ws.Range("C2" & " :" & "F2:F" & Son).ClearContents

Dim dizi As Variant
Dim i As Long

Set rg = ws.Range("A2").CurrentRegion
dizi = rg

rs.MoveFirst
Do Until rs.EOF

For i = 2 To UBound(dizi)
If dizi(i, 1) = rs(0) Then
    ws.Cells(i, "C") = rs(1) ' İLÇE
    ws.Cells(i, "D") = rs(2) ' GENEL_MÜDÜRLÜK
    ws.Cells(i, "E") = rs(3) 'KURUM_TÜRÜ
    ws.Cells(i, "F") = rs(4) 'OKUL_ADI
    End If
Next i

rs.MoveNext
Loop
rs.Close: con.Close
sql = vbNullString: Set rs = Nothing: Set con = Nothing

MsgBox ("İstenilen veriler çekildi")

With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub
 
Son düzenleme:

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,370
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
Kodlardan anlaşılması zor ama
Kod:
where [KURUM_KODU] "
dedikten sonra şartı söylememişsiniz.
Yavaşlatıp yavaşlatmayacağını bilmemem ama ya bir şart koyun ya da where'i kaldırın.

Asıl dosyayı da ayrıca görmek gerek diye düşünüyorum.
 

ErdalÖzdemir

Altın Üye
Katılım
12 Ağustos 2022
Mesajlar
91
Excel Vers. ve Dili
2013 TÜRKÇE
Altın Üyelik Bitiş Tarihi
21-09-2025
Merhaba,

Hocam, 'where' deneme yaparken kalmış, silmeyi unutmuşum.
Asıl verilerin çekildiği dosya en az 60 bin satır aralığında . En az 60 bin satırın karşısına veriler getiriliyor.
 
Son düzenleme:

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,370
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
60 bin satır az değil.
 

bosislermuduru

Altın Üye
Katılım
2 Temmuz 2018
Mesajlar
64
Excel Vers. ve Dili
2003 ,2007,2013,2019@PowerQuery
Altın Üyelik Bitiş Tarihi
14-05-2029
Anladığım kadarıyla sadece Verileri Listelemek İçin Makro Kollanıyorsunuz,
Aynı İşlemi Saniyeler İçerisinde PQ İle Yapabilirsiniz
Denemek İsterseniz Resimleri Takip Edebilirsiniz.

Ben Bu şekilde 1 Milyon Veriyi Hesaplamak için 4 dakika bekliyorum(İşlem Hacmi fazla ve BenimPC yavaş olduğundan)

Yaptığım İşlem , Verileri Gruplandırarak Büyükten Küçüğe Sıralamak

1-Verileri Al İle Exceli İçeriye Aktar
2- Exceli Seç ve veri Dönüştürmeye bas
3- Başlıkları ve Veri Türlerini Tanımla
4- İstediğin Filtrelemeleri Yap
5- tabloya sağ tıklayıp yenile dersen rapor yenilenir


251656




251658


251659
 
Son düzenleme:

ErdalÖzdemir

Altın Üye
Katılım
12 Ağustos 2022
Mesajlar
91
Excel Vers. ve Dili
2013 TÜRKÇE
Altın Üyelik Bitiş Tarihi
21-09-2025
Hocam sadece verileri listelemek için değil, şarta göre bazı alanları güncellemem gerekiyor.
Kurum Kodu, iki tabloda da eşit ise istenilen verilerin ilgili Kurum kodunun karşısına getirmek
Bunu da ADO kullanarak yapıyorum. Fakat çok yavaş çalışıyor. Bunu hızlandırabilir miyiz, diye bu konuyu açtım.
İlginiz için çok teşekkür ederim.
 

bosislermuduru

Altın Üye
Katılım
2 Temmuz 2018
Mesajlar
64
Excel Vers. ve Dili
2003 ,2007,2013,2019@PowerQuery
Altın Üyelik Bitiş Tarihi
14-05-2029
Bahsettiğiniz işlem yine PQ İle Yapılabiliyor
 

ErdalÖzdemir

Altın Üye
Katılım
12 Ağustos 2022
Mesajlar
91
Excel Vers. ve Dili
2013 TÜRKÇE
Altın Üyelik Bitiş Tarihi
21-09-2025
Hocam teşekkürler.
ADO ile olursa iyi olur.
 
Son düzenleme:

ErdalÖzdemir

Altın Üye
Katılım
12 Ağustos 2022
Mesajlar
91
Excel Vers. ve Dili
2013 TÜRKÇE
Altın Üyelik Bitiş Tarihi
21-09-2025
ADO Konusunda yardımcı olabilecek uzman Hocalarımızın yardımlarını bekliyorum
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,344
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Cursor kullanımı çok yavaştır. İstediğiniz işlem join operasyonu ile yapılabilir. Net bir çözüm bulmak için tablo yapısı birebir aynı olan örnek bir dosya eklemenizde fayda var.

.
 
Katılım
9 Şubat 2022
Mesajlar
204
Excel Vers. ve Dili
Office 2021 Türkçe (x64)
Altın Üyelik Bitiş Tarihi
09-02-2027
rs.GetRows ile veriyi diziye alarak kullanabilirsiniz. Forumda aratın örnekleri mevcut. Çok hızlanacaktır.
 

ErdalÖzdemir

Altın Üye
Katılım
12 Ağustos 2022
Mesajlar
91
Excel Vers. ve Dili
2013 TÜRKÇE
Altın Üyelik Bitiş Tarihi
21-09-2025
ADO konusunda uzman hocalarımızın yardımlarını bekliyorum
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
Merhaba;

Bence veriler daha da büyümeden, işler karışmadan veritabanı kullanın. İller, kurumlar, okullar vs vs ayrı ayrı tablolar yapın. Biliyorum sorunuza cevap değil ve belki de kızacaksınız ama anladığım kadarıyla zaten yanlış bir algoritma yürütüyorsunuz.
Kolay gelsin.. Diğer arkadaşlar yardımcı olur umarım.
 

bosislermuduru

Altın Üye
Katılım
2 Temmuz 2018
Mesajlar
64
Excel Vers. ve Dili
2003 ,2007,2013,2019@PowerQuery
Altın Üyelik Bitiş Tarihi
14-05-2029
Merhaba Deneyebilirmisiniz,

Masaüstü Bende C Sürücüsünde Olmadığından adresi CreateObject("WScript.Shell").SpecialFolders("Desktop")& " \xxxxxx.xxxx" şeklinde çektim.
 

Ekli dosyalar

ErdalÖzdemir

Altın Üye
Katılım
12 Ağustos 2022
Mesajlar
91
Excel Vers. ve Dili
2013 TÜRKÇE
Altın Üyelik Bitiş Tarihi
21-09-2025
Hocam, teşekkür ederim.
Yapmak istediğim; Kurum Kodu iki tabloda da eşit ise istenilen verilerin ilgili kurum kodunun karşısına getirmek.
Hocam kodu gerçek dosya üzerinde denedim fakat çalıştıramadım. Hata vermiyor, verileri de getirmiyor.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,344
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
SQL:
SELECT a.[KURUM_KODU],a.[TİPİ],b.[İLÇE], b.[GENEL_MÜDÜRLÜK], b.[KURUM_TÜRÜ], b.[KURUM_ADI],a.[SINIF_ŞUBE],a.[SINIF2],a.[SINIF1],a.[YAŞ],a.[EĞİTİM_KADEMESİ_1],
    a.[EĞİTİM_KADEMESİ_2],a.[ERKEK_ÖĞRENCİ],a.[KIZ_ÖĞRENCİ],a.[TOPLAM_ÖĞRENCİ],a.[ŞUBE],a.[ÖĞRENCİ_TİPİ],a.[ŞUBE_SAYISI_30+],a.[Dosya_Adi]
FROM [ÖĞRENCİ_SAYILARI$] as a
    left join [EXCEL 12.0; DATABASE=@@yol2@@].[KURUM İLETİSİM BİLGİLERİ$] as b
        on a.[KURUM_KODU] = b.[KURUM_KODU]
C#:
Sub Test()
    Dim cn As New ADODB.Connection, yol As String, yol2 As String, rs As ADODB.Recordset
    
    Sayfa2.Cells.ClearContents
    
    yol = ThisWorkbook.FullName
    yol2 = ThisWorkbook.Path & "\Kayanak_Dosya.xlsx"
    
    cn.Open "provider=microsoft.ace.oledb.12.0;data source=" & yol & ";extended properties=""Excel 12.0;hdr=YES"""
    
    Set rs = cn.Execute(Replace(UserForm1.TextBox1, "@@yol2@@", yol2))
    
    For i = 0 To rs.Fields.Count - 1
        Sayfa2.Cells(1, i + 1) = rs(i).Name
    Next
    
    Sayfa2.Range("a2").CopyFromRecordset rs
    
    cn.Close
    
    Set cn = Nothing
End Sub
 

Ekli dosyalar

ErdalÖzdemir

Altın Üye
Katılım
12 Ağustos 2022
Mesajlar
91
Excel Vers. ve Dili
2013 TÜRKÇE
Altın Üyelik Bitiş Tarihi
21-09-2025
Hocam, teşekkür ederim. Elinize emeğinize saqlık. Kod çalışıyor.
Hocam UserForm üzerinden olmasa nasıl olur.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,344
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Sql metnini userform içerisinde sakladım. Eğet değişkene alırsanız formu silebilirsiniz.
 
Üst