• DİKKAT

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

Soru aşırı yavaş çalışan formül

Katılım
18 Ağustos 2009
Mesajlar
752
Excel Vers. ve Dili
Office Ev ve İş 2021 - Türkçe
Arkadaşlar L2.....250 ve C3.........250 ye göre iki alana göre sorgulama yaptırdığım formülüm aşağıdadır ancak neden se çok aşırı yavaş çalışmaktadır. Bunu hızlı bir şekilde çalışan başka bir formüle dönüştürebilirmiyiz?

Teşekkürler..

=EĞERHATA(İNDİS(DATA!G:G;TOPLA.ÇARPIM((KAÇINCI(C3&"@"&$L$2;DATA!A:A&"@"&DATA!J:J;0))));"0")
 
G sütununuzu da görmeden cevap verilecek tek konu Topla.Çarpım fonksiyonudur.
Zira bu fonksiyon bir çok sorunda kurtarıcı görevi görmekteyse de eğer gelişigüzel kullanılırsa kullandığınız formül sayısına göre dosyanızda yavaşlamaya sebep olur.
 
G sütununuzu da görmeden cevap verilecek tek konu Topla.Çarpım fonksiyonudur.
Zira bu fonksiyon bir çok sorunda kurtarıcı görevi görmekteyse de eğer gelişigüzel kullanılırsa kullandığınız formül sayısına göre dosyanızda yavaşlamaya sebep olur.

Veriler bunlar DATA daki hocam

232044
 
Verilerinizin toplam satır sayısı belirli ise ve değişmeyecekse
Mesela A2:J100 aralığında ise
=EĞERHATA(İNDİS(DATA!G2:G100;TOPLA.ÇARPIM((KAÇINCI(C3&"@"&$L$2;DATA!A2:A100&"@"&DATA!J2:J100;0))));"0")

Eğer değişken bir satır sayısınız varsa
DATA!G:G direkt kullanmak yerine Kaydır fonksiyonuyla kullandığınız aktif alanda bir başvuru adresi oluşturbilirsiniz.
 
Ek olarak;

1- Formüllerde G:G gibi aralık kullanmak yerine ihtiyaç kadar hücre aralığını kullanmak her zaman avantaj sağlayacaktır. Bu yöntem büyük ölçüde sorunu çözecektir.

2- Formülde yaptığınız birleştirme işlemini boş bir sütunda yaparak daha basit kurgular kurabilirsiniz. Mesela DÜŞEYARA fonksiyonu ile sonuca gidebilirsiniz.

3- Listenizi EKLE-TABLO menüsünden tabloya dönüştürürseniz yazacağınız formüller dinamik alan uygulaması gibi çalışacaktır. Yani tablonuzdaki satır sayısına göre hareket ederek sonuç üreteceği için daha iyi bir performans verecektir.

4- Verilerinizi özet tablo yapısına uydurup ÖZET TABLO kullanarak sonuca gidebilirsiniz. Bu performans olarak sizi üst seviyelere taşıyacaktır.

5- Bunları denemenize rağmen performans alamıyorsanız artık makro kullanma zamanınız gelmiş demektir.
 
Ek olarak;

1- Formüllerde G:G gibi aralık kullanmak yerine ihtiyaç kadar hücre aralığını kullanmak her zaman avantaj sağlayacaktır. Bu yöntem büyük ölçüde sorunu çözecektir.

2- Formülde yaptığınız birleştirme işlemini boş bir sütunda yaparak daha basit kurgular kurabilirsiniz. Mesela DÜŞEYARA fonksiyonu ile sonuca gidebilirsiniz.

3- Listenizi EKLE-TABLO menüsünden tabloya dönüştürürseniz yazacağınız formüller dinamik alan uygulaması gibi çalışacaktır. Yani tablonuzdaki satır sayısına göre hareket ederek sonuç üreteceği için daha iyi bir performans verecektir.

4- Verilerinizi özet tablo yapısına uydurup ÖZET TABLO kullanarak sonuca gidebilirsiniz. Bu performans olarak sizi üst seviyelere taşıyacaktır.

5- Bunları denemenize rağmen performans alamıyorsanız artık makro kullanma zamanınız gelmiş demektir.



düşeyara ile çifte sorgulama yapılabilirmi Korhan bey? DÜŞEYARA ile sorgulama yapan bir formülüm vardı çok hızlı çalışıyordu ancak onda çifte sorgulama yaptıramadığım için silmek zorunda kaldım.
 
Tablonuzun soluna boş bir sütun ekleyin.

Bu sütuna B sütunu ile K sütunu birleştirin. Bu aşamadan sonra DÜŞEYARA fonksiyonu ile sonuca gidebilirsiniz.
 
Çünkü siz ilk mesajınızda verdiğiniz formulde A ve J sütunu birleştirilmişti. Bende boş bir sütun ekleyin dedim. Böylece sütunlar bir adet kaymış oldu.
 
Çünkü siz ilk mesajınızda verdiğiniz formulde A ve J sütunu birleştirilmişti. Bende boş bir sütun ekleyin dedim. Böylece sütunlar bir adet kaymış oldu.

Korhan bey 1 örnek attım.Mantık aynı sizinde daha iyi bildiğiniz gibi ama neden orjnal de yavaş çözemedim. Bunu DÜŞEYARA ile çift alan sorgulayacak şekilde nasıl yapabiliriz?
 

Ekli dosyalar

Kod kullanarak deneyiniz.

Kod:
Sub test()
Dim s1 As Worksheet, s2 As Worksheet
Set s1 = Sheets("DATA")
Set s2 = Sheets("Sayfa1")

Set dc = CreateObject("scripting.dictionary")

a = s1.Range("A1:J" & s1.Cells(Rows.Count, 1).End(3).Row).Value

For i = 1 To UBound(a)
    krt = CStr(a(i, 1)) & "#" & CStr(a(i, 10))
    dc(krt) = dc(krt) + a(i, 7)
Next i

b = s2.Range("A2:A" & s2.Cells(Rows.Count, 1).End(3).Row).Value

ReDim c(1 To UBound(b), 1 To 1)
ara = CStr(s2.[J1])
    For i = 1 To UBound(b)
        krt = CStr(b(i, 1)) & "#" & ara
        If dc.exists(krt) Then
            c(i, 1) = dc(krt)
        Else
            c(i, 1) = 0
        End If
    Next i

s2.[B2].Resize(UBound(b)) = c

MsgBox "Tamam...", vbInformation
End Sub
 
Merhaba,
ÇOKETOPLA formülüde işinizi görür.

Deneyiniz.
Kod:
=ÇOKETOPLA(DATA!G:G;DATA!A:A;A2;DATA!J:J;$J$1)
 
Sizin kasıyor dediğiniz formül iki kritere göre tabloda ilk bulduğu satıra ait veriyi getirir. Eğer A-J sütunlarında verilerin mükerrer olma durumunda toplama işlemi yapılacaksa @Mahir64 beyin çözümü işinize yarayacaktır.

Verileriniz çok fazla ise @Ziynettin beyin çözümünü kullanmanızı tavsiye ederim.

Bende bahsettiğim DÜŞEYARA ve ÖZET TABLO çözümlerini paylaşıyorum.
 

Ekli dosyalar

Geri
Üst