Macroyla Ozet Tablo

Katılım
28 Haziran 2007
Mesajlar
246
Excel Vers. ve Dili
Excel 2003 Tr
Arkadaslar merhabalar

2 sayfadan bazı verilerin 3. sayfa'ya özetlenmesi ile ilgili olarak macroya ihtiyacım var. ilgilerinizi rica eder iyi calismalar dilerim.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Aşağıdaki makroyu kullanabilirsiniz. Örnek dosyayı da inceleyiniz...

Kod:
Option Explicit
Dim arr()
[COLOR=darkgreen]'-------------------------------------------[/COLOR]
Sub Ozetle()
 
    Sheets("Sayfa3").Range("B4:G26").ClearContents
 
    Call Derle_Toparla(Sheets("Sayfa1"))
    Sheets("Sayfa3").Range("B4").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
    
    Call Derle_Toparla(Sheets("Sayfa2"))
    Sheets("Sayfa3").Range("E4").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
 
End Sub
[COLOR=darkgreen][B]'----------------------------------------[/B][/COLOR]
Sub Derle_Toparla(sh As Worksheet)
    Dim col As New Collection
    Dim i As Integer
    Dim j As Integer
    Dim x As Integer
 
    On Error Resume Next
 
    Erase arr
 
    For i = 2 To sh.Cells(65536, "K").End(xlUp).Row
 
        col.Add sh.Cells(i, "K"), sh.Cells(i, "K")
 
        If Err.Number = 0 Then
            x = x + 1
            ReDim Preserve arr(1 To 3, 1 To x)
            arr(1, x) = sh.Cells(i, "K")
            arr(2, x) = sh.Cells(i, "L")
            If sh.Name = "Sayfa2" Then
                arr(3, x) = sh.Cells(i, "N")
            Else
                arr(3, x) = sh.Cells(i, "M")
            End If
        Else
            For j = 1 To UBound(arr)
                If arr(1, j) = sh.Cells(i, "K") Then
                    Exit For
                End If
            Next j
            arr(2, j) = arr(2, j) + sh.Cells(i, "L")
            If sh.Name = "Sayfa2" Then
                arr(3, j) = arr(3, j) + sh.Cells(i, "N")
            Else
                arr(3, j) = arr(3, j) + sh.Cells(i, "M")
            End If
        End If
        Err.Number = 0
    Next i
 
    arr = Application.WorksheetFunction.Transpose(arr)
 
    On Error GoTo 0
End Sub
 
Son düzenleme:
Katılım
28 Haziran 2007
Mesajlar
246
Excel Vers. ve Dili
Excel 2003 Tr
Ferhat bey çok tesekkur eder iyi calismalar dilerim. Çok Makbule geçti.
 
Katılım
28 Haziran 2007
Mesajlar
246
Excel Vers. ve Dili
Excel 2003 Tr
Option Explicit

Dim arr()

Sub Ozetle()

Sheets("Stok").Range("B4:G123").ClearContents

Call Derle_Toparla(Sheets("Gid"))
Sheets("Stok").Range("B4").Resize(UBound(arr, 1), UBound(arr, 2)) = arr

Call Derle_Toparla(Sheets("Gel"))
Sheets("Stok").Range("E4").Resize(UBound(arr, 1), UBound(arr, 2)) = arr

End Sub



Ferhat bey kodları kendi dosyama uyarlarken yukarıda işaretlediğim alanda sıkıntı oldu. sebebini anlayamadım. yardımcı olur musunuz ?
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Eğer belirtiğiniz satırda hata alıyorsanız, "arr" dizisine; alt prosedürden veri yüklenmiyor -yani dizi boş olarak geliyor- demektir.

Bu durumda benim aklıma gelen, orjinal dosyanızda; örnekteki gibi K, L, M sütunlarında veri olup olmadığı ....

Eğer, orjinal dosyada bu sütunları kulanmıyorsanız, ya böyle hata verecek ya da -birkaç hata kontrolü eklediğimiz varsayımıyla-, hiç bir bilgi gelmeyecektir.

Kontrol ediniz. İçinden çıkamazsanız, orjinalin aynısı örnek basit bir dosya ilave ediniz.
 
Katılım
28 Haziran 2007
Mesajlar
246
Excel Vers. ve Dili
Excel 2003 Tr
merhabalar bugun internette sıkıntı yaşıyoruz. Kusura bakmayın ancak açabildim. evet sayfanın birinde yanlış sutun seçmişim onu düzelttim örnekleri de koyunca gayet sağlıklı çalışıyor. Ancak bahsettiginiz hata kontrollerini indirgemek mumkun olur mu ? veri varsa raporu versin değilse boş versin gibi.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
En basiti;

Kod:
Sheets("Stok").Range("B4:G123").ClearContents
satırının altına

Kod:
On Error Resume Next
yazmanız kafi gelecektir.
 
Katılım
28 Haziran 2007
Mesajlar
246
Excel Vers. ve Dili
Excel 2003 Tr
tesekkur ediyorum. iyi calismalar diliyorum.
 
Üst