• DİKKAT

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

Bu Formüller Makro olabilir mi..!

Katılım
10 Ekim 2010
Mesajlar
1,469
Excel Vers. ve Dili
2010 Türkçe
Merhaba,
Aşağıdaki kodları makro koda çevirmemiz mümkün mü acaba. 3 ayrı formül çalışmamda 10mb yer kaplamaktadır. Ve çalışmasında sizin de bildiğiniz gibi kasma ve yavaşlamaya sebep vermektedir.
Aşağıda yazılı ilk iki kod B3:B aralığına veri girildiğinde, o veriye ait değerleri göstermektedir.
B:3 Aralığına veri girilmediğinde formül uygulanan yer boş kalmaktadır. Makroda da bu şekilde olması gerekiyor. Yani B3:B veri girildiğinde bilgiler getirilsin. Veri silindiğinde ise bilgilerde silinsin.
3 formül ise, bu iki formül arasındaki gelen değere göre bilgi vermektedir. Bu 3 formülü makro koda çevirebilir miyiz? Sayın Korhan beyin makro koda çevirmek için anlatımlarını uyguladım ama sonuç başarısız. Sanırsam profesyonel yardıma ihtiyacı var konunun.

Kod:
=EĞER(B3<>"";ETOPLA(STOK!A:A;B3;STOK!F:F);"")

=EĞER(B3<>"";ETOPLA(GELENLER!A:A;B3;GELENLER!D:D);"")

=EĞER(VE(F3<>"";F3=G3);" Üretim Tamamlanmıştır.";EĞER(G3<F3;METNEÇEVİR(F3-G3;"#.##0,0")&" MT Üretim Olmuştur.";EĞER(G3>F3;METNEÇEVİR(G3-F3;"#.##0,0")&" MT Sevk Edilmiş Kumaş Var.";EĞER(VE(F3="";G3="");"";"?"))))
 
1. ve 2. sorularınıza göre uyarlayınız.

"Sheets("Stok").Range("g1") = sumact" olan bölümü istediğiniz hücreye göre uyarlayınız

If Range("b3") <> "" Then
sumact = Application.SumIf(Sheets("Stok").Range("a:a"), Sheets("Stok").Range("b3"), Sheets("Stok").Range("f:f"))
End If
Sheets("Stok").Range("g1") = sumact
 
Merhaba Uğur Bey,
İlginiz için teşekkür ederim. Lakin ben bu cevabınızdan pek bir şey anlayamadım. Kusura bakmayın. Bunu nasıl yapabilirim biraz açıklama ekleme olasılığınız var mı acaba.
 
Merhaba, Uğur Bey,
B3:B aralığına tip kodu giriyorum. F ve G sütunlarına farklı iki sayfadan (Gelenler ve Stok) sayfasından B3:B aralığına yazılan o tipin Metre toplamı gelmektedir. H3:H aralığında ise F ve G sütunları arasındaki kıyaslamaya göre notunu vermektedir. Bunu Makroda yapmak istiyorum. Formül yaklaşık 10 MB kadar yer kaplamaktadır. Umarım açıklayıcı olmuştur.
İyi akşamlar dilerim.
 

Ekli dosyalar

Aşağıdaki kodu deneyiniz.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B3:B" & Rows.Count)) Is Nothing Then Exit Sub
    
    On Error Resume Next
    
    Application.EnableEvents = False
    
    Range("F3:H" & Rows.Count).ClearContents
    
    Son = Cells(Rows.Count, 2).End(3).Row + 1
    With Range("F3:F" & Son)
        .Formula = "=IF(B3<>"""",SUMIF(STOK!A:A,B3,STOK!F:F),"""")"
        .Value = .Value
    End With
    With Range("G3:G" & Son)
        .Formula = "=IF(B3<>"""",SUMIF(GELENLER!A:A,B3,GELENLER!D:D),"""")"
        .Value = .Value
    End With
    With Range("H3:H" & Son)
        .Formula = "=IF(AND(F3<>"""",F3=G3),"" Üretim Tamamlanmıştır."",IF(G3<F3,TEXT(F3-G3,""#.##0,0"")&"" MT Üretim Olmuştur."",IF(G3>F3,TEXT(G3-F3,""#.##0,0"")&"" MT Sevk Edilmiş Kumaş Vardır."",IF(AND(F3="""",G3=""""),"""",""?""))))"
        .Value = .Value
    End With
    Application.EnableEvents = True
