Çözüldü Dizi kodları ile Koşula göre Saydırma ve Toplama

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

KarincaZZ

Normal Üye
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhaba.

A4 ile Q60000 arasında verilerimiz bulunuyor.

=(ÇOKEĞERSAY($B$4:$B$60000;"="&B4;$D$4:$D$60000;"<="&D4;$G$4:$G$60000;"="&G4))+(ÇOKEĞERSAY($B$4:$B$60000;"="&B4;$D$4:$D$60000;"<="&D4;$K$4:$K$60000;"="&G4))

ve

=(ÇOKEĞERSAY($B$4:$B$60000;"="&B4;$D$4:$D$60000;"<="&D4;$G$4:$G$60000;"="&G4;$L$4:$L$60000;"=G"))

ve

=(ÇOKETOPLA($H$4:$H$60000;$B$4:$B$60000;"="&B4;$D$4:$D$60000;"<="&D4;$G$4:$G$60000;"="&G4))+(ÇOKETOPLA($I$4:$I$60000;$B$4:$B$60000;"="&B4;$D$4:$D$60000;"<="&D4;$K$4:$K$60000;"="&G4))

formüllerini dizi kodları ile kurgulayıp sonuca ulaşamadım. D Sütunu Tarih formatındadır.

SS1 = S1.Range("A1048576").End(xlUp).Row
Rng01 = S1.Range("A4:Q" & SS1).Value

İle Diziyi Tanımladım,

ReDim Snc01(1 To SS1, 1 To 1)

ile sonuç dizisini tanımladım.

gerisini bir türlü getiremedim, daha doğrusu yazdığım kodlar istediğim sonucu vermedi. Formüller ile bulduğum sonuçlar çıkmadı.

Örnek Dosya ektedir. İl satırda formüller bulunuyor, dosya boyutu büyümesin diye diğer hücrelerden formül silinmiş, değerler bırakılmıştır.

Yardımlarınızı bekliyorum.

İyi çalışmalar.
 

Ekli dosyalar

Çözüm
Merhaba Sayın @KarıncaZ .
Öncelikle forumumuza hoşgeldiniz diyeyim.

Belgenizin içeriği sanırım basketbol istatistikleriyle ilgili ve malesef bu tür mevzuları çok hazzettiğimi de söyleyemem.

Ancak örnek olması bakımından aşağıdaki kodu ABD_NBA sayfasının kod bölümüne (Option Explicit satırının altına)
yapıştırıp çalıştırırsanız, sırasıyla R, V, AB ve AC sütunlarındaki sonuçlar AG:AJ sütun aralığına yazdırılır.

Formüllerden görebildiğim kadarıyla belgenizdeki veriler üzerinden ÖZET TABLO oluşturularak da istediğiniz sonuçlara
ulaşılabilirmiş gibi görüyorum (denemedim doğrusu). Bu yönde denemeleriniz oldu mu acaba?
.
CSS:
You must log in to view content
(2 satır)
Formül ile yapılıp makro ile yapılamayan şeyi tarif etseydeniz daha hızlı ilerlerdik. Tam olarak ne yapılacak tarif ederseniz ( makro ile yapmak istediğiniz ~~formülün yaptığı ~~) yardımcı olabiliriz
Anladığım kadarıyla bir sayma işlemi? Şartlarını nedir?.
 
Merhaba Sayın cakarem.
Yapmak istediğim formülün yaptığını makro ile yapmak. Mümkünse Dizi kodlarıyla yada Scripting.Dictionary ile. Şuanda 60.000 satır var ve giderek artmakta. formüller ile yada döngüler ile hücre hücre karşılaştırarak yazdığım makro kodları ile çok uzun sürüyor.

Birden çok koşula göre Sayma ve Toplama işlemleri var sadece dosyada.
 
Merhaba Sayın cakarem.

Koşullu Saymaya Örnek;
S6 Hücresine;
=(ÇOKEĞERSAY($B$6:$B$60000;"="&B6;$D$6:$D$60000;"<="&D6;$G$6:$G$60000;"="&G6))

Koşullu Toplamaya Örnek:
AB6 hücresine
=(ÇOKETOPLA($H$6:$H$60000;$B$6:$B$60000;"="&B6;$D$6:$D$60000;"<="&D6;$G$6:$G$60000;"="&G6))
 
Merhaba Sayın @KarıncaZ .
Öncelikle forumumuza hoşgeldiniz diyeyim.

