Ekteki tabloda her kolon için makro filtreleme yapıp value yapıştıracak

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Merhaba, aşağıda belirttiğim makroda D kolonunda istediğim renk kriterine göre filtre yapan, sonra e kolonunda istediğim renk kriterine göre filtre yapan ve E3 hücresinde okunan subtotal değerini value yapan, ardından f kolonunda istediğim renk kriterine göre filtre yapan ve F4 hücresinde okunan sub total değerini value yapan e ardından tüm sayfadaki filtreleri kaldıran makro bulunmaktadır. Amacım D kolunandan sonra sırayla E ve F kolonalarında yaptığım işlemi, E F G, F G H, G H I ... olacak şekilde sırayla tüm kolonlarında da yapan ve ilgili kolonun 3 ve 4 NOLU hücresinde okunan subtotal değerini value yapıştırarak ilerleyen bir makro yazmak. Yardımlarınız için teşekkür ederim. Ard arda 1000 kolona ulaşan bir datam var makro ile yapamazsam her kolon için manuel yapmam gerekecek.

Sub Sıralı()
'
' Sıralı Macro
'
' Keyboard Shortcut: Ctrl+u
'
ActiveSheet.Range("$A$10:$I$16").AutoFilter Field:=4, Criteria1:=RGB(226, _
239, 218), Operator:=xlFilterCellColor
ActiveSheet.Range("$A$10:$I$16").AutoFilter Field:=5, Criteria1:=RGB(226, _
239, 218), Operator:=xlFilterCellColor
Range("E3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Range("$A$10:$I$16").AutoFilter Field:=6, Criteria1:=RGB(226, _
239, 218), Operator:=xlFilterCellColor
Range("F4").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
 

Ekli dosyalar

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Önceki makronuzu unutun ve ne yapmak istediğinizi tane tane, bizim anlayabileceğimiz şekilde anlatın lütfen. Eğer renkli hücrelerin renkli olmasının bir kriteri varsa onu da belirtin.
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Önceki makronuzu unutun ve ne yapmak istediğinizi tane tane, bizim anlayabileceğimiz şekilde anlatın lütfen. Eğer renkli hücrelerin renkli olmasının bir kriteri varsa onu da belirtin.
Merhaba, ekteki dosyada ihtiyacım olan makro aşağıda sıralanmıştır.
1) D Kolununda yeşil renkli hücreleri filtrele (koşullu biçimlendirme ile %1 ve üstü olan renklendi ancak bunu değiştirebilirim)
2) Ardından E kolonunda yeşil renkli hücreleri filtrele
3) E3 Hücresinde subtotal ile filtre sonrası değişen rakamlı value yap,
4)F kolonunda yeşil renkli hücreleri filtrele
5)F4 Hücresinde subtotal ile filtre sonrası değişen rakamı value yap
6) TÜm filtreleri kaldır
İşlem sırayla her kolonda yukarıda tanımladığım ve aşağıdaki gibi tekrar edecek,

8) E Kolununda yeşil renkli hücreleri filtrele (koşullu biçimlendirme ile %1 ve üstü olan renklendi ancak bunu değiştirebilirim)
9) Ardından F kolonunda yeşil renkli hücreleri filtrele
10) F3 Hücresinde subtotal ile filtre sonrası değişen rakamlı value yap,
11) G kolonunda yeşil renkli hücreleri filtrele
12) G4 Hücresinde subtotal ile filtre sonrası değişen rakamı value yap
13) TÜm filtreleri kaldır

... İŞLEM BU ŞEKİLDE DEVAM EDECEK SON KOLONA GELENE KADAR. İşlem Aralığım D-SI kolonları 11-414 satırları arasında

Yusuf hocam ilave bilgi gerekiyorsa hemen açıklamak isterim.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
D kolonu filtrelendikten sonra filtre iptal edilip mi E kolonu filtrelenecek yoksa D filtreliyken E kolonu filtrelenip her iki kolonda da %1 ve fazla olanların sayısı mı belirlenecek?

