formülü makroya çevirme

Katılım
2 Temmuz 2009
Mesajlar
542
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

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
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
 
Katılım
2 Temmuz 2009
Mesajlar
542
Excel Vers. ve Dili
office 2019 Türkçe
ü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.
 
Katılım
2 Temmuz 2009
Mesajlar
542
Excel Vers. ve Dili
office 2019 Türkçe
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
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Belirttiğiniz gibi Else ifadesini yazmayı unutmuşum :(
 
Katılım
2 Temmuz 2009
Mesajlar
542
Excel Vers. ve Dili
office 2019 Türkçe
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.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Ç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
 
Katılım
2 Temmuz 2009
Mesajlar
542
Excel Vers. ve Dili
office 2019 Türkçe
tamamdır üstad. teşekkür ederim. sağlıklı günler dilerim.
 
Üst