• DİKKAT

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

formülü makro koda çevirmek

Merhaba,

Aşağıdaki yapıyı kullanmalısınız.

Kod:
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    
    With Range("1.Hücre_Aralığı")
        .Formula = "=1.Formülünüz"
        .Value = .Value
    End With
    
    With Range("2.Hücre_Aralığı")
        .Formula = "=2.Formülünüz"
        .Value = .Value
    End With
    
    'Bu şekilde dilediğiniz kadar çoğaltabilirsiniz.
    
    Application.ScreenUpdating = True
End Sub
 
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False

With Range("j2:j" & Cells(Rows.Count, 1).End(3).Row)
.Formula = "=RC[-2]*RC[-1]"
.Value = .Value
End With

With Range("o2:o" & Cells(Rows.Count, 1).End(3).Row)
.Formula = "=IF(RC[-4]=""Euro"",RC[-5]*RC[-1],RC[-7]*RC[-6])"
.Value = .Value
End With

'Bu şekilde dilediğiniz kadar çoğaltabilirsiniz.

Application.ScreenUpdating = True
End Sub


Korhan hocam formüllerim yukarıda olduğu şekilde, sonuçta ikinci formül görevini yapmıyor, bu sutunda da ilk formül sonuçları gerçekleşiyor.
 
Korhan hocam, özür, formülde herhangi bir hata yokmuş, ben yanılmışım. İlginiz için teşekkür ediyorum Saygılar.
 
yapılan formüller makroda mı daha hızlı çalışor yoksa hücredemi bilen varsa cevaplayabilirmi
 
bana göre excellde daha hızlı ve kusursuz. ancak makroda tam anlamıyla yapılsaydı makro tartışalmaz olurdu..
uye olduğumdan bu yana öyle konular açtımkı üstesin fazlasıyla geldi sayın değerli hocalarmız arkadaşlarımız. onlar için basit olan bunu manasıyla yapadıkları gerçekten beni çok üzdü. eminimkı ben yeterınce anlatamadım aydınlatamadım onları.
 
Merhaba,

Siz veri girişi yaptıkça formülün çalışmasını istiyorsunuz. Ben konuyu detaylı incelemediğim için "Sayfanın Aktif Olma" durumunu önermiştim.

Aşağıdaki kod ile "B" sütununa veri girişi yaparak sonuçları görebilirsiniz.

D sütunundaki formülleri değere dönüştürdükten sonra B sütununa giriş yapıp deneyin.

Aşağıdaki kodu yine GELENLER sayfasının kod bölümüne #9 nolu mesajımda tarif ettiğim şekilde uygulayın. Diğer önerdiğim kodu silebilirsiniz.

Kod:
Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B3:B" & Rows.Count)) Is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    On Error GoTo Son
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    If Target <> "" Then
        Target.Offset(0, 2) = WorksheetFunction.SumIf([STOK!C:C], Target, [STOK!F:F])
    Else
        Target.Offset(0, 2) = ""
    End If
    
Son:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
 
merhaba,
korhan bey kodu tarif ettiğiniz gibi uyguladım sorunsuz kusursuz. tam istediğim gibi.
şaşkınlık içerisindeyım ve nasıl tşk edeceğimi bilemıyorum.

Sonsuz teşekkürlerimi sunarım
saygılarımla.
 
Merhaba Korhan Bey,
Çok özür dilerim sonradan Fark ettiğim minik bi sorun var. gelenler sayfasına giriş ve çıkış yapıldığında sorun yok. gelenler sayfasına stokta olan herhangi bi giriş yaptık metresi geldi, daha sonra stoktan o top numarası sılındığını var sayalım, gelenler sayfasında ki o top numarasına ait metre kalıcı olarak duruyor. ancak f2+enter yaptığımızda o top numarasına ait metreyi güncelliyor, 0 yapıyor. Buna da bir çözum bulanabilirmi.. formül mantığı gibi yani.
mutlu akşamlar dilerim.
 
Merhaba,