Başka bir ifadeyle size filtrelenecek sütuna kadar olan tüm sütunlarda %1 ve fazla olanları sayısı mı lazım yoksa her sütunda %1 ve fazla olanları sayısı mı lazım?
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
D kolonu filtrelendikten sonra filtre iptal edilip mi E kolonu filtrelenecek yoksa D filtreliyken E kolonu filtrelenip her iki kolonda da %1 ve fazla olanların sayısı mı belirlenecek?

Başka bir ifadeyle size filtrelenecek sütuna kadar olan tüm sütunlarda %1 ve fazla olanları sayısı mı lazım yoksa her sütunda %1 ve fazla olanları sayısı mı lazım?
Hocam Filtreleme D ve E kolonları için ard arda yapılacak ve value değer yapıştırma işide bittikten sonra tüm filtreler açılıp, sırayla ardışık kolona geçecek işlem
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
D filtreliyken E kolonu filtrelenip her iki kolonda da %1 ve fazla olanların sayısı mı belirlenecek? Evet hocam böyle sonra 3. kolona geçecek işlem aynı şekilde 3 kolonda da %1 ve üstü olanları bulacak. En sonunda sıfırlanıp, tüm filtreleri kaldıracak ve başlangıç kolonum (N)'den N+1'e geçip aynı işlemleri yapacak.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Anlamadım maalesef. Filtre ne zaman kaldırılacak ve kaldırıldıktan sonra hangi sütuna geçilecek?
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Anlamadım maalesef. Filtre ne zaman kaldırılacak ve kaldırıldıktan sonra hangi sütuna geçilecek?
Hocam aşağıda anlattığım gibi D E ve F kolonları peşi sıra yeşil dolgulu hücreler için filtrelenecek, filtreleme aralarında 3 ve 5. adımlardaki değerler value yapıştırılacak sonra tüm filtreler kaldırılacak. ardından aynı işlemler E F ve G kolonlarına uygulanacak tüm filtreler kalkacak. Ardından F G H kolonlarına uygulanacak tüm filtreler kaldırılacak.
Tüm işlemler bittikten sonra filtre kalkıp, n+1. kolondan tekrar işlem başlayacak. aslında işlem adımları tam olarak aşağıda tanımladığım gibi.

1) D Kolununda yeşil renkli hücreleri filtrele (koşullu biçimlendirme ile %1 ve üstü olan renklendi ancak bunu değiştirebilirim)
2) Ardından E kolonunda yeşil renkli hücreleri filtrele
3) E3 Hücresinde subtotal ile filtre sonrası değişen rakamlı value yap,
4)F kolonunda yeşil renkli hücreleri filtrele
5)F4 Hücresinde subtotal ile filtre sonrası değişen rakamı value yap
6) TÜm filtreleri kaldır
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
1) D Kolununda yeşil renkli hücreleri filtrele (koşullu biçimlendirme ile %1 ve üstü olan renklendi ancak bunu değiştirebilirim)
2) Eski filtreyi kaldırmadan, E kolonunda yeşil renkli hücreleri filtrele
3) E3 Hücresinde subtotal ile filtre sonrası değişen rakamlı value yap,
4) D ve E kolonlarındaki filtreyi kaldırmadan, F kolonunda yeşil renkli hücreleri filtrele
5) F4 Hücresinde subtotal ile filtre sonrası değişen rakamı value yap
6) Tüm filtreleri kaldır .

7) D+1. Kolon yani E kolununda yeşil renkli hücreleri filtrele,
8) Eski filtreyi kaldırmadan, F kolonunda yeşil renkli hücreleri filtrele
9) F3 Hücresinde subtotal ile filtre sonrası değişen rakamlı value yap,
10) E ve F kolonlarındaki filtreyi kaldırmadan, G kolonunda yeşil renkli hücreleri filtrele
11) G4 Hücresinde subtotal ile filtre sonrası değişen rakamı value yap
12) Tüm filtreleri kaldır .

13 D+2. Kolon yani F kolununda yeşil renkli hücreleri filtrele,
14 Eski filtreyi kaldırmadan, G kolonunda yeşil renkli hücreleri filtrele
9) G3 Hücresinde subtotal ile filtre sonrası değişen rakamlı value yap,
10) F ve G kolonlarındaki filtreyi kaldırmadan, H kolonunda yeşil renkli hücreleri filtrele
11) H4 Hücresinde subtotal ile filtre sonrası değişen rakamı value yap
12) Tüm filtreleri kaldır .

