Formül yerine makro kullanımı

Katılım
19 Mayıs 2015
Mesajlar
239
Excel Vers. ve Dili
2010 türkçe
Altın Üyelik Bitiş Tarihi
09-07-2021
Merhaba,
Aşağıdaki formülün yaptığı işi, makro yardımıyla yapmak mümkün mü? Örnek dosyalar ekte ..

Teşekkürler ...

=EĞER(EHATALIYSA(ARA($C10;'[NUMUNE KABUL - KAYIT.xlsm]ANALİZ SONUÇLARI'!$B$5:$B$27160;'[NUMUNE KABUL - KAYIT.xlsm]ANALİZ SONUÇLARI'!$C$5:C$27160));"";ARA($C10;'[NUMUNE KABUL - KAYIT.xlsm]ANALİZ SONUÇLARI'!$B$5:$B$27160;'[NUMUNE KABUL - KAYIT.xlsm]ANALİZ SONUÇLARI'!$C$5:C$27160))
 

Ekli dosyalar

Korhan Ayhan

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

ANALİZ SONUÇLARI isimli sayfanızın koruma şifresini paylaşır mısınız?
 
Katılım
19 Mayıs 2015
Mesajlar
239
Excel Vers. ve Dili
2010 türkçe
Altın Üyelik Bitiş Tarihi
09-07-2021
kaldırdığımı zannediyordum. Özür dilerim. Şifre 3452
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,742
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Şu item için çıkış sütunu yok sanırım.

"UYA
(mg CH3COOH/L)"
 
Katılım
19 Mayıs 2015
Mesajlar
239
Excel Vers. ve Dili
2010 türkçe
Altın Üyelik Bitiş Tarihi
09-07-2021
Evet onun için yok.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,742
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki item için sütundaki formülleriniz doğru mu?

Kontrol eder misiniz?

"OTH
(mg/L/Saat)"
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,742
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Giriş - Çıkış isimli sayfanızın kod bölümüne uygulayıp deneyiniz.

C sütunundaki hücrelere veri girişi yaptığınızda kod çalışacaktır.

Bende tek satır veri güncellemesi yaklaşık 7 saniye sürüyor. Bunun sebebi veri alınacak diğer dosyanızda boş satırlarda 30 binli satırlara kadar formüller var. Bunları azaltma imkanınız varsa süre kısalabilir.