Excelde formüller dinamik olarak sonuç verir. Fakat makrolar bu şekilde çalışmazlar. Bir şekilde tetiklemek gerekir. Bu örnekte en son önerdiğim kodda bir hücreye veri girişi yapmanız gerekiyor. Doğal olarak diğer sayfayla bir bağlantısı yok. Bu sebeple diğer sayfadan bir kaydı sildiğinizde GELENLER sayfanızda bu veriye ait sonuçlar değişmiyor. Değişmesini istiyorsanız en kullanışlı yol GELENLER sayfasının aktif olma durumunu kullanmak olacaktır. Bu şekilde dosyanızın kasılmasını biraz olsun önlemiş olursunuz.

Son olarak;

#7 nolu mesajımda önerdiğim koduda GELENLER sayfasının kod bölümüne uygulayın. Yani GELENLER sayfasının kod bölümünde #7 nolu mesajımdaki kod ve #26 nolu mesajımdaki kod alt alta olmalıdır.

Bu işlem sonucunda GELENLER sayfasında B sütununa veri girdiğinizde toplamı otomatik güncellenecektir. Diğer sayfaya geçip bir kaydı sildiğinizde GELENLER sayfası bundan etkilenmeyecektir. Etkilenmesi için GELENLER sayfasını açmanız yeterli olacaktır.
 
Merhaba Korhan bey,
Söylediklerinizi Uyguladım. Başarılı sonuç aldım. #26 mesajınızda ki kodlara #7 mesajınızdaki hangi kodu eklersem... sayfa değiştiğimde. bu işlemi güncellemiş olurum. excelde bir kasılma oluyor. şirkette bu daha da çok olacaktır.#26 nolu mesajdaki kodlara sadece o bölümü dahil edebilirmisiniz. sizden çok rica ediyorum...
 
Merhaba,

#7 nolu mesajımdaki kodun tamamını sayfanızın kod bölümüne uygulamalısınız.
 
Merhaba Korhan bey,
istediğiniz gibi uyguladım. Herşey için sonsuz teşekkürlerimi sunarım.
Mutlu geceler dilerim.
 
Korhan bey, tekrardan merhaba,
Bu konuya verdiğiniz son kod işmei sayfaya girişlerde, sayfa kendini güncelliyor.
bu güncellemeyi gelenler sayfasına girişlerde ve çıkışlarda yapabilirmiyiz.
bu özellkten yararlanan 3 sayfa daha var. o sayfalarında güncel miktarları alması için sürekli olarak gir çık yapılacak. sayfa çıkışlarda da bu işlem olursa sorun kalmayacak diye düşünuyorum :)

tşk ederım iyi çalışmalar dilerim.
 
korhan hocam merhabalar
26 nolu mesajınızda ve sonraki mesajlarınızda anlattıklarınızı kendi dosyamda uygulamak istiyorum. Fakat formüllerin yazımı farklı görünüyor.
Her satırda 9 adet formülüm var. Bunlardan 3 adedi diğer sayfalardan veri alarak çalışıyor. 6 adedi ise mevcut satırdaki verilere göre çalışıyor. Mevcut haliyle satır sayısı arttığında çok yavaşlıyor.
Örnek dosyamı ekliyorum. Yardımcı olabilirseniz sevinirim.
 

Ekli dosyalar

Merhaba,

Korhan bey, tekrardan merhaba,
Bu konuya verdiğiniz son kod işmei sayfaya girişlerde, sayfa kendini güncelliyor.
bu güncellemeyi gelenler sayfasına girişlerde ve çıkışlarda yapabilirmiyiz.
bu özellkten yararlanan 3 sayfa daha var. o sayfalarında güncel miktarları alması için sürekli olarak gir çık yapılacak. sayfa çıkışlarda da bu işlem olursa sorun kalmayacak diye düşünuyorum :)

tşk ederım iyi çalışmalar dilerim.

GELENLER sayfasından çıkıştada formüllerin tazelenmesi gerekiyorsa "Deactivate" olayına kodları yazarak işlemi tamamlayabilirsiniz.

