Soru Dosyada Yanlış Formülize ve Hızlandırabilme

dengeceteris

Altın Üye
Katılım
21 Aralık 2019
Mesajlar
192
Excel Vers. ve Dili
Office 2016
Altın Üyelik Bitiş Tarihi
15-06-2025
Sevgili Üstadlarım:

Ekte bir dosyam var. Bu dosyanın muhteviyatı bitince özellikle mali müşavirlik yapan arkadaşlar için geçici veya kurumlar vergisi hesaplamada kullanışlı olacağına inandığım bir dosya onun için de biter bitmez yararlı olması ümidiyle burada yayımlayacağım. Bu dosyanın aslında büyük kısmı bitti. Ama ben başlangıçta bir kaç noktada eksikliklerim var onun için zorlandığım kısmını buraya aldım.

Bu dosyada MİZAN1 diye isimlendirdiğim sayfa ister veri okutarak isterse direkt copy-paste yaparak aldığım ham verilerden oluşmaktadır. Ham verim mesela 1000 satırda çalışırken 5 bin li 10 binli ham verilerde çalışmıyor hatalı yeri tespit edemedim ve yeterince hızlı çalıştıramadım. Onun için bu iki sorunu halletmeye çalışıyorum.

-MİZAN MODÜLÜ-içinde kendimce bir şeyler yazdım.

1. Verileri MİZAN1 sayfasına aldıktan sonra HAZIRLA butonuna basıyorum. Bu buton öncelikle sayfanın DÜZENLE modülünden yapısını, düzenini, yazı karakteri vb ayarları düzenliyor.

2. İkinci aşamada aşağıda ki düşeyara formülü yazdım ama daha kısa satırlarda çalışırken uzunlarda çalışmadı. Aşağıda yapmaya çalıştığım şeyleri umarım anlatabilmişimdir. Büyük oran da da yaptım ama bu dosyada 5 adet MİZAN sayfası var. Çok büyük yapılı dosyalar değil her bir sayfada ortalama 3-5 bin satır ham veri. Bunu hem çalıştırmakta zorlanıyorum. Hem de MİZAN1 makrosu 10-12 saniye kadar sürüyor. (Son aşamada bir filtreleme yapıyor)

If s1.Cells(x, 1) <> "" Then
s1.Cells(x, 39) = Wf.IfError(Application.VLookup(CInt(Left(s1.Cells(x, 1), 3)), s2.Range("A3:C1000").Value, 3, 0), "")


3. Üçüncü olarak bazı kriterler verdim.Daha önce 39. sütuna çekmeye çalıştığım verileri "AKTİF", "PASİF" vb bir kriter olarak aldım. ve MİZAN1 sayfasında bir kodun karşılığı eğer "AKTİF" ise "E" sütunu"F" sütunundan büyük olmak zorunda ; değilse eğer 9.sütuna "Ters" Yazsın.

4. Eğer bir kodun karşılığı "PASİF" ise "F" sütunu "E" sütunundan büyük olmak zorunda ; değilse "Ters" yazsın

5. Eğer bir kodun karşılığı "A.DÜZENLEYİCİ" ise ve "F" sütunu "E" sütunundan büyük olmak zorunda ; değilse "Ters" yazsın

6. Eğer bir kodun karşılığı "P.DÜZENLEYİCİ" ise ve "E" sütunu "F" sütunundan büyük olmak zorunda ; değilse "Ters" yazsın

7. Eğer bir kodun karşılığı "GELİR" ise ve "F" sütunu "E" sütunundan büyük olmak zorunda ; değilse "Ters" yazsın

8. Eğer bir kodun karşılığı "GİDER" ise ve "E" sütunu "F" sütunundan büyük olmak zorunda ; değilse "Ters" yazsın

Devamı yapmak istediklerim de modül içinde var.

ANAMİZAN sayfasında ise yaptıklarım MİZAN sayfalarında ki verileri sıralı bir şekilde ETOPLA formülü ile buraya getirmekden ibaret. Bunları:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) başlangıcı ile yazdım. ama bu sayfam kapalı ve ben userform üzerinden textbox ile bir işlem yaptığım zaman bu ANAMİZAN sayfasını da etkileyen hücreler var. Ama ben bu sayfaya girip herhangi bir girip çıkmadığım zaman bu devreye girmiyor. Onun için formülle dizayn ettim. ama bir yolu varsa bunu tekrar vba ile yazmak isterim.

Saygılarımla...
 

Ekli dosyalar

dengeceteris

Altın Üye
Katılım
21 Aralık 2019
Mesajlar
192
Excel Vers. ve Dili
Office 2016
Altın Üyelik Bitiş Tarihi
15-06-2025
Excel Üstadlarından birinin yol gösterme ihtimali var mı acaba..
 

dengeceteris

Altın Üye
Katılım
21 Aralık 2019
Mesajlar
192
Excel Vers. ve Dili
Office 2016
Altın Üyelik Bitiş Tarihi
15-06-2025
Merhabalar;
Yazmış olduğum konuda bir cevap veren olmadı. Onun için kendim yazmaya çalışıyorum artık bir noktaya kadar geldim ama yazdığım formülün aşağı da kısmı hata veriyor. Düzeltmeme yardımcı olabilir misiniz ?

If s1.Cells(x, 42) = 1 And s1.Cells(x, 43) > 0 Or s1.Cells(x, 43) = "" Or s1.Cells(x, 43) = 0 Then
s1.Cells(x, 9) = ""
Else
s1.Cells(x, 9) = "Ters Hesap"
End If
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
If s1.Cells(x, 42) = 1 And s1.Cells(x, 43) > 0 Or s1.Cells(x, 43) = "" Or s1.Cells(x, 43) = 0 Then

Bu satırda doğru sorguyu yapamıyor olabilirsiniz.
And ve Or ları parantez kullanarak düzeltebilirsiniz.
 
Üst