...... olarak ilerleyecek. Biraz daha açıklamaya çalıştım. teşekkürler yardımınız için.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Filtre yapmadan ÇOKEĞERSAY formülüyle yaptığım aşağıdaki makroyu deneyiniz:

PHP:
Sub uc_gunluk()
sonsut = Cells(10, Columns.Count).End(xlToLeft).Column
son = Cells(Rows.Count, "C").End(3).Row
For gun = 6 To sonsut
    Cells(2, gun - 2) = WorksheetFunction.CountIf(Range(Cells(11, gun - 2), Cells(son, gun - 2)), "<=0.01")
    Cells(3, gun - 1) = WorksheetFunction.CountIfs(Range(Cells(11, gun - 2), Cells(son, gun - 2)), "<=0.01", _
                        Range(Cells(11, gun - 1), Cells(son, gun - 1)), "<=0.01")
    Cells(4, gun) = WorksheetFunction.CountIfs(Range(Cells(11, gun - 2), Cells(son, gun - 2)), "<=0.01", _
                    Range(Cells(11, gun - 1), Cells(son, gun - 1)), "<=0.01", Range(Cells(11, gun), Cells(son, gun)), "<=0.01")
Next
End Sub
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Filtre yapmadan ÇOKEĞERSAY formülüyle yaptığım aşağıdaki makroyu deneyiniz:

PHP:
Sub uc_gunluk()
sonsut = Cells(10, Columns.Count).End(xlToLeft).Column
son = Cells(Rows.Count, "C").End(3).Row
For gun = 6 To sonsut
    Cells(2, gun - 2) = WorksheetFunction.CountIf(Range(Cells(11, gun - 2), Cells(son, gun - 2)), "<=0.01")
    Cells(3, gun - 1) = WorksheetFunction.CountIfs(Range(Cells(11, gun - 2), Cells(son, gun - 2)), "<=0.01", _
                        Range(Cells(11, gun - 1), Cells(son, gun - 1)), "<=0.01")
    Cells(4, gun) = WorksheetFunction.CountIfs(Range(Cells(11, gun - 2), Cells(son, gun - 2)), "<=0.01", _
                    Range(Cells(11, gun - 1), Cells(son, gun - 1)), "<=0.01", Range(Cells(11, gun), Cells(son, gun)), "<=0.01")
Next
End Sub
Hocam istediğim sonucu vermedi. Benim amacım A kolonunda yer alan hisselerden üst üst 2 ve üst üst 3 gün boyunca %1 ve üstünde yükselenlerini bulup kaç tanesi böyle davrandıysa ilgili değeri gidip hücresine yapıştırmak ardından aynı işlemi sonraki günde tekrarlamak. Tam olarak talebimi anlatamıyorum sanırım ancak filtrelediğim yöntemin daha doğru sonuç vereceğini düşünüyorum kesişim kümesini bulmak için.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Şöyle deneyin:

PHP:
Sub uc_gunluk()
sonsut = Cells(10, Columns.Count).End(xlToLeft).Column
son = Cells(Rows.Count, "C").End(3).Row
For gun = sonsut To 6 Step -1
    Cells(2, gun) = WorksheetFunction.CountIfs(Range(Cells(11, gun - 2), Cells(son, gun - 2)), ">=0.01", _
                    Range(Cells(11, gun - 1), Cells(son, gun - 1)), ">=0.01", Range(Cells(11, gun), Cells(son, gun)), ">=0.01")
Next
End Sub
Makro son sütundan başlayarak geriye doğru son 3 günde %1 ve fazla değişenlerin sayısını 2. satıra yazar.
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Şöyle deneyin:

PHP:
Sub uc_gunluk()
sonsut = Cells(10, Columns.Count).End(xlToLeft).Column
son = Cells(Rows.Count, "C").End(3).Row
For gun = sonsut To 6 Step -1
    Cells(2, gun) = WorksheetFunction.CountIfs(Range(Cells(11, gun - 2), Cells(son, gun - 2)), ">=0.01", _
                    Range(Cells(11, gun - 1), Cells(son, gun - 1)), ">=0.01", Range(Cells(11, gun), Cells(son, gun)), ">=0.01")