C++:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Alan As Range, Veri As Range, X As Integer
    Dim Baglanti As Object, Kayit_Seti As Object, Zaman As Double
    Dim Sorgu As String, Dosya As String, Say As Integer
    Dim Sutun As Variant, Sutun_Giris As Variant, Sutun_Cikis As Variant
    
    Set Alan = Range("C9:C" & Cells(Rows.Count, 2).End(3).Row)
    If Intersect(Target, Alan) Is Nothing Then Exit Sub
    
    Zaman = Timer
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
    End With
    
    Set Baglanti = CreateObject("AdoDb.Connection")
    Set Kayit_Seti = CreateObject("AdoDb.Recordset")
    
    Dosya = ThisWorkbook.Path & "\NUMUNE KABUL - KAYIT.xlsm"
    
    Baglanti.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & _
    Dosya & ";Extended Properties=""Excel 12.0;Hdr=No"""
    
    Sutun_Giris = Array(3, 4, 5, 6, 7, 8, 9, 10, 19, 18, 13, 14, 15, 22, 16, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38)
    Sutun_Cikis = Array(3, 4, 5, 6, 7, 8, 9, 10, 18, 13, 14, 15, 22, 16, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38)
    Sutun = Array(1, 6, 7, 8, 42)
    
    For Each Veri In Intersect(Target, Alan).Columns(1)
        If Veri.Cells(, 1) <> "" And Veri.Cells(, 2) <> "" Then
            Say = 0
            For X = 5 To 65
                If Cells(8, X) = "Giriş" Then
                    Sorgu = "Select F" & Sutun_Giris(Say) - 1 & " From [ANALİZ SONUÇLARI$B5:AL] Where F1 = '" & Veri.Cells(, 1) & "'"
            
                    Kayit_Seti.Open Sorgu, Baglanti, 1, 1
                    
                    If Kayit_Seti.RecordCount > 0 Then Cells(Veri.Row, X).CopyFromRecordset Kayit_Seti
                    
                    Say = Say + 1
                    
                    If Kayit_Seti.State <> 0 Then Kayit_Seti.Close
                End If
            Next
        
            Say = 0
            For X = 5 To 65
                If Cells(8, X) = "Çıkış" Then
                    Sorgu = "Select F" & Sutun_Cikis(Say) - 1 & " From [ANALİZ SONUÇLARI$B5:AL] Where F1 = '" & Veri.Cells(, 2) & "'"
            
                    Kayit_Seti.Open Sorgu, Baglanti, 1, 1
                    
                    If Kayit_Seti.RecordCount > 0 Then Cells(Veri.Row, X).CopyFromRecordset Kayit_Seti
                    
                    Say = Say + 1
                    
                    If Kayit_Seti.State <> 0 Then Kayit_Seti.Close
                End If
            Next
        
            Say = 0
            For X = 66 To 74 Step 2
                Sorgu = "Select F" & Sutun(Say) & " From [NUMUNE KAYIT KABUL$B6:AW] Where F5 = " & Veri.Cells(, 1) & ""
        
                Kayit_Seti.Open Sorgu, Baglanti, 1, 1
                
                If Kayit_Seti.RecordCount > 0 Then Cells(Veri.Row, X).CopyFromRecordset Kayit_Seti
                
                Say = Say + 1
                
                If Kayit_Seti.State <> 0 Then Kayit_Seti.Close
            Next
        
            Say = 0
            For X = 67 To 73 Step 2
                Sorgu = "Select F" & Sutun(Say) & " From [NUMUNE KAYIT KABUL$B6:AW] Where F5 = " & Veri.Cells(, 2) & ""
        
                Kayit_Seti.Open Sorgu, Baglanti, 1, 1
                
                If Kayit_Seti.RecordCount > 0 Then Cells(Veri.Row, X).CopyFromRecordset Kayit_Seti
                
                Say = Say + 1
                
                If Kayit_Seti.State <> 0 Then Kayit_Seti.Close
            Next
        End If
    Next

    If Baglanti.State <> 0 Then Baglanti.Close
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
    End With
    
    MsgBox "Güncel veriler alınmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
    
    Set Alan = Nothing
    Set Kayit_Seti = Nothing
    Set Baglanti = Nothing
End Sub
 
Katılım
19 Mayıs 2015
Mesajlar
239
Excel Vers. ve Dili
2010 türkçe
Altın Üyelik Bitiş Tarihi
09-07-2021
Elinize sağlık. Teşekkür ederim. Verilerin gelmesi bende de 7-8 saniye sürüyor. Bu da başka bir problem. Örnek dosya da tek sekme vardı. Benim kullanacağım dosya da farklı isim ve formatlarda 10 sekme olacak. Her biri için ayrı bir kod gerekecek sanırım. Amacım 10 sekmedeki binlerce hücreye sorduğum sorudaki gibi formüller yazmadan verilerin bir şekilde gelmesini sağlamaktı. Formül ile olunca dosyanın açılması uzun sürüyor. Kod ile çabuk açılıyor ama veriler yavaş geliyor. Üçüncü bir alternatif yoksa formüller ile devam etmem gerekecek sanırım.
Tekrar teşekkürler...
 

Korhan Ayhan

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

Kullandığım yöntem (ADO) dosyaları açmadan verileri çekiyor ve en hızlı yöntemlerden biridir.

Dosyalar açılarak belki dizi yöntemiyle biraz daha hız kazanılabilir.
 
Üst