• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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

Katılım
20 Mayıs 2020
Mesajlar
50
Excel Vers. ve Dili
Office 365 2020
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

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.
 
Makroyu ">=0,01" vb denemeler yaparak çalıştıramadım. Yardımcı olabilecek var mı?
 
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
 
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.
 
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?
 
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")
 
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ü?
 
Mümkün.

En az kaçarlı grup olacak?
 
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?
 
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
 
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
 
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.
 
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.
 
Kodu revize ettim. Tekrar deneyiniz
 
#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ı.
 
#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.
 
Geri
Üst