• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

çok koşullu toplamaları macro ile

adamar

Altın Üye
Katılım
23 Mayıs 2007
Mesajlar
94
Excel Vers. ve Dili
office 365
Sayın hocalarım ekli dosyada bir çalışmam var
bu dosyayı kullanabiliyorum ama formüllerden dolayı
dosya yavaş çalışamaya başlıyor
Bu dosyayı macrolar ile hesaplatma imkanımız varmı.
İlgilenenler Şimdiden çok teşekkürler
 

Ekli dosyalar

Son düzenleme:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 8 To 21
Cells(i, "g").Value = "=SUMPRODUCT(--('Kasa Haraketleri'!R2C1:R50000C1>=R4C4),--('Kasa Haraketleri'!R2C1:R50000C1<=R4C5),--('Kasa Haraketleri'!R2C2:R50000C2=RC6),--('Kasa Haraketleri'!R2C4:R50000C4))"
Cells(i, "g").Value = Cells(i, "g").Value
Next
For f = 1 To 2
Cells(f + 7, "d").Value = "=SUMPRODUCT(--('Kasa Haraketleri'!R2C1:R50000C1>=R4C4),--('Kasa Haraketleri'!R2C1:R50000C1<=R4C5),--('Kasa Haraketleri'!R2C2:R50000C2=RC2),--('Kasa Haraketleri'!R2C3:R50000C3))"
Cells(f + 7, "d").Value = Cells(f + 7, "d").Value
Cells(f + 27, "f").Value = "=SUMPRODUCT(--(giden!R3C1:R50000C1>='ICMAL (2)'!R4C4),--(giden!R3C1:R50000C1<='ICMAL (2)'!R4C5),--(giden!R3C2:R50000C2='ICMAL (2)'!RC2),--(giden!R3C3:R50000C3))"
Cells(f + 27, "f").Value = Cells(f + 27, "f").Value
Cells(f + 27, "g").Value = "=SUMPRODUCT(--(gelen!R3C1:R49976C1>='ICMAL (2)'!R4C4),--(gelen!R3C1:R49976C1<='ICMAL (2)'!R4C5),--(gelen!R3C2:R49976C2='ICMAL (2)'!RC2),--(gelen!R3C3:R49976C3))"
Cells(f + 27, "g").Value = Cells(f + 27, "g").Value
Next
Cells(10, "d").Value = "=SUMPRODUCT(--('Kasa Haraketleri'!R2C1:R50000C1>=R4C4),--('Kasa Haraketleri'!R2C1:R50000C1<=R4C5),--('Kasa Haraketleri'!R2C2:R50000C2=RC2),--('Kasa Haraketleri'!R2C3:R50000C3))*-1"
Cells(10, "d").Value = Cells(10, "d").Value
Cells(30, "g").Value = "=SUMPRODUCT(--(gelen!R3C1:R49976C1>='ICMAL (2)'!R4C4),--(gelen!R3C1:R49976C1<='ICMAL (2)'!R4C5),--(gelen!R3C4:R49976C4))"
Cells(30, "g").Value = Cells(30, "g").Value
Cells(30, "f").Value = "=SUMPRODUCT(--(giden!R3C1:R49976C1>='ICMAL (2)'!R4C4),--(giden!R3C1:R49976C1<='ICMAL (2)'!R4C5),--(giden!R3C4:R49976C4))"
Cells(30, "f").Value = Cells(30, "f").Value
End Sub
bütün formülleri hesaplatmak yerine formüllerinizi kullandım,sayfanın kod bölümüne kopyalayın, iyi çalışmalar.
 
bütün formülleri hesaplatmak yerine formüllerinizi kullandım,sayfanın kod bölümüne kopyalayın, iyi çalışmalar.

Sayın Fedeal merhaba ,

Benimde benzer sorunum var , aşağıda belirttiğim formüllerin koda çevrilmesi ile ilgili yardımcı olabilirmisiniz. Fomüller sürekli çalıştığından dosya bazen kilitleniyor. Diğer sütunları örneğe inceleyerek yapabilirim diye düşünüyorum.

İyi Çalışmalar
1. Formül
TOPLA.ÇARPIM(--(HESAP_KODU=RC2);--(Yeri=R3C);--(TARİH_MUH>=R1C1);--(TARİH_MUH<=R2C8);--(BORÇ_MUH-ALACAK_MUH))+TOPLA.ÇARPIM(--(HESAP_KODU=RC3);--(Yeri=R3C);--(TARİH_MUH>=R1C1);--(TARİH_MUH<=R2C8);--(BORÇ_MUH-ALACAK_MUH))

