• DİKKAT

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

sürekli olarak 30 gün içerisinde gerçekleşen aktivite sayısını hesaplama

Katılım
16 Nisan 2006
Mesajlar
43
Excel Vers. ve Dili
2013 ENGLISH
Merhaba,

Müşterilerin ilk aktivite tarihini takip eden 30 gün içerisindeki toplam aktivite adetlerini (ilk aktivite dahil olacak şekilde) yanlarına yazdırmak istiyorum. Hesaplamada dikkat edilmesi gereken konu, ikinci aktivite tarihinin 30 gün içerisinde gerçekleşmiş olması.
İkinci aktivite, ilk aktiviteden 30 günden daha fazla süre sonra gerçekleşmiş ise bu sefer ikinci aktivitenin tarihini baz alarak yine aynı hesaplama yapılmalı. Yani bu 30 gün kuralı formül içinde sürekli kontrol ediliyor olmalı.

Şimdiden teşekkürler.
 

Ekli dosyalar

Örnek sonuç yazabilir misiniz?
 
ekteki dosyada "örnek" sayfasında daha detaylı aktarmaya çalıştım.
 

Ekli dosyalar

Aşağıdaki kodları bir modüle kopyalayıp deneyiniz. Yalnız örnek dosyanızda yaklaşık 14000 satır varmış, makroyu çalıştırdığımda uzunca süre çalışmanın bitmesini bekledim, muhtemelen 20 dakikadan fazla sürdü tüm satırları ayrı ayrı incelemek. Makro her satırdaki veriyi kendisinden sonraki satırdan itibaren son satıra kadar olan veriyle karşılaştırıyor. Sıralama yapmanız iyi olmuş, çünkü makronun mantığı da tarihin sıralanmış olmasına göre çalışıyor. Eğer kodlar uygunsa daha hızlı çalışması için kişi değiştiğinde önceki kişi için çalışmayı durdurmasını da sağlayabiliriz:

Kod:
Sub aktivite()
son = Cells(Rows.Count, "A").End(3).Row

For kişi = 2 To son - 1
    For akt = WorksheetFunction.Min(kişi + 1, son) To son
        If Cells(akt, "A") = Cells(kişi, "A") And Cells(akt, "B") <= Cells(kişi, "B") + 30 Then
            If Cells(kişi, "C") = "" Then
            Cells(kişi, "C") = 2
            Else
            Cells(kişi, "C") = Cells(kişi, "C") + 1
            End If
        End If
    Next
Next

End Sub
 
Yusuf Bey hızlı dönüş için teşekkürler,
Aynı işlemi makro kullanmadan formül yazarak yapmak mümkün mü?
Eğer mümkünse o şekilde bir çözüm bulabilir miyiz?
Tercihim tek formül ile işi bitirebilmek ama çözümü kolaylaştıracaksa arada manuel işlem de yapabilirim.
 
Aşağıdaki gibi olunca daha çabuk oldu. Yalnız bu kodun düzgün çalışması için örnek dosyanızdaki gibi önce kişi sonra da tarihlerin kendi içinde sıralanmış olması gerekiyor:

Kod:
Sub aktivite()
son = Cells(Rows.Count, "A").End(3).Row

For kişi = 2 To son - 1
    For akt = WorksheetFunction.Min(kişi + 1, son) To son
        If Cells(akt, "A") = Cells(kişi, "A") Then
         If Cells(akt, "B") <= Cells(kişi, "B") + 30 Then
            If Cells(kişi, "C") = "" Then
            Cells(kişi, "C") = 2
            Else
            Cells(kişi, "C") = Cells(kişi, "C") + 1
            End If
          End If
        Else
        akt = son
        End If
    Next
Next

End Sub
 
Formül bence dosyayı çok şişirir. Dosyada her değişiklik yaptığınızda formüllerin yeniden çalışmasına neden olur.
 
