Çözüldü Scripting.Dictionary, Hücre Değerini İçeriyorsa 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

Ekteki dosyada Yevmiye dökümünden, Mizan oluşturmaya çalışıyorum.
İki tarih arasında mizandaki değerleri toplata bildim ancak Ana hesap ve Ara Hesap kodları Yevmiyede olmadığı için toplatamadım.

HESAP KODUHESAP ADI
Yevmiyede Yok ( Ana Hesap )100KASA HESABIHesap Kodu İle Başlıyorsa Toplanacak
Yevmiyede Yok ( Ara Hesap )100.01MERKEZ KASA HESABIHesap Kodu İle Başlıyorsa Toplanacak
Yevmiyede Var ( Alt Hesap )100.01.01MERKEZ TRY KASA HESABIToplata biliyorum

Yevmiye defterinde olanlar yukarıdaki gibi.
Hesap Kodu İle Başlıyorsa Toplanacak yazdıklarımı toplatamadım. Önce Yevmiyede var olanları toplatacaz. Sonra ara hesapları toplatacaz, en son da Ana hesapları toplatacaz. Ben bir türlü yapamadım.

Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(38 satır)

Kullandığım kod bu. Mizandaki Kullanılan hesaplar Yevmiyede olduğu için toplata biliyorum ancak diğer hesapları toplatamadım birtürlü.

Yardımlarınızı bekliyorum.

Esenlikler dilerim. İyi çalışmalar.
 

Ekli dosyalar

Merhaba
Konu biraz teknik olduğu için yapmak istediğimi formüllerle çözümünü ekte paylaşıyorum.
Yardımcı sütunlar aracılığıyla yapılabiliyor ancak hesap kıvrımları arttıkça işlem formüller ile çözülemez hale geliyor.
 

Ekli dosyalar

Merhaba Sayın @KarıncaZ .

Yanlış düşünmüyorsam aşağıdaki gibi sonuç alınabilir.
Yalnız dikkat edeceğiniz husus; YEVMİYE sayfasındaki hesap kodlarının tümünün MİZAN sayfasında da yer aldığından emin olun.

Ben şöyle bir yöntem uyguladım; YEVMİYE sayfasındaki Hesap Kodlarını,
oluşturduğum kopya yevmiye sayfasında sağ tarafta MİZAN 'da olması gerektiği gibi ANA/İLK ALT/SON ALT hesap şeklinde tekrarsız
oluşturdum, ardından da bu listeyi MİZAN sayfası A sütununa yapıştırdım (bu kısım da kodlanabilir tabi ama ben toplam aldırma işlemine
odaklandığım için o kısımla uğraşmadım)

Ardından da kodu aşağıdaki şekilde değiştirerek (kırılım adeti 3 olduğundan 3 adet Scripting.Dictionary nesnesi oluşturarak)
çalıştırdığımda sonuç aldığımı sanıyorum (yol gösterici olması bakımından sadece BORÇ sütununa yönelik olarak elbette).

.
CSS:
Görüntülemek için giriş yapmanız gerekmektedir.
(43 satır)

.
 

Ekli dosyalar

Merhaba Sayın Ömer BARAN
İlginiz için teşekkürler.

Yevmiye sayfasındaki tüm hesaplar Mizan sayfasında kesinlikle var. Mizandaki tüm tüm alt hesaplarda Yevmiyede var. Sadece Mizandaki Ana ve Alt Hesaplar Yevmiyede yok.

Her mizan üç kırılımlı olmuyor. Hatta aynı mizanda bir hesap 3 kırılımlı bir hesap 5 kırılımlı diğer hesap 8 kırılımlı olabiliyor. Hepsi için geçerli bir çözüm bulmamız gerekiyor. Belirttiğiniz çözüm de yardımcı sütunlar oluşturmak zorlaşabilir.

Aklımda bir çözüm var ama ben yapamadım. Şöyleki Scripting.Dictionary de Key kısmını Mizandanki değerlerden alıp, Item kısmına da toplam alırken, Key ile başlıyorsa topla diyebilirsek çözüm gerçekleşiyor. Kaç kırılımlı olursa olsun her ara hesaptan bir tane var ve o ara hesabı içeren alt hesapların toplamı olacağından doğru sonucu verecektir.

Scripting.Dictionary kullanımında yeni olduğum için, Key ile başlıyorsa topla diyemedim kodlarda. like gibi bir operatör kullanıla bilir ama dediğim gibi acemiyim denedim ama yapamadım.
 
Sayın @KarıncaZ .

