formülü hızlandırmak için...

Katılım
18 Temmuz 2008
Mesajlar
99
Excel Vers. ve Dili
2003
arkadaşlar mrb.2 değişkenli sayma için kullandığım kod...

Sub say()
Range("c2").Clear
[d2].Clear
For a = 1 To 5000
For b = Date - 365 To Date
If Cells(a, 1) = b And Cells(a, 2) = "Erkek" Then
Range("c2").Value = [c2] + 1
Else
End If
If Cells(a, 1) = b And Cells(a, 2) = "Kadın" Then
Range("d2").Value = [d2] + 1
Else
End If
Next
Next
End Sub



ancak satır sayısı arttıkça çok yavaşlıyor.ve for b = tarihleri değiştikçe yani zaman aralığı arttıkça dahada yavaşlıyor. formül olarak topla.çarpım ile yaptım ancak topla.çarpım ile ilgili pek kod bulamadım.yardımcı olursanız sevinirim...
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,421
Excel Vers. ve Dili
excel 2010
merhaba
kod çalışıyorsa yinede iyidir
5000*365=1.825.000 tur atıyor.
hayırdır ne arıyorsunuz bu şekilde? topla.çarpım veya düşeyara işinizi görmüyor mu?
 
Katılım
18 Temmuz 2008
Mesajlar
99
Excel Vers. ve Dili
2003
görüyor ama ondada şu sorun var.sayfayı her açtığımda sürekli formül hesaplama yapıyor ve sayfa donuyor yine dk kadar bekliyorum.biraz daha hızlı hesaplama olursa daha iyi olacak..
 
Katılım
18 Temmuz 2008
Mesajlar
99
Excel Vers. ve Dili
2003
bu arada topla.çarpım ile.... =TOPLA.ÇARPIM((A1:A5000<=BUGÜN())*(B1:B5000="Erkek"))-TOPLA.ÇARPIM((A1:A5000<=BUGÜN()-365)*(B1:B5000="Erkek"))

şeklinde..
 

Korhan Ayhan

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

Aşağıdaki kodu denermisiniz.

Kod:
Option Explicit
 
Sub BUL_SAY()
    Dim Tarih As Date, Bul As Range, Adres As String
    Dim Say_Erkek As Long, Say_Kadın As Long
    Application.ScreenUpdating = False
    [C2:D2].ClearContents
    For Tarih = (Date - 365) To Date
    Set Bul = [A:A].Find(Tarih, LookIn:=xlValues, LookAt:=xlWhole)
    If Not Bul Is Nothing Then
    Adres = Bul.Address
    Do
    If Cells(Bul.Row, 2) = "Erkek" Then Say_Erkek = Say_Erkek + 1
    If Cells(Bul.Row, 2) = "Kadın" Then Say_Kadın = Say_Kadın + 1
    Set Bul = [A:A].FindNext(Bul)
    Loop While Not Bul Is Nothing And Bul.Address <> Adres
    End If
    Next
    [C2] = Say_Erkek
    [D2] = Say_Kadın
    Set Bul = Nothing
    Application.ScreenUpdating = True
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Katılım
18 Temmuz 2008
Mesajlar
99
Excel Vers. ve Dili
2003
teşekkürler elinize sağlık
 
Üst