2. Formül

=TOPLA.ÇARPIM(--(HESAP_KODU=RC4);--(Yeri="Şube");--(TARİH_MUH>=R1C1);--(TARİH_MUH<=R2C8);--(BORÇ_MUH-ALACAK_MUH))+TOPLA.ÇARPIM(--(HESAP_KODU=RC5);--(Yeri="Şube");--(TARİH_MUH>=R1C1);--(TARİH_MUH<=R2C8);--(BORÇ_MUH-ALACAK_MUH))

3. formül

=TOPLA(EĞER(CARI_KOD=RC1;EĞER(SAT_TARIH>=R2C;EĞER(SAT_TARIH<=R2C[1];SAT_GENEL_TOPLAM))))

4.formül
=TOPLA(EĞER(BANK_MUS_KOD=RC1;EĞER(BANK_TARİH>=R2C[-1];EĞER(BANK_TARİH<=R2C;Tutar_Döviz_TL))))*-1+TOPLA(EĞER(Çek!R2C4:R13C4=RC1;EĞER(Çek!R2C8:R13C8>=R2C[-1];EĞER(Çek!R2C8:R13C8<=R2C;Çek!R2C15:R13C15))))*-1

5. Formül

=TOPLA(EĞER(AL_MUS_KOD=RC1;EĞER(AL_TARIH>=R2C[-2];EĞER(AL_TARIH<=R2C[-1];AL_GENL_TOPLAM))))*-1
 
Elinize sağlık çok güzel olmuş.
Bişey rica etsem
bana burdaki kodları anlayabileceğim altlarına açıklama yazabilirmisiniz.
Ben biraz daha fazlasını ilave edebilir diğer yerlerde de kullanabilmek için öğrenmek istiyorum.
çok teşekkürler ilginize.
 
sayın RALKAN makro kaydet yapıp formüllü hücreye kopyalayın sonra modülden çıkan kodu alıp bu şekilde uyarlaya bilirsiniz yada dosya ekleyin yapayım çünkü kodlar formüldeki ilgili hücreleri kendine olan uzaklıgıyla hesaplanıyor aynı formulü b2 ye yazarsanız farklı c2 ye yazarsanız farklı olacaktır.
 
sayın RALKAN makro kaydet yapıp formüllü hücreye kopyalayın sonra modülden çıkan kodu alıp bu şekilde uyarlaya bilirsiniz yada dosya ekleyin yapayım çünkü kodlar formüldeki ilgili hücreleri kendine olan uzaklıgıyla hesaplanıyor aynı formulü b2 ye yazarsanız farklı c2 ye yazarsanız farklı olacaktır.

Sayın Fedeal ,

Aşağıda linkini verdiğim konu hakkında yardımcı olursanız , sormak istediğim asıl bu konu formül yoğun kullanıldığından sorun oluşturuyor.

Teşekkür ederim ilginize

http://www.excel.web.tr/f48/fonksiyonlar-makrolarla-degistirme-t68943.html
 
Elinize sağlık çok güzel olmuş.
Bişey rica etsem
bana burdaki kodları anlayabileceğim altlarına açıklama yazabilirmisiniz.
Ben biraz daha fazlasını ilave edebilir diğer yerlerde de kullanabilmek için öğrenmek istiyorum.
çok teşekkürler ilginize.

For i = 8 To 21 ' döngü kuruyoruz 8 ila 21 degerleri arasında
Cells(i, "g").Value = "=SUMPRODUCT(--('Kasa Haraketleri'!R2C1:R50000C1>=R4C4),--('Kasa Haraketleri'!R2C1:R50000C1<=R4C5),--('Kasa Haraketleri'!R2C2:R50000C2=RC6),--('Kasa Haraketleri'!R2C4:R50000C4))"
Cells(i, "g").Value = Cells(i, "g").Value
Next
Cells(i, "g").Value <-- bu ise i yazan yer satırı g ise g sütununu belirtiyor.makro çalışınca sırasıyla Cells(8, "g").Value , Cells(9, "g").Value ,Cells(10, "g").Value ............. ilgili yerlere sizin formülünüzü yazacak

Cells(i, "g").Value = Cells(i, "g").Value bu satırda formülün sonucunu ilgili hücreye tekrar yazıp formülden kurtaracak.

formülünü bu şekle çevirmek için

makro kaydet yapıp formüllü hücreye kopyalayın sonra kaydı durdurup modülden çıkan kodu alıp Cells(i, "g").Value = karşısına yazın umarım açıklamışımdır.

