• DİKKAT

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

yavaşlama

Barons

Altın Üye
Katılım
14 Mayıs 2005
Mesajlar
967
Excel Vers. ve Dili
Microsoft Ofis 365
merhaba
ben bu sorumu özellikle forumdaki hocalarıma sormak istiyorum.
Sorunun tarifi çok basit olduğu için dosya göndermedim.Çok sık başıma gelen bir olaydan bahsedeceğim ve uzun süredir bu konuyu foruma sormak istiyordum.Kısmet bugüneymiş.

örnek:Bir excel dosyasında database ve rapor adlarında 2 sayfa olsun.
Database sayfasına veriler, userform aracılığı ile girilmektedir.
rapor sayfasında ise etopla formulleri bulunmakta ve diyelimki database sayfasında veri satır sayısı o an için 3000 ise ,bu etopla formulu 5000 satırı kontrol etmektedir.

Bu şekilde olduğunda veri aktarma süresi uzun olmaktadır ama rapor sayfasındaki formulleri sildiğimde ise jet gibi hızlanmaktadır.

Bu etopla formülünden kaynaklanan yavaşlamanın çözümü varmıdır?

teşekkürler
 
Rapor sayfasındaki formülleri makro ile çalıştırırsanız sorununuz çözülür. Yani formülleri sadece size lazım olduğu zaman makro ile ilgili hücrelere aktarırsınız ve işiniz bitince silersiniz. Böylece formüller makro ile hücrelere yazılacağından hücrelerde formül bulunmaz ve Excel hızlanır. Bunu makro kaydet ile basitçe yapabilirsiniz. Gerçi o zaman makro biraz uzun olur ama sorun değil..
 
evet bende şu anda öyle yapmaya çalışıyorum ancak bu excel'de ciddi bir zaafiyet değilmi?
veri yazdıracağınız bölgede etopla varsa ciddi yavaşlama oluyor.
 
evet bende şu anda öyle yapmaya çalışıyorum ancak bu excel'de ciddi bir zaafiyet değilmi?
veri yazdıracağınız bölgede etopla varsa ciddi yavaşlama oluyor.

Formüller maalesef çok yavaşlatıyor Excel'i ama yapacak bir şey yok bildiğim kadarı ile..
 
Selamlar,

Hacimli dosyalarda formüllerle çalışyorsanız yavaşlamayıda gözönünde bulundurmanız gerekiyor. Aslında kullandığınız formül çok hızlı çalışan bir formüldür. Sizde yavaşlamaya sebep olan başka bir sıkıntı olabilir.

1. Alternatif ;
Kod çalışırken hesaplama yöntemini manuele alıp verileri yazdırdıktan sonra tekrar hesaplamayı aktif hale getirerek çalışmanıza hız kazandırabilirsiniz.

Kod:
Option Explicit
 
Sub Makro1()
    Application.Calculation = [COLOR=red]xlManual[/COLOR]
 
    'Veri işleyen kodlarınız
 
    Application.Calculation = xlCalculationAutomatic
End Sub


2. Alternatif ;
Rapor sayfasınıda tamamen kodlarla oluşturabilirsiniz. Eğer raporlama kriterleriniz fazla ise filtreleme yada ADO yöntemi ile çok hızlı sonuçlar alabilirsiniz. (Forumda bu konuda birçok örnek bulunmaktadır.)
 
Hocam önerileriniz için çok teşekkürler...
Şöyle bir uygulama mantıklı olabilirmi?
Verileri ayrı bir dosyada tutmak ve raporlama için verial bağlantısı ile verileri çekmek...
 
Selamlar,

Veri yapınız uygunsa her türlü işlemi yapabilirsiniz.
 
Korhan hocam,

formulleri makro içine "evaluate" komutu ile almam çözüm gibi gözüküyor ancak tek bir hücre değilde bir aralığı nasıl alabilirim.
örnek:aşağıdaki makro komutlarına "Evaluate" nasıl uygulayabilirm.Çok teşekkürler,,,,

Range("M2").Select
ActiveCell.FormulaR1C1 = _
"=SUMIF(database!R2C[2]:R7000C[2],RC[-1],database!R2C[-3]:R7000C[-3])"
Range("N2").Select
ActiveCell.FormulaR1C1 = _
"=SUMIF(database!R2C[1]:R7000C[1],RC[2],database!R2C[-4]:R7000C[-4])"
Range("O2").Select
ActiveCell.FormulaR1C1 = _
"=SUMIF(database!R2C:R7000C,RC[2],database!R2C[-5]:R7000C[-5])"
Range("M2:O2").Select
Selection.AutoFill Destination:=Range("M2:O2000"), Type:=xlFillDefault
 
Selamlar,

Çoklu satırlar için tek seferde bu komutu uygulayamazsınız. Ancak döngü ile yapabilirsiniz. Fakat satır sayısı fazla ise bu da yavaşlamaya sebep olacaktır.
 
hocam sadece M kolonu için bir döngü oluşturmamız mümkünmüdür? Denemek istiyorum..

teşekkürler
 
Selamlar,

Bu işlem için iki alternatif sunuyorum.

Eğer M sütununda formül varsa ve hesaplanmış değerler ise 1. yöntem ile daha hızlı sonuç alabilirsiniz.

1. Yöntem; (With ve Value)

Kod:
Option Explicit
 
Sub FORMÜLLERİ_DEĞERE_DÖNÜŞTÜR_1()
    With Range("M1:M" & Cells(65536, "M").End(3).Row)
        .Value = .Value
    End With
    
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub


2. Yöntem; (Döngü ve Evaluate)

Kod:
Option Explicit
 
Sub FORMÜLLERİ_DEĞERE_DÖNÜŞTÜR_2()
    Dim X As Long
    
    For X = 1 To Range("M65536").End(3).Row
        If Cells(X, "M") <> "" Then
        Cells(X, "M") = Evaluate(Cells(X, "M").Formula)
        End If
    Next
    
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Hocam çok teşekkürler...elinize sağlık...her ikisinide deneyeceğim...
 
Geri
Üst