Soru For döngüsü çok yavaşlattı. Sebebi ne Olabilir?

Katılım
12 Ağustos 2021
Mesajlar
6
Excel Vers. ve Dili
vba
Altın Üyelik Bitiş Tarihi
12-08-2022
VBA da çok yeniyim. Modeller bakarak bir formül yazdım ama hücreler arası geçişi çok yavaşlattı. Bir arkadaş yardımcı olabilirse çok sevinirim.
Program da yapmak istediğim şey şu şekilde. Bir sayfa da öğrenci isimleri ve bunların deneme doğru yanlış ve netleri var. Hücreler doğru yanlış girilmeden netler hesaplansın istemiyorum. Doğru yanlış girilince netler ve bu netlerin toplamları hesaplansın istiyorum. Çok ağır gidince son toplamı yarım bıraktım.

Private Sub CommandButton1_Click()
Sayfa1.Select

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
Dim k As Integer


For i = 4 To 53
For k = 0 To 500 Step 21
If Sayfa4.Cells(k + 5, i) <> "" Then
Sayfa4.Cells(k + 5, i) = Sayfa4.Cells(k + 3, i) - Sayfa4.Cells(k + 4, i) / 3
Else
Sayfa4.Cells(k + 5, i) = ""
End If

If Sayfa4.Cells(k + 8, i) <> "" Then
Sayfa4.Cells(k + 8, i) = Sayfa4.Cells(k + 6, i) - Sayfa4.Cells(k + 7, i) / 3
Else
Sayfa4.Cells(k + 8, i) = ""
End If

If Sayfa4.Cells(k + 11, i) <> "" Then
Sayfa4.Cells(k + 11, i) = Sayfa4.Cells(k + 9, i) - Sayfa4.Cells(k + 10, i) / 3
Else
Sayfa4.Cells(k + 8, i) = ""
End If

If Sayfa4.Cells(k + 14, i) <> "" Then
Sayfa4.Cells(k + 14, i) = Sayfa4.Cells(k + 12, i) - Sayfa4.Cells(k + 13, i) / 3
Else
Sayfa4.Cells(k + 14, i) = ""
End If

If Sayfa4.Cells(k + 17, i) <> "" Then
Sayfa4.Cells(k + 17, i) = Sayfa4.Cells(k + 15, i) - Sayfa4.Cells(k + 16, i) / 3
Else
Sayfa4.Cells(k + 17, i) = ""
End If

If Sayfa4.Cells(k + 20, i) <> "" Then
Sayfa4.Cells(k + 20, i) = Sayfa4.Cells(k + 18, i) - Sayfa4.Cells(k + 19, i) / 3
Else
Sayfa4.Cells(k + 20, i) = ""
End If


If Sayfa4.Cells(k + 23, i) <> "" Then
Sayfa4.Cells(k + 23, i) = Sayfa4.Cells(k + 21, i) - Sayfa4.Cells(k + 22, i) / 3
Else
Sayfa4.Cells(k + 23, i) = ""
End If

Sayfa4.Cells(k + 21, i) = Sayfa4.Cells(k + 3, i) + Sayfa4.Cells(k + 6, i) + Sayfa4.Cells(k + 9, i) + Sayfa4.Cells(k + 12, i) + Sayfa4.Cells(k + 15, i) + Sayfa4.Cells(k + 18, i)
Next k
Next i


End Sub
 

muratboz06

Destek Ekibi
Destek Ekibi
Katılım
23 Mart 2017
Mesajlar
568
Excel Vers. ve Dili
Office365 TR
Sayfada herhangi bir hücreyi seçtiğinizde makro tetikleniyor, dolayısıyla yavaşlaması gayet normal.
Örnek dosya paylaşırsanız yardımcı olunabilir.
 

ismailem

https://asrisaadetyolu.blogspot.com/
Katılım
5 Haziran 2012
Mesajlar
102
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
19-10-2023
Sub nootomatik()
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.DisplayStatusBar = False
.EnableEvents = False
.Calculation = xlManual
End With
End Sub