Belgenizin içeriği sanırım basketbol istatistikleriyle ilgili ve malesef bu tür mevzuları çok hazzettiğimi de söyleyemem.

Ancak örnek olması bakımından aşağıdaki kodu ABD_NBA sayfasının kod bölümüne (Option Explicit satırının altına)
yapıştırıp çalıştırırsanız, sırasıyla R, V, AB ve AC sütunlarındaki sonuçlar AG:AJ sütun aralığına yazdırılır.

Formüllerden görebildiğim kadarıyla belgenizdeki veriler üzerinden ÖZET TABLO oluşturularak da istediğiniz sonuçlara
ulaşılabilirmiş gibi görüyorum (denemedim doğrusu). Bu yönde denemeleriniz oldu mu acaba?
.
CSS:
You must log in to view content
(26 satır)
 
Çözüm
Merhaba Sayın Ömer BARAN, Hoşbulduk.

Eklediğim Dosya örnek olsun diye. Asıl çalıştığım dosya ekteki yevmiye çalışmasıdır. Firmaya ait veriler olduğu için hesap isimlerini ve açıklamaları farklılaştırarak ekledim. 2018 yılına kadar 286336 satır mevcut. Burada Koşula göre saydırma ve koşullara göre toplama işlemlerini hızlı bir şekilde yapmamız gerekiyor. Linkte inceleye bilirsiniz.

2000_2018_Yevmiye_FULL.rar

Diziler ve Scripting.Dictionary yi öğrenmem, mantığını tam olarak kavramam gerekiyor. Kendimce izlediğim bir yol. Yapmak istediğimi farklı dosyalar ve veriler ile sormak, kendi dosyama uyarlamak, böylelikle oluşan kodun yaptığı tüm işlemlere hakim olmak, herhangi bir hata oluştuğunda bilerek ve hemen müdahale edebilmek.

Esas dosyamızda da, Yıla Göre, İki Tarih arasında, Hesap Koduna göre, Saydırıp Toplatmam gerekiyor.

Özet tablo ve dilimleyici kullanmaya çalıştık ancak, Ana hesap Ara Hesaplarda Mizanın oluşması sıkıntı oldu. Yapamadık. Tüm hesapların kıvrımları yani " . " ile ayrılan kısımları aynı değil. Kimi 3 kıvrım kimi 4 kıvrım. bazen 6 kıvrıma kadar çıkıyor. Oluşturduğumuz dosyaların her türlü kullanıma uygun olması için kodlar ile çalışmak daha iyi geliyor bize.

Yardımlarınız için çok teşekkürler.

Örnek dosya içinde kusura bakmayın. Dediğim gibi sadece örnek olsun diye.
 
Estağfurullah Sayın @KarıncaZ . Kusurluk bir şey yok.
Sadece bahis/maç vs bu tür konuları pek sevmediğimi belirttim.

Bu tür işlemlerde neden tüm tablo satırlarına değer yazdırmak istiyorsunuz onu anlayamadım.
Benzersiz bir kriter listesi sayfasına, ilgili sayfadaki veriler özetlenebilir gibi düşünüyorum.
Mevcut yapıda tüm veri satırlarına veri yazılıyor ve bu değerler de tekrarlayan (kriterler aynı olduğu için) değerler.
Tabi belgeyi kullanacak olan sizsiniz ve işleyişe ilişkin bir tasarımınız var. O kısmı bilemiyorum.

Koddaki 1 To 4 kısmının sonuç dizisinin sütun sayısı oduğu malumdur.
Tüm satırlara sonuç yazılmasını öngördüğünüzden; mevcut veri yığını 1'den başlayarak herbir veri satırı için en baştan en sona kadar taranmakta.
Yani 10.000 satırlık veri için 10.000 x 10.000 adet işlem anlamına geliyor.

Oysa örneğin, tablonuza, öncelik sırasına göre artan/azalan/A-Z/Z-A neyse artık bir dizi sıralama işlemi uygulayıp,
döngüleri belli noktada kesmek kodun çalışma hızını oldukça etkileyecektir.
.
 
