- Katılım
- 11 Temmuz 2009
- Mesajlar
- 225
- Excel Vers. ve Dili
- Excel 2013 Türkçe (64 Bit)
DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Option Explicit
Sub KOŞULLU_TOPLAM()
Dim S1 As Worksheet, S2 As Worksheet
Dim X As Long, Satır As Long, Sütun As Byte
Dim Kriter As Integer, Ölçüt As String
Dim BUL As Range, ADRES As String
Dim İLK As Date, SON As Date
İLK = Time
Set S1 = Sheets("Sayfa1")
Set S2 = Sheets("Sayfa2")
Kriter = 2
For X = 3 To S2.Range("B65536").End(3).Row Step 24
Ölçüt = "NA"
For Satır = X To X + 21
For Sütun = 3 To 16
S2.Cells(Satır, Sütun) = Empty
If S2.Cells(Kriter, Sütun) = "Gİ" Or S2.Cells(Kriter, Sütun) = "İA" Or _
S2.Cells(Kriter, Sütun) = "SE" Or S2.Cells(Kriter, Sütun) = "FA" Then
Set BUL = S1.Range("A:A").Find(S2.Cells(X, 1), LookAt:=xlWhole)
If Not BUL Is Nothing Then
ADRES = BUL.Address
Do
If S1.Cells(BUL.Row, "C") = S2.Cells(Satır, "B") Then
If S1.Cells(BUL.Row, "D") = S2.Cells(Kriter, Sütun) Then
S2.Cells(Satır, Sütun) = S2.Cells(Satır, Sütun) + S1.Cells(BUL.Row, "E")
End If
End If
Set BUL = S1.Range("A:A").FindNext(BUL)
Loop While Not BUL Is Nothing And BUL.Address <> ADRES
End If
Else
Set BUL = S1.Range("A:A").Find(S2.Cells(X, 1), LookAt:=xlWhole)
If Not BUL Is Nothing Then
ADRES = BUL.Address
Do
If S1.Cells(BUL.Row, "B") = S2.Cells(Kriter, Sütun) Then
If S1.Cells(BUL.Row, "C") = S2.Cells(Satır, "B") Then
If S1.Cells(BUL.Row, "D") = Ölçüt Then
S2.Cells(Satır, Sütun) = S2.Cells(Satır, Sütun) + S1.Cells(BUL.Row, "E")
End If
End If
End If
Set BUL = S1.Range("A:A").FindNext(BUL)
Loop While Not BUL Is Nothing And BUL.Address <> ADRES
End If
End If
Next
If Satır - X = 9 Then
Satır = Satır + 2
Kriter = Kriter + 12
Ölçüt = "NB"
End If
Next
Kriter = Kriter + 12
Next
Set S1 = Nothing
Set S2 = Nothing
SON = Time
MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & Format((SON - İLK), "hh:mm:ss"), vbInformation
End Sub
Option Explicit
Sub KOŞULLU_TOPLAM()
Dim S1 As Worksheet, S2 As Worksheet
Dim X As Long, Satır As Long, Sütun As Byte
Dim Kriter As Integer, Ölçüt As String
Dim İLK As Date, SON As Date
Application.ScreenUpdating = False
İLK = Time
Set S1 = Sheets("Sayfa1")
Set S2 = Sheets("Sayfa2")
Kriter = 2
For X = 3 To S2.Range("B65536").End(3).Row Step 24
Ölçüt = "NA"
For Satır = X To X + 21
For Sütun = 3 To 16
S2.Cells(Satır, Sütun) = Empty
If S2.Cells(Kriter, Sütun) = "Gİ" Or S2.Cells(Kriter, Sütun) = "İA" Or _
S2.Cells(Kriter, Sütun) = "SE" Or S2.Cells(Kriter, Sütun) = "FA" Then
S1.Range("A1").AutoFilter
S1.Range("A1").AutoFilter Field:=1, Criteria1:=S2.Cells(X, "A")
S1.Range("A1").AutoFilter Field:=3, Criteria1:=S2.Cells(Satır, "B")
S1.Range("A1").AutoFilter Field:=4, Criteria1:=S2.Cells(Kriter, Sütun)
S2.Cells(Satır, Sütun) = WorksheetFunction.Subtotal(109, S1.Range("E:E"))
Else
S1.Range("A1").AutoFilter
S1.Range("A1").AutoFilter Field:=1, Criteria1:=S2.Cells(X, "A")
S1.Range("A1").AutoFilter Field:=2, Criteria1:=S2.Cells(Kriter, Sütun)
S1.Range("A1").AutoFilter Field:=3, Criteria1:=S2.Cells(Satır, "B")
S1.Range("A1").AutoFilter Field:=4, Criteria1:=Ölçüt
S2.Cells(Satır, Sütun) = WorksheetFunction.Subtotal(109, S1.Range("E:E"))
End If
Next
If Satır - X = 9 Then
Satır = Satır + 2
Kriter = Kriter + 12
Ölçüt = "NB"
End If
Next
Kriter = Kriter + 12
Next
S1.Range("A1").AutoFilter
Set S1 = Nothing
Set S2 = Nothing
SON = Time
Application.ScreenUpdating = True
MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & Format((SON - İLK), "hh:mm:ss"), vbInformation
End Sub
Option Explicit
Sub KOŞULLU_TOPLAM() [COLOR=red]'Makromuza isim veriyoruz.[/COLOR]
[COLOR=red]'Makromuzda kullanacağımız değişkenleri tanımlıyoruz.[/COLOR]
Dim S1 As Worksheet, S2 As Worksheet
Dim X As Long, Satır As Long, Sütun As Byte
Dim Kriter As Integer, Ölçüt As String
Dim İLK As Date, SON As Date
[COLOR=red]'Ekran hareketlerini pasif hale getiriyoruz.[/COLOR]
Application.ScreenUpdating = False
[COLOR=red]'Makromuzun işlemi yapma süresini bulmak için başlangıç zamanını tanımlıyoruz.[/COLOR]
İLK = Time
[COLOR=red]'Sayfa isimlerini kısaltarak tanımlıyoruz.[/COLOR]
Set S1 = Sheets("Sayfa1")
Set S2 = Sheets("Sayfa2")
[COLOR=red]'Hesaplamada kullanılacak kriterlerin başlangıç satır nosunu tanımlıyoruz.[/COLOR]
Kriter = 2
[COLOR=red]'X isimli bir döngü tanımlıyoruz.[/COLOR]
For X = 3 To S2.Range("B65536").End(3).Row Step 24
[COLOR=red]'Ölçüt değerini tanımlıyoruz.[/COLOR]
Ölçüt = "NA"
[COLOR=red]'Satır isimli bir döngü tanımlıyoruz. Bu döngü B sütunundaki değişkenleri kontrol etmek için tanımlanmıştır.[/COLOR]
For Satır = X To X + 21
[COLOR=red]'Sütun isimli bir döngü tanımlıyoruz. C-P arasındaki sütunları temsil etmektedir.[/COLOR]
For Sütun = 3 To 16
[COLOR=red]'İlk olarak hesaplama sonucunun yazılacağı hücrenin içeriğini temizliyoruz.[/COLOR]
S2.Cells(Satır, Sütun) = Empty
[COLOR=red]'Kriter satırlarının (Sarı renkli satırlar) "Gİ" , "İA" , "SE" , "FA" değerlerine eşit olmasını sorguluyoruz.[/COLOR]
If S2.Cells(Kriter, Sütun) = "Gİ" Or S2.Cells(Kriter, Sütun) = "İA" Or _
S2.Cells(Kriter, Sütun) = "SE" Or S2.Cells(Kriter, Sütun) = "FA" Then
[COLOR=red]'Eğer bir önceki sorgu sonucu olumlu ise aşağıdaki filtreleme işlemleri yapılmaktadır.[/COLOR]
[COLOR=red]'İlk olarak Sayfa1 deki filtreyi pasif hale getiriyoruz.[/COLOR]
S1.Range("A1").AutoFilter
[COLOR=red]'Sayfa1 deki A sütununa filtre uyguluyoruz. Yani X döngüsünün ilk değeri olan "A" değerini filtreliyoruz.[/COLOR]
S1.Range("A1").AutoFilter Field:=1, Criteria1:=S2.Cells(X, "A")
[COLOR=red]'Sayfa1 deki C sütununa filtre uyguluyoruz. Yani Satır değişkeninin ilk değeri olan "H2" değerini filtreliyoruz.[/COLOR]
S1.Range("A1").AutoFilter Field:=3, Criteria1:=S2.Cells(Satır, "B")
[COLOR=red]'Sayfa1 deki D sütununa filtre uyguluyoruz. Yani Sütun döngüsünün ilk değeri olan "C2" hücresinin değerini filtreliyoruz.[/COLOR]
S1.Range("A1").AutoFilter Field:=4, Criteria1:=S2.Cells(Kriter, Sütun)
[COLOR=red]'Tüm filtreler uygulandıktan sonra görünen satırlar için alttoplam formülü ile sonucu hesaplayıp ilgili hücreye aktarıyoruz.[/COLOR]
S2.Cells(Satır, Sütun) = WorksheetFunction.Subtotal(109, S1.Range("E:E"))
[COLOR=red]'IF sorgumuzun sonucu olumsuz ise[/COLOR]
Else
[COLOR=red]'İlk olarak Sayfa1 deki filtreyi pasif hale getiriyoruz.[/COLOR]
S1.Range("A1").AutoFilter
[COLOR=red]'Sayfa1 deki A sütununa filtre uyguluyoruz. Yani X döngüsünün ilk değeri olan "A" değerini filtreliyoruz.[/COLOR]
S1.Range("A1").AutoFilter Field:=1, Criteria1:=S2.Cells(X, "A")
[COLOR=red]'Sayfa1 deki B sütununa filtre uyguluyoruz. Yani Sütun döngüsünün ilk değeri olan "C2" hücresinin değerini filtreliyoruz.[/COLOR]
S1.Range("A1").AutoFilter Field:=2, Criteria1:=S2.Cells(Kriter, Sütun)
[COLOR=red]'Sayfa1 deki C sütununa filtre uyguluyoruz. Yani Satır değişkeninin ilk değeri olan "H2" değerini filtreliyoruz.[/COLOR]
S1.Range("A1").AutoFilter Field:=3, Criteria1:=S2.Cells(Satır, "B")
[COLOR=red]'Sayfa1 deki D sütununa filtre uyguluyoruz. Yani Ölçüt değişkeninin ilk değeri olan "NA" değerini filtreliyoruz.[/COLOR]
S1.Range("A1").AutoFilter Field:=4, Criteria1:=Ölçüt
[COLOR=red]'Tüm filtreler uygulandıktan sonra görünen satırlar için alttoplam formülü ile sonucu hesaplayıp ilgili hücreye aktarıyoruz.[/COLOR]
S2.Cells(Satır, Sütun) = WorksheetFunction.Subtotal(109, S1.Range("E:E"))
[COLOR=red]'IF sorgumuzu sonlandırıyoruz.[/COLOR]
End If
[COLOR=red]'Sütun döngüsüne devam ediyoruz.[/COLOR]
Next
[COLOR=red]'Tablonuzda 12. satırdan sonra diğer tabloya geçerken sonraki iki satırın işleme alınmaması gerekiyor.[/COLOR]
[COLOR=red]'Bunun için aşağıdaki IF sorgusunu kullanarak Satır,Kriter ve Ölçüt değişekenlerinin yeni değerlerini tanımlıyoruz.[/COLOR]
If Satır - X = 9 Then
Satır = Satır + 2
Kriter = Kriter + 12
Ölçüt = "NB"
End If
[COLOR=red]'Satır döngüsüne devam ediyoruz.[/COLOR]
Next
[COLOR=red]'Kriter değerinin üzerine 12 satır daha ekliyoruz.[/COLOR]
Kriter = Kriter + 12
[COLOR=red]'X döngüsüne devam ediyoruz.[/COLOR]
Next
[COLOR=red]'Hesaplama işlemleri tamamlandığı için Sayfa1 deki filtreleri pasif hale getiriyoruz.[/COLOR]
S1.Range("A1").AutoFilter
[COLOR=red]'Hafızaya aldığımız sayfa ismi kısaltmalarını hafızadan siliyoruz.[/COLOR]
Set S1 = Nothing
Set S2 = Nothing
[COLOR=red]'Makromuzun işlemi yapma süresini bulmak için bitiş zamanını tanımlıyoruz.[/COLOR]
SON = Time
[COLOR=red]'Ekran hareketlerini tekrar aktif hale getiriyoruz.[/COLOR]
Application.ScreenUpdating = True
[COLOR=red]'İşlemin tamamlandığına dair kullanıcıya bilgilendirme mesajı veriyoruz.[/COLOR]
MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & Format((SON - İLK), "hh:mm:ss"), vbInformation
[COLOR=red]'Makromuzu sonlandırıyoruz.[/COLOR]
End Sub