Sub otomatik()
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.DisplayStatusBar = True
.EnableEvents = True
.Calculation = xlAutomatic
End With
End Sub

Private Sub CommandButton1_Click()
call nootomatik
Sayfa1.Select

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
Dim k As Integer


For i = 4 To 53
For k = 0 To 500 Step 21
If Sayfa4.Cells(k + 5, i) <> "" Then
Sayfa4.Cells(k + 5, i) = Sayfa4.Cells(k + 3, i) - Sayfa4.Cells(k + 4, i) / 3
Else
Sayfa4.Cells(k + 5, i) = ""
End If

If Sayfa4.Cells(k + 8, i) <> "" Then
Sayfa4.Cells(k + 8, i) = Sayfa4.Cells(k + 6, i) - Sayfa4.Cells(k + 7, i) / 3
Else
Sayfa4.Cells(k + 8, i) = ""
End If

If Sayfa4.Cells(k + 11, i) <> "" Then
Sayfa4.Cells(k + 11, i) = Sayfa4.Cells(k + 9, i) - Sayfa4.Cells(k + 10, i) / 3
Else
Sayfa4.Cells(k + 8, i) = ""
End If

If Sayfa4.Cells(k + 14, i) <> "" Then
Sayfa4.Cells(k + 14, i) = Sayfa4.Cells(k + 12, i) - Sayfa4.Cells(k + 13, i) / 3
Else
Sayfa4.Cells(k + 14, i) = ""
End If

If Sayfa4.Cells(k + 17, i) <> "" Then
Sayfa4.Cells(k + 17, i) = Sayfa4.Cells(k + 15, i) - Sayfa4.Cells(k + 16, i) / 3
Else
Sayfa4.Cells(k + 17, i) = ""
End If

If Sayfa4.Cells(k + 20, i) <> "" Then
Sayfa4.Cells(k + 20, i) = Sayfa4.Cells(k + 18, i) - Sayfa4.Cells(k + 19, i) / 3
Else
Sayfa4.Cells(k + 20, i) = ""
End If


If Sayfa4.Cells(k + 23, i) <> "" Then
Sayfa4.Cells(k + 23, i) = Sayfa4.Cells(k + 21, i) - Sayfa4.Cells(k + 22, i) / 3
Else
Sayfa4.Cells(k + 23, i) = ""
End If

Sayfa4.Cells(k + 21, i) = Sayfa4.Cells(k + 3, i) + Sayfa4.Cells(k + 6, i) + Sayfa4.Cells(k + 9, i) + Sayfa4.Cells(k + 12, i) + Sayfa4.Cells(k + 15, i) + Sayfa4.Cells(k + 18, i)
Next k
Next i
call otomatik
End Sub

'Bu şekilde bir deneyip aradaki farkı kıyaslayınız.
 
Katılım
12 Ağustos 2021
Mesajlar
6
Excel Vers. ve Dili
vba
Altın Üyelik Bitiş Tarihi
12-08-2022
Cevap için çok teşekkürler. Yine sayfa4 te değer girerken aynı titreşimi veriyor. Yine bakma imkanınız olursa sevinirim olmazsa da sağlık olsun
 

ismailem

https://asrisaadetyolu.blogspot.com/
Katılım
5 Haziran 2012
Mesajlar
102
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
19-10-2023
Kodlaınızı module aktarınız. Oluşturmak istediğiniz kodları bir butona atayınız. Hesaplamasını istediğinizde en son butona tıklayarak hesaplama yaparsınız. Her değişiklikte komutların çalıştırılmasına gerekte yok. İhtiyaçta yoktur. Bütün veri girişlerinizi yaptıktan sora hesapla butonuna basmanız yeterli olacaktır. hesapla butonu oluşturdum.
 

