Excel Forum
ALTIN ÜYELİK Hakkında Bilgi


Geri Git   Excel Forum > EXCEL-Soruları > Makro-VBA
Atatürk
Şifremi Unuttum

DUYURU SİSTEMİ / REKLAM PANOSU

Makro-VBA Makro veya VBA ile ilgili sorularınızı buraya gönderebilirsiniz.
Dosya ekleyebilirsiniz

Özel Arama


Yanıtla
 
Paylaş Konu Araçları Görünüm Modları
Eski 15-10-2017, 22:07   #1
KarıncaZ
 
KarıncaZ kullanıcısının avatarı
 
Giriş: 22/01/2006
Şehir: KOCAELİ
Mesaj: 207
Excel Vers. ve Dili:
Office 2003 , 2013 ve 2016 TR.
Question Makro ile ÇokEtopla ( Application.WorksheetFunction.SumIfs )

Merhaba.

Aşağıdaki dosya için yardımlarınızı bekliyorum.
http://s5.dosya.tc/server5/arainw/Or...a_Mkr.zip.html

Sub EToplaBorc()
Dim it As Date
Dim st As Date
Dim mHesap As Range
Dim mTarih As Range
Dim mBorc As Range
Dim hs As String

Set S1 = Sheets("Muavin")
Set S2 = Sheets("Hesapla")
son1 = S1.Range("A1000000").End(xlUp).Row
son2 = S2.Range("A1000000").End(xlUp).Row

't1 = CDate(S2.Cells(1, 3))
't2 = CDate(S2.Cells(1, 4))
it = S2.Cells(1, 3)
st = S2.Cells(1, 4)

Set mHesap = S1.Range("A3:A" & son1)
Set mTarih = S1.Range("F3:F" & son1)
Set mBorc = S1.Range("J3:J" & son1)

For i = 4 To son2
hs = S2.Cells(i, 1).Value
tplm = Application.WorksheetFunction.SumIfs(mBorc, mTarih, ">=" & it, mTarih, "<=" & st, mHesap, "=" & hs)
S2.Cells(i, 3) = tplm
Next i

End Sub

Kodlarını kullanıyorum. Birçok örneği inceledim sorun yok gibi ancak toplamları bir türlü doğru getirmiyor. Hep 0,00 olarak değer getiriyor.

Nerede hata yapıyorum bir türlü bulamadım.

Dosyada makro çalışınca olması gereken tutarlar da var.

Yardımlarınız için şimdiden teşekkürler. Esenlikler dilerim. iyi çalışmalar.
__________________
Excel 2003 - 2007 - 2010 - 2013 - 2016 Türkçe
KarıncaZ Çevrimdışı   Alıntı Yaparak Cevapla
Eski 15-10-2017, 22:51   #2
Ziynettin
Altın Üye
 
Giriş: 17/04/2008
Şehir: istanbul
Mesaj: 394
Excel Vers. ve Dili:
office2010
Varsayılan

Merhaba;

Verileriniz çok fazla kodu bu şekilde deneyiniz.

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
Option Explicit
Sub Etopla()
Dim Tarih_1 As Date, Tarih_2 As Date
Dim S1 As Worksheet, S2 As Worksheet
Dim a(), b(), c(), d As Object, Z As Date
Dim i As Long, Say As Long, Son1 As Long, Son2 As Long
Z = TimeValue(Now)
Application.ScreenUpdating = False
Set S1 = Sheets("Muavin")
Set S2 = Sheets("Hesapla")
Set d = CreateObject("Scripting.Dictionary")

Son1 = S1.Cells(Rows.Count, 1).End(xlUp).Row
a = S1.Range("A3:J" & Son1).Value
Tarih_1 = S2.[C1]
Tarih_2 = S2.[D1]

For i = 1 To UBound(a)
    If a(i, 6) >= Tarih_1 And a(i, 6) <= Tarih_2 Then
        d(a(i, 1)) = d(a(i, 1)) + a(i, 10)
    End If
Next i

Son2 = S2.Cells(Rows.Count, 1).End(xlUp).Row
b = S2.Range("A4:A" & Son2)

ReDim c(1 To UBound(b), 1 To 1)
For i = 1 To UBound(b)
c(i, 1) = d(b(i, 1))
Next i

S2.Range("C4:C" & Rows.Count).ClearContents
S2.[C4].Resize(UBound(b)) = c
Application.ScreenUpdating = True
MsgBox "işlem tamam..." & CDate(TimeValue(Now) - Z), vbInformation
End Sub
Ziynettin Çevrimdışı   Alıntı Yaparak Cevapla
Eski 15-10-2017, 23:04   #3
KarıncaZ
 
KarıncaZ kullanıcısının avatarı
 
Giriş: 22/01/2006
Şehir: KOCAELİ
Mesaj: 207
Excel Vers. ve Dili:
Office 2003 , 2013 ve 2016 TR.
Varsayılan

Merhaba sayın Ziynettin.

Hızlı bir şekilde verileri getirdi. Kodları genel anlamıyla kavradım ancak ilk defa rastladığım bazı ibareler var.

Dim a(), b(), c(), d As Object,
CreateObject("Scripting.Dictionary")
UBound ile de anladığım kadarıyla dizi oluşturmak için kullanıyoruz.

