İlk kez olduktan sonra kaç kez daha %1 ve üstünde artış göstermiş

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
Merhaba,
B2 hücresinde yer alan hisse senedinin, 2 nolu satırda bir önceki günkü fiyatına oranla ne kadar değişim gösterdiğini belirten % hesaplamaları bulunmaktadır.

Ekli dosyadaki sorum adımlarım aşağıda sıralanmıştır.
1) B2 Hücresinde yer alan hisse 11.05.2018 tarihinden itibaren(D kolonu) ilk %1 değişim olduktan sonra kaç gün daha %1 ve üstü değişim göstermiş. Örnek olarak 14.05.2018 tarihinde ,%9,3 değişmiş ancak sonraki gün -%3,2 değiştiği için beni ilgilendirmiyor. Ancak 16.05.2018 tarihinde %2,2 değiştikten sonraki 3 gün boyunca daha %2,2 değişmiş. Bana bu değişimin adeti gerekiyor., yani 3.
Bu değerleri verebilecek bir formül veya makro konusunda yardımınızı rica ederim.
 

Ekli dosyalar

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
Function YANYANA_SAY(Alan As Range, Optional Kriter As String = "X")
Dim X As Integer, Say As Integer, Maksimum As Integer

Application.Volatile True

For X = Alan.Cells(1, 1).Column - Alan.Column + 1 To Alan.Cells(1, Alan.Columns.Count).Column Step 2
If Alan.Cells(1, X) = Kriter Then
Say = Say + 1
If Say > Maksimum Then Maksimum = Say
Else
Say = 0
End If
Next

YANYANA_SAY = Maksimum
End Function

Forumda yan yana say için yukarıdaki makroyu buldum. Bu makroda nasıl bir düzenleme yapabilirim. ? Bu makroyu rakamlara uyarlamam ve her satır için ayrı ayrı çalışacak şekilde yapmam gerekiyor ekteki dosyada olduğu gibi.
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
Makroyu ">=0,01" vb denemeler yaparak çalıştıramadım. Yardımcı olabilecek var mı?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,751
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki gibi deneyiniz.

Kullanımı; =YANYANA_SAY(D2:AF2;">0")

C++:
Option Explicit

Function YANYANA_SAY(Alan As Range, Kriter As Variant)
    Dim Veri As Range, Say As Integer, Maksimum As Integer
    
    Application.Volatile True
    
    For Each Veri In Alan
        If Application.Evaluate(Replace(Veri.Value, ",", ".") & Replace(Kriter, ",", ".")) Then
            Say = Say + 1
            If Say > Maksimum Then Maksimum = Say
        Else
            Say = 0
        End If
    Next
    
    YANYANA_SAY = Maksimum
End Function
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
Aşağıdaki gibi deneyiniz.

Kullanımı; =YANYANA_SAY(D2:AF2;">0")

C++:
Option Explicit

Function YANYANA_SAY(Alan As Range, Kriter As Variant)
    Dim Veri As Range, Say As Integer, Maksimum As Integer
   
    Application.Volatile True
   
    For Each Veri In Alan
        If Application.Evaluate(Replace(Veri.Value, ",", ".") & Replace(Kriter, ",", ".")) Then
            Say = Say + 1
            If Say > Maksimum Then Maksimum = Say
        Else
            Say = 0
        End If
    Next
   
    YANYANA_SAY = Maksimum
End Function
Hocam merhaba, "" ile belirtilen yerlere kriter mi yazmam gerekiyor? Eğer öyleyse ne yazmalıyım ? Makro bu haliyle ilk %1 artış olduktan sonra yan yana kaç kez daha artış olmuş soruma cevap vermedi.
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
Korhan Hocam, ayrıca ben 0,01 , 0,02 vb olarak başka kriterlerde yapmak istiyorum. Bunun için makroda ve formülde hangi veriyi değiştirmem gerekiyor?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,751
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Fonksiyonun sonundaki kriter bölümünü kullanmanız gerekiyor.

Yüzde birden büyük eşit yan yana artışları saymak için örnek kullanım;

=YANYANA_SAY(D2:AF2;">=0,01")
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
Fonksiyonun sonundaki kriter bölümünü kullanmanız gerekiyor.

Yüzde birden büyük eşit yan yana artışları saymak için örnek kullanım;

=YANYANA_SAY(D2:AF2;">=0,01")
Hocam çalıştı, sadece şöyle bir problem var, belirlenen aralık için yan yana en fazla kaç tane varsa o bilgiyi getiriyor. Örnek olarak, eğer inceleme alanımda aynı anda 3 ve 4 tane farklı yerlerde yan yana 0,01 üstü olsun bana 4 tane olanı söylüyor. Bu kapsamda yeni bir sorum ortaya çıktı. Eğer arada boşluklar olmak üzere 4 farklı yerde 3'erli gruplar halinde 0,01 ve üstü hücreler olsun. Baktığın satırda 4 tane yan yana gelmiş grupvar diyebilecek bir kod mümkün mü?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,751
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Mümkün.