Ekli dosyalar

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Ayrıca belirtmek isterim ki IF sorgularınızı da boş yere meşgul ediyorsunuz.

If Sayfa4.Cells(k + 5, i) <> "" Then 'Eğer boş değilse
Sayfa4.Cells(k + 5, i) = Sayfa4.Cells(k + 3, i) - Sayfa4.Cells(k + 4, i) / 3 'Bu işlemi yap, bir hesap yap,
Else
Sayfa4.Cells(k + 5, i) = "" 'Boşsa bu satırı yap, yani yine BOŞ bırak.
End If

If Sayfa4.Cells(k + 5, i) <> "" Then Sayfa4.Cells(k + 5, i) = Sayfa4.Cells(k + 3, i) - Sayfa4.Cells(k + 4, i) / 3

Şeklinde kullanınız. Tüm IF-THEN sorgularınızı bu bağlamda gözden geçiriniz.

Hatta IF-THEN sorgularınız zaten bir ahenk içerisinde ilerliyor.
Son eklenmiş dosyadaki kodların doğru çalıştığınız kabul ederek, çok uzun kodlar yerine daha kısa şekilde aşağıdaki gibi kullanabilirsiniz.

C++:
Sub hesapla()
el
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim m As Integer

For i = 4 To 53
    For k = 0 To 500 Step 21
        For x = 5 To 23
            If Sayfa4.Cells(k + x, i) <> "" Then Sayfa4.Cells(k + x, i) = Sayfa4.Cells(k + x - 2, i) - Sayfa4.Cells(k + x - 1, i) / 3
            Sayfa4.Cells(k + 21, i) = Sayfa4.Cells(k + 3, i) + Sayfa4.Cells(k + 6, i) + Sayfa4.Cells(k + 9, i) + Sayfa4.Cells(k + 12, i) + Sayfa4.Cells(k + 15, i) + Sayfa4.Cells(k + 18, i)
        Next x
    Next k
Next i
oto
End Sub
 
Katılım
12 Ağustos 2021
Mesajlar
6
Excel Vers. ve Dili
vba
Altın Üyelik Bitiş Tarihi
12-08-2022
Bu son yazdığınız formülde hata var ama daha basit ve çalışan bir formül yazdım. Matematik öğretmeni olmama rağmen bu denklemlere yabancı olmamdan kaynaklı denklem kurmak döngüyü anlamakta epey zorlandım. Yine de uzun işlem yapmış olabilirim ama böyle öğrenilecek herhalde. Şuan yardımlarınızla elimde çalışan ve çalışırken rahatsız etmeyen bir yer oldu. Sizlere çok teşekkürler. Gözünüzü korkutmak gibi olmasın diğer sayfalara geçeceğim. Yazdığım kısmın en son hali
Sub hesapla()
el
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim m As Integer

For i = 4 To 53
For k = 0 To 500 Step 3
m = k * 7

If Sayfa4.Cells(k + 3, i) <> "" Then Sayfa4.Cells(k + 5, i) = Sayfa4.Cells(k + 3, i) - Sayfa4.Cells(k + 4, i) / 3
If Sayfa4.Cells(m + 3, i) <> "" Then Sayfa4.Cells(m + 21, i) = Sayfa4.Cells(m + 3, i) + Sayfa4.Cells(m + 6, i) + Sayfa4.Cells(m + 9, i) + Sayfa4.Cells(m + 12, i) + Sayfa4.Cells(m + 15, i) + Sayfa4.Cells(m + 18, i)
If Sayfa4.Cells(m + 3, i) <> "" Then Sayfa4.Cells(m + 22, i) = Sayfa4.Cells(m + 4, i) + Sayfa4.Cells(m + 7, i) + Sayfa4.Cells(m + 10, i) + Sayfa4.Cells(m + 13, i) + Sayfa4.Cells(m + 16, i) + Sayfa4.Cells(m + 19, i)
If Sayfa4.Cells(m + 3, i) <> "" Then Sayfa4.Cells(m + 23, i) = Sayfa4.Cells(m + 21, i) - Sayfa4.Cells(m + 6, i) / 3
Next k
Next i
oto
End Sub
 

