DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Option Explicit
Sub Topla()
Dim a(), b(), c(), e(), d As Object, d1 As Object, d2 As Object
Dim Say As Long, x As Long, i As Long, liste, k As Long, y As Variant
Dim S1 As Worksheet, S2 As Worksheet, t As Double
t = Timer
Set S1 = Sheets("TOPLAM LİSTE")
Set S2 = Sheets("HARCAMA")
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
a = S2.Range("A2:C" & S2.Cells(Rows.Count, 1).End(3).Row)
For i = 1 To UBound(a)
d(a(i, 1) & "|" & a(i, 2)) = d(a(i, 1) & "|" & a(i, 2)) + a(i, 3)
d1(a(i, 2)) = ""
d2(a(i, 1)) = ""
Next i
liste = d1.keys
For i = 1 To UBound(liste) - 1
For k = i + 1 To UBound(liste)
If liste(i) > liste(k) Then
y = liste(k)
liste(k) = liste(i)
liste(i) = y
End If
Next k
Next i
S1.Cells.Clear
On Error Resume Next
S1.[B1].Resize(, d1.Count) = liste
S1.[a2].Resize(d2.Count) = Application.Transpose(d2.keys)
b = S1.Range("A2").Resize(d2.Count).Value
c = S1.Range("B1").Resize(, d1.Count).Value
ReDim e(1 To UBound(b), 1 To d1.Count + 1)
For i = 1 To UBound(b)
Say = Say + 1
For x = 1 To UBound(c, 2)
e(Say, x) = d(b(i, 1) & "|" & c(1, x))
e(Say, UBound(c, 2) + 1) = e(Say, UBound(c, 2) + 1) + e(Say, x)
Next x
Next i
S1.[a1] = "İller"
S1.[a2].Offset(UBound(b)) = "Toplam"
S1.[B1].Offset(, d1.Count) = "Toplam"
S1.[B2].Resize(Say, UBound(c, 2) + 1) = e
For x = 1 To UBound(c, 2) + 1
S1.[B2].Offset(UBound(b), x - 1) = Application.Sum(Application.Index(e, , x))
Next x
For k = 1 To d1.Count + 2
S1.[a1].Offset(, k - 1).Resize(d1.Count + 1).BorderAround Weight:=xlThin
Next
S1.[a1].Offset(d1.Count).Resize(, d2.Count + 3).BorderAround Weight:=xlThin
MsgBox "İşleminiz Tamamlandı." & vbLf & vbLf & _
"Süre : " & Format(Timer - t, "0.00"), vbInformation
End Sub