Soru Filtreleme sonrası, makro çalıştırıldığında; tutarlar niye değişmektedir?

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,519
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR

Değerli Dostlar;


Hayırlı Cuma'lar.
Nakit ya da Banka Ekstresine göre ödemesi yapılmış harcamalar; H (Durumu) sütununda "Ödendi" yapıldığında, koşullu biçimlendirme ile farklı bir renk oluyor.


 

Sayın Korhan Ayhan ve Ziynettin'in kodları ile G (Tutar) sütununda ödemesi yapılan tutarın önüne (-) simgesi konulmaktadır.


 

Yaptığım kayıtlar sonrası "Ödendi" yazılı bazı kayıtların başında (-) simgesi olup olmadığını denetlemek için; önce Veri /Filtre - Ödendi – Tamam ve sonra da "Eksi Yap" makrosunu çalıştırdıktan sonra, Veri /Filtre – Tümünü Seç’e tıklandığında:

"Ödendi" satırlarındaki gerçek harcama tutar rakamlarının değiştiğini ve aynı tutarda 10-15 kaydın alt alta sıralandığını görmekteyim.

Tüm kayıtların düzeltilmesi çok yorucu olmaktadır.

Soruna ilişkin düşünce, görüşlerinizi öğrenmek ve yardım almak istiyorum.


NOT: Gerçek kayıtlar "GelirGiderKayıt2" sayfasındadır.


 
 
 
 
 

Ekli dosyalar

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,519
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
GelirGiderKayıt sayfası, yukarıda değinilen tespitler; makro çalıştırıldıktan sonraki hatalı işlemlerin görüntüleridir.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,325
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba Selim Bey,

Kodun hızlı çalışması için dizi yöntemi kullanmıştım. Bu haliyle filtre işleminde kullanımı uygun değildir.

Kodun başına filtre kaldırma kodu eklersek hızından birşey kaybetmemiş olur.

C++:
Option Explicit

Sub Eksi_Yap()
    Dim Veri As Variant, Son As Long, X As Long
    
    On Error Resume Next
    ActiveSheet.ShowAllData
    On Error GoTo 0
    
    Son = Cells(Rows.Count, 1).End(3).Row
    Veri = Range("G2:H" & Son).Value
    ReDim Liste(1 To UBound(Veri), 1 To 1)
    
    For X = 1 To UBound(Veri)
        If Veri(X, 2) = "Ödendi" And Veri(X, 1) > 0 Then
            Liste(X, 1) = Veri(X, 1) * -1
        ElseIf Veri(X, 2) = "Ödenmedi" Or Veri(X, 2) = Empty Then
            Liste(X, 1) = Abs(Veri(X, 1))
        Else
            Liste(X, 1) = Veri(X, 1)
        End If
    Next X
    
    Range("G2").Resize(X - 1) = Liste
    
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,519
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Sayın Korhan Ayhan,


Üstadım; gününüz aydınlık, neşeniz sağlığınız yerinde, kazancınız bol ve her şey gönlünüzce olsun.

Bankalardan ekstreler geldiğinde, H sütununda "Ödenmedi" kaydı olanı, "Ödendi" yaptığımda G (tutar) satırındaki bedelin başına otomatik olarak (-) gelmesi için, koda ekleme yapabilir misiniz?

Hakkınızı nasıl ödeyeceğim bilmiyorum. Allah sizlerden razı olsun.

En içten sevgi ve saygılarımı sunarım.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,325
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba Selim Bey,

İşlem yaptığınız satırda otomatik değişim için aşağıdaki kodu sayfanızın kod bölümüne uygulayınız.

"H" sütununda "Ödendi" seçimi yaptığınızda "G" sütunu eksi değere dönüşecektir.

C++:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Son
    If Intersect(Target, Range("H2:H" & Rows.Count)) Is Nothing Then Exit Sub
    Call Eksi_Yap
Son:
End Sub
 

assenucler

Altın Üye
Katılım
19 Ağustos 2004
Mesajlar
3,519
Excel Vers. ve Dili
Ofis 365 TR 64 Windows 11 Home Single Language x64 TR
Sağ olun, var olun Korhan Bey.
 
Üst