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

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,636
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Örnek sonuç yazabilir misiniz?
 
Katılım
16 Nisan 2006
Mesajlar
43
Excel Vers. ve Dili
2013 ENGLISH
ekteki dosyada "örnek" sayfasında daha detaylı aktarmaya çalıştım.
 

Ekli dosyalar

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
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
 
Katılım
16 Nisan 2006
Mesajlar
43
Excel Vers. ve Dili
2013 ENGLISH
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.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
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
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Formül bence dosyayı çok şişirir. Dosyada her değişiklik yaptığınızda formüllerin yeniden çalışmasına neden olur.
 
Katılım
16 Nisan 2006
Mesajlar
43
Excel Vers. ve Dili
2013 ENGLISH
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.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Her ay başında makroyu bir kere çalıştırmak daha kolay değil mi?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
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)
 
Katılım
16 Nisan 2006
Mesajlar
43
Excel Vers. ve Dili
2013 ENGLISH
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

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
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.
 
Katılım
16 Nisan 2006
Mesajlar
43
Excel Vers. ve Dili
2013 ENGLISH
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

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Şö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))
 
Katılım
16 Nisan 2006
Mesajlar
43
Excel Vers. ve Dili
2013 ENGLISH
İ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

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Maalesef ben çıkamadım işin içinden, kusura bakmayın.
 
Üst