• DİKKAT

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

iki sutundaki mükererlere göre şartlı toplatma

numan şamil

Destek Ekibi
Destek Ekibi
Katılım
27 Ocak 2011
Mesajlar
1,238
Excel Vers. ve Dili
Ofis 2013 Türkçe
Merhaba arkadaşlar makrolarla uzun zamandır uyraşmadığımdan unutmuşum
Ekli örnekte gerekli açıklama yapılmıştır
 

Ekli dosyalar

Formül ile işinize yarar ise bir deneyiniz
 

Ekli dosyalar

Sn. @numan şamil
Kodlar Sn. @Korhan Ayhan hocama ait kodlardır. A ve B sutunu aynı olanları sayfa2 ye C sutununu toplayarak aktarır.
Kod:
Sub AktarTopla2()
Dim a, i As Long, b(), n As Long
Set S1 = Sheets("Sayfa1")
Set s2 = Sheets("Sayfa2")
a = S1.Range("a2:d5000").Value
ReDim b(1 To UBound(a, 1), 1 To 4)
With CreateObject("Scripting.Dictionary")
     .CompareMode = vbTextCompare
     For i = 1 To UBound(a, 1)
     Z = a(i, 1) & " " & a(i, 2) '(i, 2 ikinci kolan, 3üçüncü, artıkça çoağalıyor)
          If Not .exists(Z) Then
               n = n + 1
               .Add (Z), n
               b(n, 1) = a(i, 1)
               b(n, 2) = a(i, 2)
               End If
          b(.Item(Z), 3) = b(.Item(Z), 3) + a(i, 3)
          Next
End With
s2.Range("a2:c5000").ClearContents
s2.Range("a2").Resize(n, 4).Value = b
MsgBox "Bitti"
[a1].Select
Set S1 = Nothing
Set s2 = Nothing
End Sub
 
Merhaba,

Bu değişken yazım tekniğini genelde Ziynettin bey kullanır. Hak geçmesin..
 
Sn Tahsinanarat teşekkürler
Korhan Hocam sizin tekniğinizle
örneğin :
If WorksheetFunction.CountIf
WorksheetFunction.SumIf
ile mümkün mü ?
Altarnatif kod yazılabilinir mi?
 
Merhaba,

Alternatifler elbette yazılabilir. Zaten defalarca benzer sorular cevaplandı. Forumun arşivinde bulunuyor. Burda beklenen performans önemlidir. Önerilen çözüm en hızlı tekniklerden birisidir.

Alternatif olarak hızıda gözeterek aşağıdaki teknikler kullanılabilir

1-Adodb
2-Makro ile özet tablo
3-Collection nesnesi kullanılarak çözüm üretilebilir.
4-System.Collections.ArrayList nesnesi kullanılarak çözüm üretilebilir.
5-Makro ile Yinelenenleri Kaldır uygulanıp benzersiz verler listelendikten sonra toplamları alınabilir.
6-Makro ile Gelişmiş Filtre uygulanıp benzersiz veriler listelendikten sonra toplamları alınabilir.
 
Merhaba Korhan Hocam
Anlamak için soruyorum
Kod:
Sub AktarTopla()
Dim S1 As Worksheet, S2 As Worksheet
Dim a As Variant
Dim i As Long, b(), n As Long
Set S1 = Sheets("Sayfa1")
Set S2 = Sheets("Sayfa2")
son = S1.Cells(Rows.Count, "A").End(xlUp).Row
    a = S1.Range("A2:D" & son).Value
ReDim b(1 To UBound(a, 1), 1 To 5)
With CreateObject("Scripting.Dictionary")
     .CompareMode = vbTextCompare
     For i = 1 To UBound(a, 1)
     Z = a(i, 1) & " " & a(i, 2) '(i, 2 ikinci kolan, 3üçüncü, artıkça çoağalıyor)
          If Not .exists(Z) Then
               n = n + 1
               .Add (Z), n
               b(n, 1) = a(i, 1)
               b(n, 2) = a(i, 2)
               b(n, 3) = a(i, 3)
               b(n, 4) = a(i, 4)
               End If
          b(.Item(Z), 5) = b(.Item(Z), 5) + a(i, 5)
          Next
End With
S2.Range("A2:E" & Rows.Count).ClearContents
S2.Range("a2").Resize(n, 5).Value = b
MsgBox "Bitti"
[a1].Select
Set S1 = Nothing
Set S2 = Nothing
End Sub

Yukarıdaki kodları
A ve b sutunu yerine
Q ve T sutunlarında mükerrerleri baz alırsak
nasıl değiştirebiliriz
Ekli örnekteki gibi
 

Ekli dosyalar

Son düzenleme:
Şu iki satırı revize etmeniz yeterli olacaktır. Kalın fontla belirttiğim adresleri revize etmelisiniz.

son = S1.Cells(Rows.Count, "A").End(xlUp).Row
a = S1.Range("A2:D" & son).Value
 
Yukarıdaki kodları
A ve b sutunu yerine
Q ve T sutunlarında mükerrerleri baz alırsak
nasıl değiştirebiliriz
Ekli örnekteki gibi

Örnek olsun,
Kod:
Sub test()

    Dim veri, say&, i&, krt$, sira&
    
    With Sheets("Sayfa1")
        veri = .Range("Q2:U" & .Cells(Rows.Count, "Q").End(3).Row).Value
    End With

    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(veri)
            krt = veri(i, 1) & "|" & veri(i, 2) & "|" & veri(i, 3) & "|" & veri(i, 4)
            If .exists(krt) Then
                sira = .Item(krt)
                veri(sira, 5) = veri(sira, 5) + veri(i, 5)
            Else
                say = say + 1
                veri(say, 1) = veri(i, 1)
                veri(say, 2) = veri(i, 2)
                veri(say, 3) = veri(i, 3)
                veri(say, 4) = veri(i, 4)
                veri(say, 5) = veri(i, 5)
                .Item(krt) = say
            End If
        Next i
    End With
    
    With Sheets("Sayfa2")
        .Range("A2:E" & Rows.Count).ClearContents
        .Range("A2").Resize(say, 5).Value = veri
    End With

End Sub
 
Sn; Korhan Ayhan,Veyselemre çok teşekkür ederim
 
Tekrardan merhabalar
Kod:
b(.Item(Z), 5) = b(.Item(Z), 5) + a(i, 5)

8 nolu mesajdaki kodlarda bir sutun toplatılıyordu
Aynı şartlarda iki sutun toplatmak istersek kodlarda ne gibi değişiklik yapmamız gerekiyor
Kod:
b(.Item(Z), 6) = b(.Item(Z), 6) + a(i, 6)
nasıl birleştirebiliriz
 
Son düzenleme:
Kod:
b(.Item(z), 5) = b(.Item(z), 5) + a(i, 5)
          b(.Item(z), 6) = b(.Item(z), 6) + a(i, 6)
Daha önce denediğimde hata vermişti
Şeklinde yapıldı Sorun çözüldü
 
Geri
Üst