Doğru söylüyorsunuz ama formülü her ay bşında bir kere uygulayıp sonra sonuçları hemen değer yapıştırmayı düşünüyordum aslında..
Sizi çok uğraştırmayacaksa formül ile çözüm bulabilirsek çok sevinirim.
 
Her ay başında makroyu bir kere çalıştırmak daha kolay değil mi?
 
Formüllü çözüm:
E1 hücresine aşağıdaki formülü yazın, bununla A sütunundaki dolu satır sayısını buluyoruz.

Kod:
=BAĞ_DEĞ_DOLU_SAY(A:A)

C2 hücresine aşağıdaki formülü yazıp aşağı doğru kopyalayın:

Kod:
=EĞER(ÇOKEĞERSAY(DOLAYLI("A"&SATIR()+1&":A"&$E$1);A2;DOLAYLI("B"&SATIR()+1&":B"&$E$1);"<="&B2+30)+1=1;"";ÇOKEĞERSAY(DOLAYLI("A"&SATIR()+1&":A"&$E$1);A2;DOLAYLI("B"&SATIR()+1&":B"&$E$1);"<="&B2+30)+1)
 
Yusuf Bey, formüllü çözüm için teşekkürler..

Formülü denediğimde tam olarak istediğim sonucu alamadım. Dosyaya 34'üncü satıra kadar olması gereken sonuçları ve bazı açıklamaları ekledim. Lütfen textbox lardaki açıklamaları inceleyiniz. Umarım daha net açıklayabilmişimdir.

Özellikle formül ile çözüm istememin sebebi, sizinle tamamını paylaşmadığım asıl çalışma dosyasında sütunların yerlerinin değişebiliyor olması; dosyayı benden başka kullanacak arkadaşların da gerektiğinde formüldeki hücreleri sayfa üzerinde kolayca düzenleyebilmelerini istiyorum.
 

Ekli dosyalar

Aşağıdaki iki formülü deneyiniz:

Kod:
=ÇOKEĞERSAY(DOLAYLI("A2:A"&$F$2);A2;DOLAYLI("B2:B"&$F$2);"<="&TAMSAYI(B2)+30;DOLAYLI("B2:B"&$F$2);">="&TAMSAYI(B2))

Kod:
=TOPLA.ÇARPIM((DOLAYLI("A2:A"&$F$2)=A2)*(TAMSAYI(DOLAYLI("B2:B"&$F$2))<=TAMSAYI(B2)+30)*(TAMSAYI(DOLAYLI("B2:B"&$F$2))>=TAMSAYI(B2)))

İlk formül saati de dikkate alır, ikinci formülde saatler dikkate alınmaz.
 
Yusuf Bey,
Saatlik formül olması gerekenlerle aynı sonuçları getiriyor. Teşekkürler!
Günlük formülde bir sonuç farklı sadece; ekteki dosyada açıkladım. Buna da bir bakabilir misiniz?
 

Ekli dosyalar

Şöyle deneyin, bu formül için sıralama şartı yoktur:
Kod:
=TOPLA.ÇARPIM((DOLAYLI("A2:A"&$F$2)=A2)*(TAMSAYI(DOLAYLI("B2:B"&$F$2))<=TAMSAYI(B2)+30)*(TAMSAYI(DOLAYLI("B2:B"&$F$2))>=TAMSAYI(B2)-30))
 
İki formülü de dosyadaki tüm kayıtlar için denedim. Maalesef ikisinin de farklı farklı yerlerde olması gereken sonucu vermediği durumlar var.
214'üncü satıra kadar bu problemli sonuçları inceleyip sarı renkle işaretledim; bakabilir misiniz? Olması gereken değerleri de F ve G sütunlarına yazdım.
Önceki mesajlarda iyice açıklayamadığım bir durum mu var acaba? Net olmayan bir yer varsa tekrar aktarmaya çalışayım. Tekrar tekrar zahmet vermek istemiyorum.
 

Ekli dosyalar

Maalesef ben çıkamadım işin içinden, kusura bakmayın.
 
Geri
Üst