Kod:
Private Sub Worksheet_[COLOR=red]Deactivate[/COLOR]()
    Application.ScreenUpdating = False
 
    With Range("D3:D" & Cells(Rows.Count, 1).End(3).Row)
        .Formula = "=SUMIF(STOK!C[-1],RC[-2],STOK!C[2])"
        .Value = .Value
    End With
 
    Application.ScreenUpdating = True
End Sub

Ayrıca aşağıdaki linkten sayfa olaylarını incelemeniz daha sonraki çalışmalarınızda size fayda sağlayabilir.

Sayfaya Ait Kodlar ve Uygulama Yöntemleri (Resimli Anlatım)
 
Merhaba,

Siz formülleri sayfada hücre seçimine uygulamışsınız. Bu yöntem çok sağlıklı değildir. Çalışmanız bir müddet sonra aşırı derecede yavaşlar.

Çalışmanızı incelediğim kadarıyla sizin fomülleriniz D-E sütunlarıdaki değerlere göre sonuç üretiyor. Bu durumda sizin kodları hücre değişimine yazmanız daha uygun olur. Bu şekilde D-E sütunlarında hücreler değiştikçe sadece ilgili satıra ait formülleri uygulayarak çalışmanıza hız kazandırabilirsiniz.

#26 nolu mesajımdaki açıklamaları dikkatlice okuyup uygulamaya çalışın.

korhan hocam merhabalar
26 nolu mesajınızda ve sonraki mesajlarınızda anlattıklarınızı kendi dosyamda uygulamak istiyorum. Fakat formüllerin yazımı farklı görünüyor.
Her satırda 9 adet formülüm var. Bunlardan 3 adedi diğer sayfalardan veri alarak çalışıyor. 6 adedi ise mevcut satırdaki verilere göre çalışıyor. Mevcut haliyle satır sayısı arttığında çok yavaşlıyor.
Örnek dosyamı ekliyorum. Yardımcı olabilirseniz sevinirim.

Sayfanızın kod bölümüne aşağıdaki kodu uygulayın. Diğer kodu tamamen silin.

