- Katılım
- 4 Ocak 2010
- Mesajlar
- 2,074
- Excel Vers. ve Dili
- OFFICE 2007 PRO TR - Win7 X64
Merhabalar,
Bir üyemizin sormuş olduğu sorunun cevabını biraz inceledim sonuca Scripting.dictionary ile gittim fakat kod 65.000 satırda çalışmasında bir sıkıntı yokken 66.000 ve satır sayısını arttıkça kodda hata meydana geliyo.
sp.Range("A4").Resize(z.Count, 14).Value = Application.Transpose(dizi)
Hata veren satır. .
Teşekkür Ederim..
Bir üyemizin sormuş olduğu sorunun cevabını biraz inceledim sonuca Scripting.dictionary ile gittim fakat kod 65.000 satırda çalışmasında bir sıkıntı yokken 66.000 ve satır sayısını arttıkça kodda hata meydana geliyo.
sp.Range("A4").Resize(z.Count, 14).Value = Application.Transpose(dizi)
Hata veren satır. .
Teşekkür Ederim..
Kod:
Option Base 1
Sub vedat()
Dim sonsat As Long, sp As Worksheet, sh As Worksheet, liste(), son, dizi(), n As Long, z As Object
Dim i, sat As Long, deg As String
Dim Sure As Double, Zaman As Double
Zaman = Timer
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Sheets("detay rapor").Select
Range("A4:N" & Rows.Count).ClearContents
Range("A4:N" & Rows.Count).Borders.LineStyle = 0
Set sh = Sheets("veri tabanı")
Set sp = Sheets("detay rapor")
sonsat = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
liste = sh.Range("A2:AG" & sonsat).Value
ReDim dizi(1 To 14, 1 To sonsat)
Set z = CreateObject("Scripting.dictionary")
For i = 1 To UBound(liste)
If liste(i, 13) >= Range("Q1").Value And liste(i, 14) <= Range("Q2").Value Then
deg = liste(i, 7) & liste(i, 11)
If Not z.exists(deg) Then
n = n + 1
z.Add deg, n
dizi(1, n) = liste(i, 7)
dizi(2, n) = liste(i, 11)
ReDim Preserve dizi(1 To 14, 1 To sonsat)
End If
dizi(3, z.Item(deg)) = dizi(3, z.Item(deg)) + liste(i, 16)
dizi(5, z.Item(deg)) = dizi(5, z.Item(deg)) + liste(i, 15)
dizi(6, z.Item(deg)) = dizi(6, z.Item(deg)) + liste(i, 18)
dizi(8, z.Item(deg)) = dizi(8, z.Item(deg)) + liste(i, 17)
dizi(9, z.Item(deg)) = dizi(9, z.Item(deg)) + liste(i, 28)
dizi(11, z.Item(deg)) = dizi(11, z.Item(deg)) + liste(i, 29)
dizi(12, z.Item(deg)) = dizi(12, z.Item(deg)) + liste(i, 30)
dizi(14, z.Item(deg)) = dizi(14, z.Item(deg)) + liste(i, 31)
End If
Next i
sp.Range("A4").Resize(z.Count, 14).Value = Application.Transpose(dizi)
Erase liste
Erase dizi
Set z = Nothing
Set sh = Nothing
Set sp = Nothing
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
MsgBox "Raporlama işleminiz tamamlanmıştır. İşlem süresi ; " & Format(Timer - Zaman, "0.00")
End Sub
