Çözüldü Scripting.Dictionary de Koşula Göre 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
Kod:
You must log in to view
(27 satır)

Yukarıdaki Kodlar ile ekteki dosyada Sayfa1 de iki sütunlu bir veride tek sütunu benzersiz halde diğer sütunu toplata biliyorum.
Sayfa2 deki gibi bir durum olursa Tarihe göre nasıl toplaya bilirim.

İki Tarih Arasında hangi ürünler varsa bu ürünlerin tutar Toplamlarını bulmak istiyorum.
 

Ekli dosyalar

Sayın Feyzullah teşekkür ederim.

Anlamak açısından teyidiniz alayım dedim, Kodların çalışma mantığı;

arr() bizim Scripting.Dictionary yi kullanarak verileri tutacağımız dizi
Liste de verilerimizin tamamını tanımladığımız dizi, Üç sütunda veri olduğu için (1 to son, 1 to 3) diye tanımladık.
Döngü oluşturarak Tarih ve Ay sütunlarını birleştirdik ve gun diye bir veri elde ettik
gun lerde benzersiz olanlarını Scripting.Dictionary ye yükledik
Yüklerken arr dizisinin elemanları olarak liste dizisindeki verileri atadık, gun verisi daha önce eklenmiş ise liste dizisinin 3. verilerini toplattık
İşlem bitince de arr dizisini yazdırdık.

Koşula göre toplatma işlemini nasıl yapabiliriz. Eklediğim dosyada ikinci sayfada ilk tarih ve son tarih kısımları var. Bu iki tarih arasında olanları toplatmak isteseydik If döngüsünü kodların hangi kısmında oluşturmamız gerekir. Sizin kodlarınızdan yola çıkarsak liste dizisini oluştururken tarih bu iki tarih arasında ise diziye ekle deyip, sonraki işlemleri aynen mi tekrarlayacaktık.

Birde olmayan bir veri ekleye bilir miyiz
Örneğin Tarih | Firma | Tutar başlıkları olsun.
Ben Firmaların Tutar toplamlarını alacam ve yanına kaç tane olduğunu yazdıracam. Yani belirtilen aralıkta A firmasından 5 tane var ve Tutarlarının toplamı 6000 ise sonuçta A firması | 5 | 6000 şeklinde bir veri oluşmasını istiyorum. bu durumu nasıl yaparız.

Anladığım kadarıyla Scripting.Dictionary de Key ve Item diye iki veri var, Item1, Item2 gibi bir tanımlama yapamıyoruz direk olarak.
 
Rica ederim.

arr() bizim Scripting.Dictionary yi kullanarak verileri tutacağımız dizi
Liste de verilerimizin tamamını tanımladığımız dizi, Üç sütunda veri olduğu için (1 to son, 1 to 3) diye tanımladık.
Döngü oluşturarak Tarih ve Ay sütunlarını birleştirdik ve gun diye bir veri elde ettik
gun lerde benzersiz olanlarını Scripting.Dictionary ye yükledik
Yüklerken arr dizisinin elemanları olarak liste dizisindeki verileri atadık, gun verisi daha önce eklenmiş ise liste dizisinin 3. verilerini toplattık
İşlem bitince de arr dizisini yazdırdık.

Üste alıntıda yazdıklarınız doğrudur.


Koşula göre toplatma işlemini nasıl yapabiliriz. Eklediğim dosyada ikinci sayfada ilk tarih ve son tarih kısımları var. Bu iki tarih arasında olanları toplatmak isteseydik If döngüsünü kodların hangi kısmında oluşturmamız gerekir. Sizin kodlarınızdan yola çıkarsak liste dizisini oluştururken tarih bu iki tarih arasında ise diziye ekle deyip, sonraki işlemleri aynen mi tekrarlayacaktık.

Koşullu toplama olayını tamamen atlamışım.
if koşulunu for satırının altından, end if kodunu next kodundan önce yazardım. Aşağıdaki kodu belirtiğim yere ekleyip sonraki işlemler dediğiniz gibi aynen olacaktı.

If CDate(liste(i, 1)) >= CDate(Range("G1")) And CDate(liste(i, 1)) < CDate(Range("G2")) Then

Birde olmayan bir veri ekleye bilir miyiz
Örneğin Tarih | Firma | Tutar başlıkları olsun.
Ben Firmaların Tutar toplamlarını alacam ve yanına kaç tane olduğunu yazdıracam. Yani belirtilen aralıkta A firmasından 5 tane var ve Tutarlarının toplamı 6000 ise sonuçta A firması | 5 | 6000 şeklinde bir veri oluşmasını istiyorum. bu durumu nasıl yaparız.

Dizi oluşturduğumuz için evet ekleyebilirsin.
Bu iş için aşağıdaki kodu kullanabilirsin.

VBA:
You must log in to view
(27 satır)
 

Ekli dosyalar

Sayın Feyzullah ve Sayın Ziynettin
Yardımlarınız ve bilgilendirmeleriniz için teşekkürler.

Merak ettiğim daha doğrusu onca okuduğum makalede rastlamadığım için aklımda soru işareti. Scripting.Dictionary de Key ve Item diye iki veri var, iki sütun gibi. Bu nesnede Key, Item1, Item2, Item3 gibi birşey yok mu. Yukarıdaki gibi ekstra bir dizi oluşturarak mı yapmamız gerek. Yada bu nesne gibi çalışan başka bir nesne var mı?

Esenlikler dilerim. İyi çalışmalar.
 
Feyzullah bey merhaba.

gun = liste(i, 1) & liste(i, 2) satır içindeki koşulları birleştirirken ayraç kullanmanız doğru sonuç alırsınız.

Bu şekilde kullanırsanız daha doğru sonuç olur. gun = liste(i, 1) & "|" & liste(i, 2)

@Ziynettin hocam, açıklama ve bilgilendirmeniz için teşekkür ederim. Normalde Scripting.Dictionary kodundan anlamam, Bu forumda sizin yazdığınız kodlardan feyz alarak cevapladım. Teşekkürler tekrardan hocam.
 
Sayın Feyzullah ve Sayın Ziynettin
Yardımlarınız ve bilgilendirmeleriniz için teşekkürler.

Merak ettiğim daha doğrusu onca okuduğum makalede rastlamadığım için aklımda soru işareti. Scripting.Dictionary de Key ve Item diye iki veri var, iki sütun gibi. Bu nesnede Key, Item1, Item2, Item3 gibi birşey yok mu. Yukarıdaki gibi ekstra bir dizi oluşturarak mı yapmamız gerek. Yada bu nesne gibi çalışan başka bir nesne var mı?

Esenlikler dilerim. İyi çalışmalar.

Ben bilerek yok, bende dizi ile oluşturulduğuna denk geldim hep. Bu konu da (Scripting.Dictionary) Sayın @Ziynettin hocamın bilgisine başvurmak daha dogru olacaktır, eğer var ise bende öğrenmiş olurum.
 
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