En az kaçarlı grup olacak?
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
Mümkün.

En az kaçarlı grup olacak?
Hocam en az 2 li gruplar halinde olmalı, en çoğu zaten ilgili makroda çalışıyor. Ben bir satır boyunca 20 kez en az 2 li gruplar halinde üstü üste artış olmuş sorusuna cevap arıyorum.
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
Korhan Hocam, ilave açıklama yapmam gerekir mi?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,751
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Peki diyelim ki satırda 4 adet peşpeşe 0.01 üstü ve sonrasında boşluk daha sonra tekrar 2 adet peşpeşe 0.01 üstü değer var.

Sonuçta kaç adet saymasını istiyorsunuz?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,751
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyin bakalım istediğiniz sonucu verecek mi?

Fonksiyonu önceki mesajlarımda önerdiğim şekilde kullanacaksınız. Kullanımında bir değişiklik yoktur.

C++:
Option Explicit

Function YANYANA_SAY(Alan As Range, Kriter As Variant)
    Dim Veri As Range, Say As Integer, Adet As Integer
   
    Application.Volatile True
   
    For Each Veri In Alan
        If Application.Evaluate(Replace(Veri.Value, ",", ".") & Replace(Kriter, ",", ".")) Then
            Say = Say + 1
        Else
            If Say >= 2 Then Adet = Adet + 1
            Say = 0
        End If
    Next
   
    YANYANA_SAY = Adet
End Function
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
Deneyin bakalım istediğiniz sonucu verecek mi?

Fonksiyonu önceki mesajlarımda önerdiğim şekilde kullanacaksınız. Kullanımında bir değişiklik yoktur.

C++:
Option Explicit

Function YANYANA_SAY(Alan As Range, Kriter As Variant)
    Dim Veri As Range, Say As Integer, Adet As Integer
  
    Application.Volatile True
  
    For Each Veri In Alan
        If Application.Evaluate(Replace(Veri.Value, ",", ".") & Replace(Kriter, ",", ".")) Then
            Say = Say + 1
        Else
            If Say >= 2 Then Adet = Adet + 1
            Say = 0
        End If
    Next
  
    YANYANA_SAY = Adet
End Function
Hocam yukarıda yazdığınız makronun sarı dolgulu hücrede 31.05.2018 21.06.2018 tarih aralığında 3 sonucunu vermesi gerekirdi. Yani %1 ve üstü artış ilgili aralıkta en az 3 kez oluşmuş. Bir kez olduktan sonra kaç gün boyunca olduğunun bu makroda önemi yok. Grup sayısını vermesi yeterli. En az 2 gün en çok maks. Bu şekilde mümkün mü?


218868
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,751
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
21.06.2018 hücresi boş olduğu için fonksiyonun hata vermesi gerekir. Siz nasıl 2 değerine ulaştınız?

Boş hücrelerde işlem yapmaması için koda küçük bir ekleme yaptım.

#13 nolu mesajımda ki fonksiyonu tekrar deneyiniz.
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
21.06.2018 hücresi boş olduğu için fonksiyonun hata vermesi gerekir. Siz nasıl 2 değerine ulaştınız?

Boş hücrelerde işlem yapmaması için koda küçük bir ekleme yaptım.

#13 nolu mesajımda ki fonksiyonu tekrar deneyiniz.
Hocam haklısını boş hücrelerde hata veriyor. Ekran alıntısında gönderdiğim analizde aralığıma boş hücreyi dahil etmedim, bu yüzden hata vermedi. Ama ilgili aralıkta 3 değerini vermesi gerekirdi onu alamıyorum.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,751
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kodu revize ettim. Tekrar deneyiniz
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,751
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
#13 nolu mesajdaki kodu revize ettim.

Bu durumu #15 nolu mesajımda da açıklamıştım. Sanırım gözünüzden kaçtı.
 

uyelik.ben

Altın Üye
Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
Altın Üyelik Bitiş Tarihi
26-05-2025
#13 nolu mesajdaki kodu revize ettim.

Bu durumu #15 nolu mesajımda da açıklamıştım. Sanırım gözünüzden kaçtı.
Hocam kusura bakmayın, mevcut mesajların revize edilebildiğini bilmiyordum. Kod tam olarak istediğim şekilde sonucu veriyor. Benimle 2 çalışan kod paylaşmış oldunuz. 1.si en çok kaç gün yükseldi ise o bilgiyi veriyor, diğer kod üst üste yükselen günlerin grup sayısını veriyor. Teşekkürler, elinize sağlık.
 
Üst