Next
End Sub
Makro son sütundan başlayarak geriye doğru son 3 günde %1 ve fazla değişenlerin sayısını 2. satıra yazar.
Hocam olmadı, benim için önemli olan A kolonunda sıralanan aynı hisselerin peş peşe %1 ve üstü yükselenlerini bulmak. O nedenle sırayla filtreleme yapıyorum. Herhangi bir günde %1 ve üstü yükselen herhangi bir hisse olmasının önemi yok. Tabi bu işlemi SI kolonuna kadar devam ettirmesi gerekiyor yada benim için 3 lü gruplar şeklinde bu makroyu çalıştırmak için buton vb birşey gerekiyor.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Verdiğim kod tam olarak belirttiğiniz işlemi yapıyor zaten. Örneğin makro çalışınca I2 hücresine 1 yazıyor. 17/5, 18/5 ve 21/5'i en az %1 olacak şekilde filtrelediğimizde sadece grand total satırı kalıyor.

H2 hücresine de 1 yazıyor, 16-17 ve 18 tarihlerini filtrelediğimizde yine sadece grand total satırı kalıyor.

G2'de 2 yazıyor. 15-16 ve 17'yi filtrelediğimizde sadece ACSEL ve Grand Total satırları kalıyor.

F2'de 3 yazıyor. 14-15 ve 16'yı filtrelediğimizde ACSEL, AEFES ve Drand Total satırları kalıyor.

Yani makro son üç günün hepsinde de en az %1 değerlenen satırların sayısını doğru bir şekilde veriyor.
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Verdiğim kod tam olarak belirttiğiniz işlemi yapıyor zaten. Örneğin makro çalışınca I2 hücresine 1 yazıyor. 17/5, 18/5 ve 21/5'i en az %1 olacak şekilde filtrelediğimizde sadece grand total satırı kalıyor.

H2 hücresine de 1 yazıyor, 16-17 ve 18 tarihlerini filtrelediğimizde yine sadece grand total satırı kalıyor.

G2'de 2 yazıyor. 15-16 ve 17'yi filtrelediğimizde sadece ACSEL ve Grand Total satırları kalıyor.

F2'de 3 yazıyor. 14-15 ve 16'yı filtrelediğimizde ACSEL, AEFES ve Drand Total satırları kalıyor.

Yani makro son üç günün hepsinde de en az %1 değerlenen satırların sayısını doğru bir şekilde veriyor.
Hocam tüm dataya uyguladım. Geriden başlayarak sonuçları kontrol ediyorum. teşekkürler. Tekrar yazacağım.
 
Son düzenleme:

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Makro 10. satırda dolu olan tüm sütunlar için işlem yapmaktadır. 2. satıra yazdığı her sonuç o gün ve o günden önceki iki gün yani toplam 3 günde de en az %1 artış gösteren satır (hisse) sayısıdır. Eğer

son = Cells(Rows.Count, "C").End(3).Row

satırını

son = Cells(Rows.Count, "C").End(3).Row - 1

olarak değiştirirseniz Grand Total satırını dikkate almaz.
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Makro 10. satırda dolu olan tüm sütunlar için işlem yapmaktadır. 2. satıra yazdığı her sonuç o gün ve o günden önceki iki gün yani toplam 3 günde de en az %1 artış gösteren satır (hisse) sayısıdır. Eğer

son = Cells(Rows.Count, "C").End(3).Row

satırını

son = Cells(Rows.Count, "C").End(3).Row - 1

olarak değiştirirseniz Grand Total satırını dikkate almaz.
Hocam, harikasınız. 3 Gün üst üste %1 artan hisseler için makro çalıştı. Ben üst üst 4 güne çıkarmak yada üst üste 2 güne düşürmek istersem bu trendi koddaki hangi satırlarda değişiklik yapmam gerekir ?
">=0.01") koddaki bu satırı 0.03, 0.04 vb olarak değiştirmem de bir sakınca olmaz sanırım kod tekrar çalışır.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
2 güne indirmek ya da 4 güne çıkarmak için makrodaki formül (countifs) satırını değiştirmek gerekir.

0.01 ifadesi yüzde 1'in kod karşılığıdır. 0.02 yaparsanız en az %2 olarak hesap yapar.
 
Üst