Söylediklerinizde haklısınız.
Hazırladığımız her tablo, Mesleğimizde Finansal tablo diye geçiyor ve bir standardı var. Sabit satır ve Sütun başlıkları var. Detaylar da her firmanın yapısına ve işleyişine göre değişiyor.
Muhasebe programlarından aldığımız verilerde hangi sırayla veri geldiyse hem onun korunması gerekiyor, hemde raporladığımız tarih aralığı gelen verinin en sonunda ise oradan da veriyi alması gerekiyor, buda tüm tabloyu taramamızı gerektiriyor. Çünkü evrak tarihi ile kayıt tarihi arasındaki farklar. Program kayıt sırasına göre numara veriyor, bu numaraların sırası ile tarihler arasındaki farklarında denetimlerde tespit edilmesi gerekiyor. Çünkü yasal olarak bir işlemin 10 gün içinde yasal kayıtlara geçirilmesi gerekiyor. Sonradan geçmiş döneme kayıt atılması durumunda da programın vermiş olduğu yevmiye numara sırası ile tarih sırası arasındaki farkları da tespit etmemiz gerekiyor.

Dizi kodlarında ve Scripting.Dictionary kullanımında henüz yeniyim, Scripting.Dictionary ile benzersizleri listeleyip borç alacakları vb sütunları toplaya biliyorum ama tarihe göre koşullu toplatamıyorum, mantığı tam kavrayamadım. Yeterince de örnek bulamadım.
Dizi kodlarında ise döngüler kullanarak koşullar uyguluyor ve toplatıp saydırıyorum ama herhalde bir yerde yanlış yapıyorum çünkü sonucu bulup yansıtması uzun sürüyor. Tek yılın verileriyle çalışmak biraz daha kolay ancak, linkini paylaştığım çalışmada olduğu gibi birden çok yılın toplu değerlendirmelerinde hem veri yığını çoğalıyor hem de işlemler uzun sürüyor.

Bu iki yöntemi öğrenmek istememdeki neden de, bunların bilgisayarda ram de çalıştığı ve bu nedenle hızlı sonuç verdiği için.

Yardımlarınızla da kendimizi geliştiriyoruz.

Dizilerde merak ettiğim bir konu var, bir değeri direk dizi ile karşılaştıra bilir miyiz
{=TOPLA(EĞER((($B$4:$B$20000)=B4)*(($D$4:$D$20000)<=D4)*(($K$4:$K$20000)=G4);$H$4:$H$20000))}
dizi formülünde olduğu gibi, ($B$4:$B$20000) bir dizi, bu diziden B4 e eşit olanlar,($D$4:$D$20000) bir dizi, bu diziden D4 de eşit ve küçük olanları,($K$4:$K$20000) bir dizi, bu diziden G4 e eşit olan satırların $H$4:$H$20000 ü toplama gibi.

Kod:
You must log in to view content
(2 satır)

şeklinde bir dizi tanımlayıp bu dizinin 2. sütunundaki değerlerden şuna eşit, 4. sütundaki değerlerden şuna eşit olanlardan 7. sütundaki değerleri topla diye bileceğimiz bir yöntem var mı?

Dizi tanımladığımızda , excel hücreleri gibi formülde dizi elemanlarını kullana bilir miyiz?

Tekrar teşekkürler.
 
Sayın @KarıncaZ .

Umarım yanlış anlamadım.
Bildiğim kadarıyla tanımladığınız diziyi Excel'in yerleşik işlevlerini kullanarak oluşturacağınız formüllerde kullanamazsınız.

İsterseniz eklediğiniz gerçek belgedeki satır sayısını biraz azaltarak devam etmekte yarar var.
İşlem sonuçlarını AnaHesaplar_Mizan isimli sayfaya mı yazdırmak istiyorsunuz?
Kriter olarak kullanılacak;
-- ilk ve son tarih AnaHesaplar_Mizan sayfası B1 ve B2 hücreleri,
-- İkincil kriter yine aynı sayfada A sütunundaki hesap kodları oluyor sanırım.
Peki alt hesaplar (Yevmiye E sütunu) için de bir işlem öngörüyor musunuz?

Sıralama için söylediklerim mesele değil aslında, işlemi hızlandıracak sıralamalar (belki filtrelemeler de olabilir) yaptırılıp kod çalıştırılır,
işlem bitimiyle birlikte veriler A sütunundaki sıra numarasına göre tekrar sıralanır (ilk haline döndürülür, yani sıralama mesele olmaz) ya da
iki tarih arası kriterine göre veri yığını filtrelenip, oluşturulacak yeni bir sayfaya aktırılır, kod da bu veriler üzerinde çalıştırılır.

Yevmiye sayfasına baktığımda, yevmiye no 0 (sıfır) olanlar var (1877 adet) ,
Tarih sırasına aykırı veri sayısı ise 9.084 .