End Sub
 
Merhaba Korhan Bey,
İlginiz için teşekkür ederim. Çok harika olmuş. Zaten kaleminizden yazılan kodların hepsi böyle.
Stok ve Gelenler sayfasında hareketlenme olduğunda, bu hareketlilik F ve G sütunlarına yansıma için Ben B3:B aralığına F2+ENTER yapmam gerekiyor ya da veriyi yeniden yazmam gerekiyor. Bunun da önüne geçmek için, fikrimce sayfaya her girişte B3:B aralığına (F2+ENTER) veya sayfaya her girişte sayfanın yenilenmesi gerekmekte olduğunu düşünüyorum. Eğer bu bahsettiğimde olursa kendi kararımca formülün dinamikliği ile kodun çalıştırılması arasında bir şeylerin kalmayacağı kanaatindeyim.

İyi çalışmalar dilerim.
Saygılarımla.


Kodun son hali.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B3:B" & Rows.Count)) Is Nothing Then Exit Sub
    
    On Error Resume Next
    
    Application.EnableEvents = False
    
    Range("F3:H" & Rows.Count).ClearContents
    
    Son = Cells(Rows.Count, 2).End(3).Row + 1
    With Range("F3:F" & Son)
        .Formula = "=IF(B3<>"""",SUMIF(STOK!A:A,B3,STOK!E:E),"""")"
        .Value = .Value
    End With
    With Range("G3:G" & Son)
        .Formula = "=IF(B3<>"""",SUMIF(GELENLER!A:A,B3,GELENLER!D:D),"""")"
        .Value = .Value
    End With
    With Range("H3:H" & Son)
        .Formula = "=IF(AND(F3<>"""",F3=G3),"" Üretim Tamamlanmıştır."",IF(G3<F3,TEXT(F3-G3,""#.##0,0"")&"" MT Üretim Olmuştur."",IF(G3>F3,TEXT(G3-F3,""#.##0,0"")&"" MT Sevk Edilmiş Kumaş Vardır."",IF(AND(F3="""",G3=""""),"""",""?""))))"
        .Value = .Value
    End With
    Application.EnableEvents = True
End Sub
 
Merhaba Korhan Bey,
Vaktiniz olduğunda konuyu yeniden inceleye bilir misiniz?
Teşekkür ederim İyi çalışmalar dilerim.
 
Merhaba Korhan Bey,
7 nolu mesajdaki yoruma göre düzenleme yapıla bilir mi? Vaktiniz olduğunda zaman ayırabilirseniz sevinirim.
 
Merhaba,

Aynı kodu aynı sayfanın aktif olma olayına yazarsanız sorununuz çözülür.

İki kodu birden kullanırsınız.

Kod:
Private Sub Worksheet_Activate()
    On Error Resume Next
    
    Application.EnableEvents = False
    
    Range("F3:H" & Rows.Count).ClearContents
    
    Son = Cells(Rows.Count, 2).End(3).Row + 1
    With Range("F3:F" & Son)
        .Formula = "=IF(B3<>"""",SUMIF(STOK!A:A,B3,STOK!F:F),"""")"
        .Value = .Value
    End With
    With Range("G3:G" & Son)
        .Formula = "=IF(B3<>"""",SUMIF(GELENLER!A:A,B3,GELENLER!D:D),"""")"
        .Value = .Value
    End With
    With Range("H3:H" & Son)
        .Formula = "=IF(AND(F3<>"""",F3=G3),"" Üretim Tamamlanmıştır."",IF(G3<F3,TEXT(F3-G3,""#.##0,0"")&"" MT Üretim Olmuştur."",IF(G3>F3,TEXT(G3-F3,""#.##0,0"")&"" MT Sevk Edilmiş Kumaş Vardır."",IF(AND(F3="""",G3=""""),"""",""?""))))"
        .Value = .Value
    End With
    Application.EnableEvents = True
End Sub
 