Belgenizde gördüğüm durum farklı malesef.
Eklediğim belgeye bakar mısınız?
Verilen tarih aralığına göre, Mizan sayfası K sütununda Yevmiye'de olup Mizan'da olmayan hesap kodları listelenir.
Ayrıca bundan önceki cevabımda verdiğim koddaki hususa (3'lü Scripting.Dictionary) gerek olmadığını da fark ettim.
Kod aşağıdaki şekliyme de işlem görüyor durumda (ayrıca, olan/olmayan tespiti için K sütunuyla ilgili söylediğim husus eklendi)

İLE BAŞLIYORSA dediğiniz husus aşağıdaki satırlarda hallediliyor.
d(a(i, 3)) = d(a(i, 3)) + a(i, 6) ' ALT HESAP
d(Split(a(i, 3), ".")(0) & "." & Split(a(i, 3), ".")(1)) = d(Split(a(i, 3), ".")(0) & "." & Split(a(i, 3), ".")(1)) + a(i, 6) ' İKİNCİL HESAP
d(Split(a(i, 3), ".")(0)) = d(Split(a(i, 3), ".")(0)) + a(i, 6) ' ANA HESAP

İşlemin uygulandığı belgeyi de ekleyeyim (Mizan sayfasındaki hesap kodları orijinal haliyle duruyor)

.
CSS:
Görüntülemek için giriş yapmanız gerekmektedir.
(53 satır)
 

Ekli dosyalar

Moderatörün son düzenlenenleri:
Sayın Ömer BARAN
Belgenizi inceledim.

Durumu şöyle izah edeyim. Eklediğim dosya sitede daha önce sorduğum sorudaki çalışmanın sadece iki yılı. Bu nedenle Mizanda olan hesaplardan yevmiyede olmaya bilir, Mizanda vardır ancak iki tarih aralığında o hesap çalışmamıştır bu nedenle mizana değer gelmeye bilir yani 0 olabilir. İsterseniz 2001 den 2018 e kadar olan çalışmayı dosya yükleme sitesine eklemeyi deneyeyim oradan dediğim net olarak çıkar.

Muhasebedeki işleyiş şöyle, Önce mizanda hesap açılır, açılan bu hesaplar ile kayıt yapılır, bu sebeple yevmiyede olup mizan da olmayan bir hesabın olması mümkün değil. ( Bilerek yapılan manuel müdahaleler hariç.) Tespit etmiş olduğunuz durum bundan kaynaklanıyor.

Kodlarınız istediğim gibi çalışıyor. Farklı kırılımlarda Hesaplama yapmıyor.
JVPD0B.webp


Farklı kırılımlar için Split yerine dizideki elemanın uzunluğuna göre belirleme yapabilir miyiz. Uzunluk( LEN ) diye bir formül var, Hücre değerinin uzunluğunu bulup soldan o uzunlukta veriyi alıp, toplatma yapabilir miyiz? Resimde olduğu gibi bir kıvrım ekleyince diğerlerini hesapladı bir ara hesabı hesaplamadı.

Örneğin : LEN(d(i,1)) diye Scripting.Dictionary nin Key değerinin uzunluğunu bulsak. Yevmiye defterinde de bu değere uyanları Item de toplatsak olur mu. Key değerlerini Mizandan alıcaz, zaten hesap kodları benzersiz. Item değerlerini Yevmiye sayfasından. Yevmiye dede Her Key ile başlayanları toplatıcaz.

Mizan hesapları tam olarak dosyayı yeniden ekledim.
 

Ekli dosyalar

Son açıklamalarınız hariç olmak üzere;
önceki cevabımdaki cümle dikkatten kaçmış sanırım.

Ben Mizan'da olan Yevmiye'de olmayanlar var DEMEDİM.
Yevmiye'de olup Mizan'da olmayanlar var dedim.

Eklediğim belgenin K sütununa listelenen hesap kodları, Yevmiye'de olup Mizan'da olmayanlar.
EĞERSAY formülüne bakarsanız durum anlaşılacaktır.

Tarih aralığını genişletip kodu çalıştırırsanız örneğin 120.01.16 hesap kodu Yevmiye de var, Mizan'da yok.
Belgedeki kod'da yer alan aşağıdaki kırmızı satırın altına yeşil olanı da eklemek yerinde olur.

S2.Range("K2:K" & S2.Cells(Rows.Count, "K").End(3).Row).Sort S2.[K1], 1
S2.Range("K2:K" & S2.Cells(Rows.Count, "K").End(3).Row).RemoveDuplicates Columns:=1

.
 
Sayın Ömer BARAN
Mizan Hesaplarını da kısmen aldığımdan. Son eklediğim dosyada Mizanı tam olarak ekledim. Dosyanın bir kısmını aldığım için bir önceki sonuç. Muhasebedeki işleyip anlattığım gibi. Gerçekte yevmiyede olupta mizanda olmayan bir hesap mümkün değil. Kısmi dosya yüklemesinden kaynaklı bir durum. Mizanı düzeltip yani tüm hesapları alıp önceki mesajıma ekledim. Durum düzelmiş olmalı.
 
Bence uygun bir hücreye kırılım adetini sayı olarak yazıp,
Split işlemini de küçük bir döngüye alıp, kriter ve değerleri bu kırılım adetine göre döngüyle oluşturup toplama yapılabilir.

Kırılım sayısı dışında sanıyorum bir sıkıntı yok, doğru mudur?
Adım adım gitmek için soruyorum. Buraya kadar işlem tamam mıdır?

.
 
Evet Sayın Ömer BARAN , kırılım dışında toplama mantığı doğru.
Kırılım ne olursa olsun 8 kırılıma kadar Ana hesap alt hesap tespiti yapan bir kod var. Hücreleri renklendiriyor.
Hesap kodu B sütununda olacak şekilde aşağıdaki kodlar ile Kullanılan hesap renksiz diğer hesaplar farklı renklerde olacak şekilde belirleme yapabiliyorum.

Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(66 satır)

Önceki hesap kodu sonraki hesap kodu uzunluklarına bakıp hesabın tipini belirliyor. Kullanılan hesabın hücresini renksiz bırakıyor. Diğerlerini kırılıma göre farklı renklere boyuyor.
 
O halde aşağıdaki kod işinizi görecektir.
Kod'a bir de tercihinize bağlı ekleme yaptım.
Kod'da, sol başında 3 tane tek tırnak işareti bulunanan satırların başındaki bu tek tırnak işaretlerini silerseniz;
kod çalıştırıldığında kaçıncı kırılıma kadar sonuç almak istediğinize dair soru sorulur.
Soruya verilen cevap kaç ise o kadar kırılım için işlem yapılır.

Bahsettiğim satırları silerseniz kırılım sayısı kaç olursa olsun gerekli işlem yapılır.

.
CSS:
Görüntülemek için giriş yapmanız gerekmektedir.
(65 satır)
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst