• DİKKAT

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

formülü makroya çevirme

spacebar

Altın Üye
Katılım
2 Temmuz 2009
Mesajlar
551
Excel Vers. ve Dili
office 2019 Türkçe
değerli üstadlarım merhaba.
L1 hücresinde bulunan formülü tüm sutuna uygulayacağım makroya nasıl çevirebilirim.
formülüm ; =YUVARLA(EĞER(A1<300;C1-D1;D1-C1);4)
yalnız sadece A sutununda değer olan satıra kadar uygulanmasını rica edeceğim. çünkü dosya boyutu çok büyüyor.
teşekkürler....
 

Ekli dosyalar

Aşağıdaki makroyu deneyiniz:

PHP:
Sub islem()
son = Cells(Rows.Count, "A").End(3).Row
For i = 3 To son
    If CDbl(Left(Cells(i, "A"), 3)) < 300 Then
        Cells(i, "L") = Cells(i, "C") - Cells(i, "D")
        Cells(i, "L") = Cells(i, "D") - Cells(i, "C")
    End If
Next
End Sub
 
üstad merhaba. ilginize teşekkür ederim. yalnız bir hata var. 300 den sonraki hesaplamayı yapmıyor bir de işlemi ters yapıyor.
 
kodu şu şekilde yapınca düzeldi sanırım.:

Kod:
Sub islem()
son = Cells(Rows.Count, "A").End(3).Row
For i = 3 To son
    If CDbl(Left(Cells(i, "A"), 3)) < 300 Then
        
        Cells(i, "L") = Cells(i, "c") - Cells(i, "d")
        Else
        Cells(i, "L") = Cells(i, "d") - Cells(i, "c")
    End If
Next
End Sub
 
Belirttiğiniz gibi Else ifadesini yazmayı unutmuşum :(
 
ben de bu sayede kodları düzenlemeyi öğreniyorum. üstad teşekkür ederim. ellerinize sağlık.
aynı zamanda öğrenmek için soruyorum. ben makroyu sayfanın aktif olmasına göre düzenledim. ( yani Private Sub Worksheet_Activate() ). Makro çok yavaş çalışıyor. sayfa donuyor. bunu nasıl önleyebiliriz. imkanı varmıdır. şöyle düşündüm: son dolu satır olan sayıyı bulmak için bu zamanı kaybediyor. bunu L1 hücresine =ARA(2;1/(A2:A65536<>"");A2:A65536) formülü yazıp dolu olan satırı bu formüle göre bulup makroyu da bu satır sayısına uygulanırsa bu sorun çözülürmü. teşekkür ederim.
 
Çok bilgim yok ama sanmıyorum. Sonuçta formül de işlem yapmak için zaman harcar.

Uzun sürmesinin sebebi sayfa her aktif olduğunda tüm satırların baştan sona kontrol edilmesidir. Bu şekilde olmasındansa düğmeyle vs istendiği zaman çalıştırmak daha uygun olur bence.

Kodun başına application.screenupdating = false ve sonuna application.screenupdating = true yaparak biraz hızlandırılabilir:

Makro hali:

PHP:
Sub islem()
Application.ScreenUpdating = False
son = Cells(Rows.Count, "A").End(3).Row
For i = 3 To son
    If CDbl(Left(Cells(i, "A"), 3)) < 300 Then
        Cells(i, "L") = Cells(i, "C") - Cells(i, "D")
        Cells(i, "L") = Cells(i, "D") - Cells(i, "C")
    End If
Next
Application.ScreenUpdating = True
End Sub

Sayfa kodu hali:

PHP:
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
son = Cells(Rows.Count, "A").End(3).Row
For i = 3 To son
    If CDbl(Left(Cells(i, "A"), 3)) < 300 Then
        Cells(i, "L") = Cells(i, "C") - Cells(i, "D")
        Cells(i, "L") = Cells(i, "D") - Cells(i, "C")
    End If
Next
Application.ScreenUpdating = True
End Sub
 
tamamdır üstad. teşekkür ederim. sağlıklı günler dilerim.
 
Geri
Üst