Merhaba,
Korhan Bey, gerçekten çok haklısınız ama bu sayfada her iki başlıkla başlayacak kodlar da olacak, bu kodları bir modüle alsam, ne gibi değişiklik yapmam gerekiyor. Kodları birleştirin demeyin, Çünkü diğer ekleyeceğim kodları da siz yazdınız. Sizin kodları değiştirmek için 1 hafta kodları okumak gerekiyor. Sizden ricam aşağıdaki kodları modüle göre uyarlaya bilir misiniz.


Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B3:B" & Rows.Count)) Is Nothing Then Exit Sub
    
    On Error Resume Next
    
    Application.EnableEvents = False
    
    Range("F3:H" & Rows.Count).ClearContents
    
    son = Cells(Rows.Count, 2).End(3).Row + 1
    With Range("F3:F" & son)
        .Formula = "=IF(B3<>"""",SUMIF(STOK!A:A,B3,STOK!E:E),"""")"
        .Value = .Value
    End With
    With Range("G3:G" & son)
        .Formula = "=IF(B3<>"""",SUMIF(GELENLER!A:A,B3,GELENLER!C:C),"""")"
        .Value = .Value
    End With
    With Range("H3:H" & son)
        .Formula = "=IF(AND(F3<>"""",F3=G3),"" Üretim Tamamlanmıştır."",IF(G3<F3,TEXT(F3-G3,""#.##0,0"")&"" MT Üretim Olmuştur."",IF(G3>F3,TEXT(G3-F3,""#.##0,0"")&"" MT Sevk Edilmiş Kumaş Vardır."",IF(AND(F3="""",G3=""""),"""",""?""))))"
        .Value = .Value
    End With
    Application.EnableEvents = True
End Sub
 
Merhaba,

Modüle uyarlamak sorun değil. Bu durumda kodları buton ile çalıştıracaksınız.
 
Merhaba abi,
Sanırım en güzel olacak şey, B3:B aralığında veri olan hücrelere sayfaya her girişte F2+ENTER yapılması, forumdaki F2+ENTER ile çalışan kodların nerdeyse tamamını denedim, istediğim hızda çalışmıyor veya sayfada titremeler oluyor, donuyor vs. durumlar söz konusu.
Bu durumu profesyonel biçimde çözüme götüre bilir miyiz?
 
Merhaba Korhan Bey,
Verdiğiniz bilgiler için çok teşekkür ederim. Tam istediğim gibi dinamik bir şekilde çalışmasını verdiğim mücadele sonucunda sizin aktardığınız bilgiler (kodlar) sayesinde çözdüm. Sayenizde minicikte olsa bişeyler öğreniyoruz.
Herşey için çok teşekkür ederim

İyi çalışmalar dilerim.


Saygılarımla.
 
Merhaba Korhan Bey,
Aşağıdaki formülü, Makro kodların arasına, kod olarak yerleştirebilir misiniz? Makro kaydet yöntemi ile bir kaç yöntem denedim bazılarından sonuç aldım. Ama excel çalışmasına zararlar vererek kapanıyor. Anladığım kadarıyla bilmeden yanlış bir şeyler yapıyorum.
Şimdiden çok teşekkür ediyorum.


Formül
Kod:
=EĞER(EHATALIYSA(DÜŞEYARA($C3;ŞARTLAR!$B$3:$C$65536;2;0));"";DÜŞEYARA($C3;ŞARTLAR!$B$3:$C$65536;2;0))



Makro Kod
Kod:
Private Sub Worksheet_Activate()
Application.EnableEvents = False
    Range("F3:H" & Rows.Count).ClearContents
    Son = Cells(Rows.Count, 2).End(3).Row + 1
    With Range("F3:F" & Son)
        .Formula = "=IF(B3<>"""",SUMIF(STOK!A:A,B3,STOK!E:E),"""")"
        .Value = .Value
    End With
    With Range("G3:G" & Son)
        .Formula = "=IF(B3<>"""",SUMIF(GELENLER!A:A,B3,GELENLER!C:C),"""")"
        .Value = .Value
    End With
    With Range("H3:H" & Son)
        .Formula = "=IF(AND(F3<>"""",F3=G3),"" Üretim Tamamlanmıştır."",IF(G3<F3,TEXT(F3-G3,""#.##0,0"")&"" MT Üretim Olmuştur."",IF(G3>F3,TEXT(G3-F3,""#.##0,0"")&"" MT Sevk Edilmiş Kumaş Vardır."",IF(AND(F3="""",G3=""""),"""",""?""))))"
        .Value = .Value
    End With
End Sub
 
Geri
Üst