Kod:
Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Satır As Long, Formul As String, Son_Satır As Long
    
    If Intersect(Target, Range("D3:E" & Rows.Count)) Is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    On Error GoTo Son
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    Satır = Target.Row
    
    If Target <> "" Then
        Formul = Replace("=IF(D3>0,I3*J3,"""")", 3, Satır)
        Range("K" & Satır & ":K" & Satır).Value = Evaluate(Formul)
    
        Son_Satır = Sheets("Sevkiyat").Cells(Rows.Count, 1).End(3).Row
        Formul = Replace("=IF(D3>0,SUMPRODUCT((sevkiyat!A4:A10000=A3)*(sevkiyat!C4:C10000=D3)*(sevkiyat!D4:D10000=E3),(sevkiyat!H4:H10000)),"""")", 3, Satır)
        Formul = Replace(Formul, 10000, Son_Satır)
        Range("O" & Satır & ":O" & Satır).Value = Evaluate(Formul)
    
        Formul = Replace("=IF(D3>0,O3*J3,"""")", 3, Satır)
        Range("P" & Satır & ":P" & Satır).Value = Evaluate(Formul)
        
        Son_Satır = Sheets("imha").Cells(Rows.Count, 1).End(3).Row
        Formul = Replace("=IF(D3>0,SUMPRODUCT((imha!A4:A10000=A3)*(imha!C4:C10000=D3)*(imha!D4:D10000=E3),(imha!H4:H10000)),"""")", 3, Satır)
        Formul = Replace(Formul, 10000, Son_Satır)
        Range("Q" & Satır & ":Q" & Satır).Value = Evaluate(Formul)
    
        Formul = Replace("=IF(D3>0,Q3*J3,"""")", 3, Satır)
        Range("R" & Satır & ":R" & Satır).Value = Evaluate(Formul)
        
        Son_Satır = Sheets("reproses").Cells(Rows.Count, 1).End(3).Row
        Formul = Replace("=IF(D3>0,SUMPRODUCT((reproses!A4:A10000=A3)*(reproses!C4:C10000=D3)*(reproses!D4:D10000=E3),(reproses!H4:H10000)),"""")", 3, Satır)
        Formul = Replace(Formul, 10000, Son_Satır)
        Range("S" & Satır & ":S" & Satır).Value = Evaluate(Formul)
    
        Formul = Replace("=IF(D3>0,S3*J3,"""")", 3, Satır)
        Range("T" & Satır & ":T" & Satır).Value = Evaluate(Formul)
        
        Formul = Replace("=IF(D3<>"""",I3-O3,"""")", 3, Satır)
        Range("U" & Satır & ":U" & Satır).Value = Evaluate(Formul)
        
        Formul = Replace("=IF(D3<>"""",U3*J3,"""")", 3, Satır)
        Range("V" & Satır & ":V" & Satır).Value = Evaluate(Formul)
    
    Else
        
        Range("K" & Satır) = ""
        Range("O" & Satır & ":V" & Satır) = ""
    End If
    
Son:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
 
Korhan bey tekrar merhaba
verdiğiniz kodları denedim fakat istediğim gibi olmuyor
formüllerde D sütununu şart koşmam makro kullanmadan önceki kullanım alışkanlığımdan kaynaklanıyor. D sütunu ilk kayıt sonrasında bir daha kullanılmıyor.Formülleri buna göre değiştireceğim.

Formüllü hücreler mevcut haliyle değişik yerlerden tetikleniyor. Örneğin K hücresi I ve J hücrelerinin çarpımı ve sadece ilk kayıtta çalışması yeterli O,Q ve S hücreleri ise değerlerini diğer sayfalardan alıyor ve bu sayfalardaki kayıtlara döre değişiklik olabiliyor. Diğer formüllü hücrelerde yine farklı hücrelerin tetiklenmesi ile çalışıyor.
Yani satır üzerinde bir hücre belirtmek işimi görmüyor. Bütün formülleri satırdaki bir hücrenin değilde satırda herhangi bir hücrenin değişimi ile çalıştırabileceğim bir kod yazılabilir mi?
ilginize tşk ederım.
 
Merhaba,

Siz çalışmanıza hız kazandırmak istiyorsunuz. Bu sebeple kodları belli bir düzene göre yazıp kullanmanızda fayda var.

Kod içindeki aşağıdaki satırı silerseniz sayfada hangi hücre değişirse değişsin kod çalışır.

Kod:
If Intersect(Target, Range("D3:E" & Rows.Count)) Is Nothing Then Exit Sub
 
Korhan bey
verdiğiniz kodlar ve bilgiler doğrultusunda değişik denemeler yaptım fakat istediğim hızı sağlayacak sonuca ulaşamadım. sanırım sizin daha öncede ifade ettiğiniz formüllerdeki dinamikliği makroda yakalamaya çalışıyorumm fakat şu anki bilgim buna yeterli gelmiyor. Çalışmaya devam edeceğim.
Şimdiye kadarki yardımlarınız ve çabanız için teşekkürler
 
Korhan Bey,
Etopla için sizin belirttiğiniz kodları uyguladım, çok teşekkür ederim.
Satır sayısı artınca biraz yavaşlıyor, 50.000 Satırlık bir çalışmada hız çok fazla düşüyor, Hızlanması için ne yapılabilir. Bu konuda yardımcı olabilir misiniz.

Kod:
Sub Etopla()
    Application.ScreenUpdating = False

     İLK = Time
     With Range("D2:D" & Cells(Rows.Count, 1).End(3).Row)
        .Formula = "=SUMIF($A$2:$A$50000,A2,$C$2:$C$50000)"
        .Value = .Value
    End With
    Son = Time
    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
    "İşlem süresi ; " & Format((Son - İLK), "hh:mm:ss")
    
    Application.ScreenUpdating = True
End Sub


Merhaba,

Siz çalışmanıza hız kazandırmak istiyorsunuz. Bu sebeple kodları belli bir düzene göre yazıp kullanmanızda fayda var.

Kod içindeki aşağıdaki satırı silerseniz sayfada hangi hücre değişirse değişsin kod çalışır.

Kod:
If Intersect(Target, Range("D3:E" & Rows.Count)) Is Nothing Then Exit Sub
 
Geri
Üst