• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Soru fonksiyondaki aşırı yavaşlık

Katılım
18 Ağustos 2009
Mesajlar
752
Excel Vers. ve Dili
Office Ev ve İş 2021 - Türkçe
Aşağıdaki fonksiyona bağımlı çalışan ekteki dosya örneğiyle sistem çok aşırı yavaş çalışmaktadır. Sebebi ne olabilir arkadaşlar?



Option Explicit
Public Function ay_uretim_adeti(ie_no As Long) As Long
', Optional VolatileParameter As Variant
ActiveWorkbook.ForceFullCalculation = True
Dim hesap As Long
Dim i, j As Integer

For i = 1 To Sheets.Count

For j = 3 To 1500 'yukarıdan aşağıya 50 satıra bakacak

If Sheets(i).Range("E" & j).Value = ie_no Then

hesap = hesap + Sheets(i).Range("F" & j).Value

End If

Next j

Next i

ay_uretim_adeti = hesap
End Function
 

Ekli dosyalar

  • HATA.jpg
    HATA.jpg
    446 KB · Görüntüleme: 7
Böyle bir işlem için Özel Fonksiyon tanımlamanızı biraz gereksiz buldum.
Sayfa sayınız ve işlem yapacağınız satır sayısı çok etkileyecektir.
Ayrıca 1500 satır gibi bir alanda işlem yapacaksanız For Next yerine FIND komutuyla çalışmanızı öneririm.
 
Böyle bir işlem için Özel Fonksiyon tanımlamanızı biraz gereksiz buldum.
Sayfa sayınız ve işlem yapacağınız satır sayısı çok etkileyecektir.
Ayrıca 1500 satır gibi bir alanda işlem yapacaksanız For Next yerine FIND komutuyla çalışmanızı öneririm.

Örnek 1 dosya göndersem bakabilirmisiniz hocam?
 
Böyle bir işlem için Özel Fonksiyon tanımlamanızı biraz gereksiz buldum.
Sayfa sayınız ve işlem yapacağınız satır sayısı çok etkileyecektir.
Ayrıca 1500 satır gibi bir alanda işlem yapacaksanız For Next yerine FIND komutuyla çalışmanızı öneririm.

ya da bu fonksiyonu o dediğinize uyarlama imkanınız varmıdır hocam?
 
Bu KTF ile tüm sayfaların E sütununda 50 değil 1498 satır kontrol ediliyor. Dosyada 10 sayfa varsa 14980 satır demektir bu. Yavaşlık bundan kaynaklanıyor bence.
 
Sayın NextLevel'in de belirttiği gibi dosyanıza uygun başka bir çözüm kullanmanız iyi olur. Örneğin Etopla formülü daha hızlı çözüm olur.
 
Bu KTF ile tüm sayfaların E sütununda 50 değil 1498 satır kontrol ediliyor. Dosyada 10 sayfa varsa 14980 satır demektir bu. Yavaşlık bundan kaynaklanıyor bence.


E sütununda 163 sütun var hocam ancak birde gizli sayfa var orda da sütunda bulunan işemri numaralarının HAZİRAN AYI öncesi adet toplamları var ordada 1200 sütun var ondan dolayı yavaşlıyor sanırım. Öneriniz nedir bu konuda?
 
Sayın NextLevel'in de belirttiği gibi dosyanıza uygun başka bir çözüm kullanmanız iyi olur. Örneğin Etopla formülü daha hızlı çözüm olur.


ETOPLA ile 1 ayda bulunan 31 günün sayfalarındaki işemri adetini toplama yaptırabilirmiyiz hocam?
 
Sayfa Adlarını ve toplam aralığınıı doğru şekilde içeren doğruya yakın örnek bir dosyayı eklermisiniz
 
Hangi sayfalarda, Hangi aralıklar toplanacak? Sonuç nereye yazılacak
 
Ben bir fonksiyon hazırladım. Deneyin bakalım olmuş mu?

C++:
Option Explicit

Function K_TOPLA(Kriter As Variant) As Double
    Dim Sayfa As Worksheet, Son As Long, Veri As Variant, X As Long
    
    For Each Sayfa In ThisWorkbook.Worksheets
        Son = Sayfa.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Veri = Sayfa.Range("E1:F" & Son).Value
        For X = LBound(Veri) To UBound(Veri)
            If Veri(X, 1) = Kriter Then
                If IsNumeric(Veri(X, 2)) Then K_TOPLA = K_TOPLA + Veri(X, 2)
            End If
        Next
    Next
End Function
 
Ben bir fonksiyon hazırladım. Deneyin bakalım olmuş mu?

C++:
Option Explicit

Function K_TOPLA(Kriter As Variant) As Double
    Dim Sayfa As Worksheet, Son As Long, Veri As Variant, X As Long
   
    For Each Sayfa In ThisWorkbook.Worksheets
        Son = Sayfa.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Veri = Sayfa.Range("E1:F" & Son).Value
        For X = LBound(Veri) To UBound(Veri)
            If Veri(X, 1) = Kriter Then
                If IsNumeric(Veri(X, 2)) Then K_TOPLA = K_TOPLA + Veri(X, 2)
            End If
        Next
    Next
End Function

dosya olarak ekleme imkanınız varmıdır hocam? K_TOPLA komutu ilemi yapacam şimdi?
 
Ben bir fonksiyon hazırladım. Deneyin bakalım olmuş mu?

C++:
Option Explicit

Function K_TOPLA(Kriter As Variant) As Double
    Dim Sayfa As Worksheet, Son As Long, Veri As Variant, X As Long
   
    For Each Sayfa In ThisWorkbook.Worksheets
        Son = Sayfa.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Veri = Sayfa.Range("E1:F" & Son).Value
        For X = LBound(Veri) To UBound(Veri)
            If Veri(X, 1) = Kriter Then
                If IsNumeric(Veri(X, 2)) Then K_TOPLA = K_TOPLA + Veri(X, 2)
            End If
        Next
    Next
End Function



=EĞER(E37="";"";K_TOPLA(E37))
 
Önerdiğim kodu boş bir modüle ekleyin.

Daha sonra;

CTRL+H menüsünü açın.
Aranan değer bölümüne ay_uretim_adeti yazın.
Altındaki kutucuğa K_TOPLA yazıp tüm sayfalarda değiştir seçeneğini seçip tümünü değiştirin.

Son olarak eski yavaş çalışan fonksiyonu silebilirsiniz.
 
Çok teşekkürler arkadaşlar allah razı olsun
 
Ben bir fonksiyon hazırladım. Deneyin bakalım olmuş mu?

C++:
Option Explicit

Function K_TOPLA(Kriter As Variant) As Double
    Dim Sayfa As Worksheet, Son As Long, Veri As Variant, X As Long
   
    For Each Sayfa In ThisWorkbook.Worksheets
        Son = Sayfa.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Veri = Sayfa.Range("E1:F" & Son).Value
        For X = LBound(Veri) To UBound(Veri)
            If Veri(X, 1) = Kriter Then
                If IsNumeric(Veri(X, 2)) Then K_TOPLA = K_TOPLA + Veri(X, 2)
            End If
        Next
    Next
End Function

Çok teşekkürler hocam. Bu tür fonksiyon yazımlarını ne şekilde öğrenebiliriz acaba? Bunun için önereceğiniz bir eğitim seti varmıdır?
 
Dikkat ettiyseniz kod içinde döngü ve dizi yöntemleri bulunuyor. Bu tarz yöntemleri öğrenirseniz fonksiyona çevirmek hiç de zor değil.
 
Geri
Üst