Herneyse; belge ve işlemle ilgili bence biraz daha detay bilgiye ve
Mizan sayfasında formülle dahi olsa ulaşılması gereken sonuçların örneklendirilmesine ihtiyaç var diye düşünüyorum.

.
 
Sayın @Feyzullah örnek kodlarınız için teşekkürler.
Sayın @Ömer BARAN ilginiz için teşekkürler.
Nihayetinde ulaşmak istediğimiz sonucu anlatayım. Ekte bu işlemler için hazırladığımız ve halen üzerinde çalıştığımız dosyaları da paylaşıyorum.

Hareket noktamız firmaların yevmiye kayıtları.
Bu kayıtlardan hareketle denetimcinin ihtiyaç duyduğu verileri alabilmesini sağlamak. Bu verilere ulaşması için standart tabloların hazırlanması ve özellikle iki tarih arası mizanın belirlenmesi gerekiyor. Ana hesaplar ve diğer mali tabloları oluşturan veriler mizandan çıkıyor çünkü.

İlk sorun Ana hesap ve Ara Hesapların belirlenmesi. Bu konuda biz yılın en sonundaki mizanı alıp Hesap kodları ve Hesap isimlerini kullanıyoruz. Yılın en sonunda alınan mizanda o güne kadar açılmış tüm hesaplar var çünkü. Dolayısıyla kayıtlarda olupda listede olmayan bir durumla karşılaşmıyoruz. Tek sıkıntı aşağıdaki durum
ÖRNEK
100KASA HS.
100.01MERKEZ KASA HS.
100.01.01MERKEZ TL KASASI HS.
100.01.02MERKEZ USD KASASI HS.
Yevmiye kayıtlarında 100.01.01 hesap var toplaya biliyoruz Borcunu ve Alacağını. Muhasebede Ara hesap dediğimiz 100.01 hesap yok, bunu sadece mizanda bulabiliyoruz. Hesap kıvrımlarına göre Ara hesaplar bazen 3-4 tane olabiliyor bazen dahada fazla. Burada yardımcı sütunlar kullanarak birşekilde zor da olsa ara hesapların da toplamlarını alıyoruz.


Ara Hesap Ana Hesap ve Kullanılan hesapları belirleyebilmek ve renklendire bilmek için ekteki dosyayı kullanıyoruz. Mizanı yapıştırınca kullanıcının belirlediği renklere göre Ana hesap ve Ara hesapları renklendiriyoruz. Sonrasında toplamlarını alabiliyoruz.

Toplama kriterleri sizinde belirttiğiniz gibi İlk tarih ile Son Tarih, diğeri de mizan hesabı. Tabi yukarıda belirttiğim sorun mevcut orada da. Mizanda Ara hesaplar var ancak Yevmiyede olmadığı için toplamlarını ayrıca almamız gerekiyor.
108DİĞER HAZIR DEĞERLER
108.01Kredi Kartlı Satışlar
108.01.001Ziraat Bankası TRY
108.01.001.01Ziraat Bankası .... N. Hs.
108.01.001.01.01Ziraat Bankası 0000001 Nolu Post
108.01.001.01.01Ziraat Bankası 0000002 Nolu Post
gibi bir mizanda

108
108.01
108.01.001
108.01.001.01 hesaplarının toplamlarını bizim bulmamız gerekiyor. Tüm ara hesaplar kendisinin alt hesaplarının toplamı.

Eklediğim asıl dosyada yapmak istediğimiz yevmiyeden mizanın birden fazla koşula göre oluşturulması. Ara hesapların toplamını belirlemek için ikinci bir çaba harcıyoruz. Sonrası için ekteki çalışmayı kullanıyoruz. Mizandan Gelir Tablosunun oluşturulması, Bilançonun oluşturulması, USD tutulan kayıtlar varsa, GT nin ve Bilançonun bu rakamlar üzerinden yada yıl sonu kuruna dayalı olarak hazırlanmasını sağlaya biliyoruz. Sonraki aşama ise Rasyolar dediğimiz firmanın genel kabul görmüş analiz sonuçlarına göre değerlendirilmesi.
 

Ekli dosyalar

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Konuyu başlatan
Normal Üye
Katılım
Konu Bilgi
Durum
Çözüldü 
Forum
Excel Makro Soruları
Başlangıç tarihi
Son yanıt tarihi
Cevaplar
11
Üst