ismailem

https://asrisaadetyolu.blogspot.com/
Katılım
5 Haziran 2012
Mesajlar
102
Excel Vers. ve Dili
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
19-10-2023
Sub hesapla()
el
Dim i, j, k, m As Integer
For i = 4 To 53
For k = 0 To 500 Step 3
m = k * 7
If Sayfa4.Cells(k + 3, i) <> "" Then Sayfa4.Cells(k + 5, i) = Sayfa4.Cells(k + 3, i) - Sayfa4.Cells(k + 4, i) / 3
If Sayfa4.Cells(m + 3, i) <> "" Then
Sayfa4.Cells(m + 21, i) = Sayfa4.Cells(m + 3, i) + Sayfa4.Cells(m + 6, i) + Sayfa4.Cells(m + 9, i) + Sayfa4.Cells(m + 12, i) + Sayfa4.Cells(m + 15, i) + Sayfa4.Cells(m + 18, i)
Sayfa4.Cells(m + 22, i) = Sayfa4.Cells(m + 4, i) + Sayfa4.Cells(m + 7, i) + Sayfa4.Cells(m + 10, i) + Sayfa4.Cells(m + 13, i) + Sayfa4.Cells(m + 16, i) + Sayfa4.Cells(m + 19, i)
Sayfa4.Cells(m + 23, i) = Sayfa4.Cells(m + 21, i) - Sayfa4.Cells(m + 6, i) / 3
End If
Next k
Next i
oto
End Sub 'Böyle de olabilir.
 
Katılım
5 Kasım 2006
Mesajlar
601
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
Merhaba altın üye olmadığım için dosyayı inceleyemedim.Neden bir dizitanımlanıp o diziye veriler alınıp kriteelerde başka bir diziye alınıp sonuç toptan sayfaya aktarılmıyor.Gördüğüm kimse yapmamış böyle yanlış görmediysem.Dediğim uygulanırsa roket gibi olur :)
 
Katılım
12 Ağustos 2021
Mesajlar
6
Excel Vers. ve Dili
vba
Altın Üyelik Bitiş Tarihi
12-08-2022
Her bilgi ayrı bir şey katıyor. Ben bu konularda acemiyim ancak incelediklerimi anlayabildiğim ölçüde uygulayabiliyorum. Şuan için yol uzunda olsa sonuca gitme yeterli oluyor. Bakan arkadaşlara da bunu en uygun şekilde yapın demek uygun olmaz. Ne kadar yardımcı olabilirlerse hepsine teşekkür. Dediğiniz dizi yazma zaman alma belki baştan yazma anlamına gelebileceği için öyle bir istekte bulunma durumumuz yok. Dosyayı görseydiniz belki sizden isterdik :). Belki işlem fazlalığı olmuş olabilir ama şuan hızımda problem yok gibi. İyi çalışmalar
 
Katılım
5 Kasım 2006
Mesajlar
601
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
Mesela 10.mesajdaki kodu diziye çevirmek zor değil.53.sütuna kadar döngü kurulmuş ve 500.satıra kadar satır var ve 3.erli olarak artıyor.Rada ifler var.500 e kadar olupta ifler fazla sağlanmazsa sorun olmz ama if koşulu çok sağlanıpta mesela 20bine kadar satır olursa ozaman anlarsınız dizi kıymetini abey :)
Neyse kolay gelsin benimki sadece bir görüştü ve ben genel olarak dizi ile çalıştığım için ve yavaş çalışıyor diye konu başlığı olunca fikir veemesi amacıyla yazmıştım.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,317
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Dosyanızı harici bir siteye yükleyip linkini forumda paylaşırsanız altın üye olmayanlar dosyanızı inceleyip çözüm önerilerini paylaşabilirler.
 
Üst