Rica etsem kodların mantığını biraz açıklar mısınız. Benim uğraştığım veriler en az 80.000 satırdan oluşuyor. İşlem yapmam gereken bir dosya da 990.000 satırdan fazla. Bu nedenle hızlı çalışacak makro kodlarını iyi öğrenmem gerekiyor. Formül yazınca çok kasıyor ve bazen hata ile karşılaşıyorum kaydetmiyor.

Yardımlarınız için şimdiden teşekkürler. Esenlikler dilerim. İyi çalışmalar.

.
__________________
Excel 2003 - 2007 - 2010 - 2013 - 2016 Türkçe
KarıncaZ Çevrimdışı   Alıntı Yaparak Cevapla
Eski 16-10-2017, 00:33   #4
antonio
Destek Ekibi
 
antonio kullanıcısının avatarı
 
Giriş: 13/02/2011
Mesaj: 1,031
Excel Vers. ve Dili:
Excel 2013
Varsayılan

Merhaba,
Sayın Ziynettin şu an bağlı değil. Sorduklarınıza ilişkin yardımcı olmaya çalışayım:
diziler VBA kodlarında çok kullanışlı işlevleri olan ve tercih edilen öğelerdir.
değişkenlerden parantez () içerenler dizilerdir. parantezin içine yazılan bir sayı varsa, dizinin belli bir sayıda elemanı olduğunu gösterir. a(5) şeklinde yazılan dizinin 6 elemanı vardır. Çünkü diziler 0 dan başlar
UBound, dizilerin en fazla kaç elemanı olduğunu verir. Tersi LBound dur.
Scripting.Dictionary, kelime veya rakam karşılaştırarak, bunlara eşşiz bir değer atayan bu özelliğiyle benzersiz veri hesaplamada çok kullanışlı ve hızlı sonuçlar veren bir scripting nesnesidir. VBA kodlarında birçok scripting nesnesi vardır. İleri düzey kodlama yapanlar bu nesnelerin değerini çok iyi bilirler ve her fırsatta bunları kullanırlar. Bu yüzeysel bilgileri bildikten sonra her biri için arama yaparken, "VBA makro diziler anlatım", "VBA makro Scripting Dictionary" şeklinde yazdığınızda çok değerli anlatımlara rastlayacaksınız.
Kolay gelsin.
__________________
Özel mesaj sistemini devre dışı bıraktım.
Yardım istemeden önce Forum Kurallarını okuyunuz.
Aynı konuyu farklı bölümlerde açanların sorularını yanıtlamıyorum, bu durumu fark etmeden yanıtlamışsam, mesajımı siliyorum.
antonio Çevrimdışı   Alıntı Yaparak Cevapla
Eski 16-10-2017, 08:27   #5
KarıncaZ
 
KarıncaZ kullanıcısının avatarı
 
Giriş: 22/01/2006
Şehir: KOCAELİ
Mesaj: 207
Excel Vers. ve Dili:
Office 2003 , 2013 ve 2016 TR.
Varsayılan

Merhaba Sayın antonio

Vermiş olduğunuz bilgilerden dolayı çok teşekkür ederim.

Esenlikler dilerim. İyi çalışmalar.
__________________
Excel 2003 - 2007 - 2010 - 2013 - 2016 Türkçe
KarıncaZ Çevrimdışı   Alıntı Yaparak Cevapla
Eski 16-10-2017, 08:51   #6
antonio
Destek Ekibi
 
antonio kullanıcısının avatarı
 
Giriş: 13/02/2011
Mesaj: 1,031
Excel Vers. ve Dili:
Excel 2013
Varsayılan

Rica ederim. İyi çalışmalar.
__________________
Özel mesaj sistemini devre dışı bıraktım.
Yardım istemeden önce Forum Kurallarını okuyunuz.
Aynı konuyu farklı bölümlerde açanların sorularını yanıtlamıyorum, bu durumu fark etmeden yanıtlamışsam, mesajımı siliyorum.
antonio Çevrimdışı   Alıntı Yaparak Cevapla
Yanıtla


Konu Araçları
Görünüm Modları

Gönderme Kuralları
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
SimgelerAçık
[IMG] kodu Açık
HTML kodu Kapalı


Saat 11:18


Bu forum Elit NET - www.elitnet.com.tr tarafından sunulmaktadır.

Excel Eğitimi - Mobil Uygulama - Çorlu - Çorlu Web Tasarım - Tarot Falı - invest in turkey - Lingerie - Dyeing Machine - Karton Bardak- Çorlu Özel Eğitim- Site Yönetimi- Led Aydınlatma- Pronet Tekirdağ- Çorlu Kamera- Pronet Edirne- Pronet Kırklareli- Pronet Çerkezköy- Pronet Çorlu- Pronet Lüleburgaz- Pronet Keşan- Çorlu Araç Takip- Çorlu Su Arıtma- Boru Profil- Gebze Emlak- Beylikdüzü Temizlik- İstanbul Burun Estetiği- Bakır Sülfat- Rampa- Rotary- Çorlu İnternet Sitesi- youngblood- Çorlu Palet- Çerkezköy Palet- Çorlu Prefabrik- Çorlu Sürücü Kursu- Çorlu Sandviç Panel- Şişli Avukat- Korona Test Kalemi- Çorlu Vinç- Çorlu Pimapen Tamiri- Çorlu Çelik Konstruksiyon-
Powered by vBulletin Version 3.7.2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Advertisement System V2.6 By   Branden