burda dikkat edilecek husus sayfaya yazdıgınız formüldeki $ kitleme işaretleri hücrelerdeki çogaltma mantıgıyla çalışıyor.
 
Son düzenleme:
Sayın Fedeal ,

Aşağıda linkini verdiğim konu hakkında yardımcı olursanız , sormak istediğim asıl bu konu formül yoğun kullanıldığından sorun oluşturuyor.

Teşekkür ederim ilginize

http://www.excel.web.tr/f48/fonksiyonlar-makrolarla-degistirme-t68943.html

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 4 To Range("h65536").End(xlUp).Row
Cells(i, "h").Value = "=SUMPRODUCT(--(HESAP_KODU=RC4),--(Yeri=""Şube""),--(TARİH_MUH>=R1C1),--(TARİH_MUH<=R2C8),--(BORÇ_MUH-ALACAK_MUH))+SUMPRODUCT(--(HESAP_KODU=RC5),--(Yeri=""Şube""),--(TARİH_MUH>=R1C1),--(TARİH_MUH<=R2C8),--(BORÇ_MUH-ALACAK_MUH))"
Cells(i, "h").Value = Cells(i, "h").Value
Next
End Sub

h sütunu gebze için SelectionChange olayına yazdım hücre seçtikçe çalışacak kodddlar.
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For f = 1 To 2
Cells(f + 7, "d").Value = "=SUMPRODUCT(--('Kasa Haraketleri'!R2C1:R50000C1>=R4C4),--('Kasa Haraketleri'!R2C1:R50000C1<=R4C5),--('Kasa Haraketleri'!R2C2:R50000C2=RC2),--('Kasa Haraketleri'!R2C3:R50000C3))"
Cells(f + 7, "d").Value = Cells(f + 7, "d").Value
next

özel mesajda anlamadıgınızı belirtmişiniz bende uzman degilim ama anlatmaya çalışayım.

for i=1 to 2
next
bir döngü komutudur i harfine 1 den 2 ye kadar rakam tanımlamış oluyoruz yani
yukardaki komut 2 kere dönecek.ilkinde Cells(1 + 7, "d").Value = hücresine komutu yazacak daha sonra aynı hücreyi formulü kaldırmak için Cells(1+ 7, "d").Value = Cells(1+ 7, "d").Value sadece formül sonucunu hücreye yazacak. Cells(1+ 7, "d").Value sayfadaki karşılıgı d8 hücresi kodlar next e gelince bu sefer i 'ye 2 değeri verilip işlem tekrarlanacak yani Cells(2+ 7, "d").Value d9 hücresine yazacak. bu işlem eğer i=1 to 50 olsaydı 50 kez tekrarlanacaktı.
kısacası for--next birnevi kod kısaltması diyebiliriz.aynı işlemi şu şekildede yazabilirdik.

Cells(8, "d").Value = "=SUMPRODUCT(--('Kasa Haraketleri'!R2C1:R50000C1>=R4C4),--('Kasa Haraketleri'!R2C1:R50000C1<=R4C5),--('Kasa Haraketleri'!R2C2:R50000C2=RC2),--('Kasa Haraketleri'!R2C3:R50000C3))"
Cells(8, "d").Value = Cells(8, "d").Value


Cells(30, "g").Value = "=SUMPRODUCT(--(gelen!R3C1:R49976C1>='ICMAL (2)'!R4C4),--(gelen!R3C1:R49976C1<='ICMAL (2)'!R4C5),--(gelen!R3C4:R49976C4))"
Cells(30, "g").Value = Cells(30, "g").Value
End Sub

birde Cells(30, "g").Value bunu sormuşsunuz niye 30 yazdınız diye çünkü o hücredeki ("g30") formül tek bir hücredeydi altalta tekrarlanmıyordu.

aynı konuyla ilgili alttaki adreste bir örnek var daha değişik olaylarda yapmak mümkün.

aynı şekilde döngüyü kullanarak şartlara uyan hücrelere deger vermek renklendiemek vs. cok şey mümkün.örnegin:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'sayfadaki hücre seçilince makro calışır.
For t = 1 To Range("A65536").End(xlUp).Row 't 'ye 1 den a sütununu son dolu hücresine kadar döngü yapmasını saglar.
If Cells(t, "a").Value = 1 Then 'eğer hücrede "1" yazıyorsa
Cells(t, "a").Interior.ColorIndex = 6 'şart doğruysa hücre sarı olur
Else
Cells(t, "a").Interior.ColorIndex = xlNone 'şart doğru degilse dolgu rengi silinir.
End If
Next
End Sub

umarım açıklayıcı olmuştur.İyi çalışmalar.
 
Geri
Üst