şarta bağlı en büyük tarih

Schuba

Altın Üye
Katılım
27 Ocak 2016
Mesajlar
170
Excel Vers. ve Dili
microsoft 365 family türkçe
Altın Üyelik Bitiş Tarihi
21-02-2026
Arkadaşlar şöyle bir formüle ihtiyacım var yapabilen varsa yardımcı olursa çok sevinirim..

Benim istediğim
(b)sütununda aynı değerlerde veya fark değerlerde veriler var (af) sütunundada ise bu verilerin giriş tarihleri var

benim istediğim ise (b) sütunundaki veriye göre
(af) sütunundaki en büyük olan tarihi bulmak

yanlız burda önemli olan bir şey var oda
=toplam.çarpım
=mak(eğer
veya herhangi bir dizi formülü
olmadan yapmak
çünkü bu formüller exceli ciddi anlamda kasıyor ve ben bu formülü yaklaşık 30.000 satıra yazcağım için excel ciddi anlamda kasacaktır

örneğin aşağıdaki formül benim istediğimi tam anlamıyla yapıyor fakat bu formül bir dizi formülü olduğu için ve hele hele 30.000
satıra yazılınca excel ciddi şekilde kasıyor.

{=mak(eğer($b$25:$b$30000=b25;$af$25:$af$30000))}

aslında =düşeyara(mak şeklinde bir formül olabilir ama bu formülde tarih değilde veriyi getiriyor yani bu formül işlemi tam tersine yapsa benim işimi görecek

bu iş formülle olmayacaksa kodlada olabilir
bu işi iyi bilen arkadaşlar kod şeklindede yazarsa sevinirim

fakat eğer kodla yazılıcaksa kodun dinamik olması gerekiyor
çünkü sürekli aynı veriye ait değer girildiğinden dolayı satırdaki en büyük tarihte değişebilir olmalı..
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Merhaba.

Gereksiz mesajlaşmalar yerine bence en iyisi bir örnek belge yüklemeniz.
Örnek belgenin, gerçek belgeyle aynı yapıya sahip olmasına özen gösteriniz.
(sayfa yapısı, satır/sütun yapısı, veri türü, başlık satırı konumu ve başlıklar gibi)

Alternatif cevapların gelebileceği bir soru gibi görünüyor.
.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,275
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Alternatif olarak bu formülleri 30.000 satıra uygulamak yerine istediğiniz satıra çift tıklayınca dinamik olarak sonucu size gösterecek bir yapı kullanmanız daha akıllıca olabilir.

Sayfanızın kod bölümüne aşağıdaki kodu uygulayıp deneyiniz.

25. satır ve sonraki satırlarda hücrelere çift tıkladığınızda sonuç alabilirsiniz.

Kod:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim Formul As String
    If Intersect(Target, Range("A25:AF" & Rows.Count)) Is Nothing Then Exit Sub
    Cancel = True
    Formul = "=MAX(IF(B25:B30000=""" & Cells(Target.Row, "B") & """,AF25:AF30000))"
    MsgBox Cells(Target.Row, "B") & Chr(10) & Chr(10) & "Ürününün son alım tarihi ; " & Format(Evaluate(Formul), "dd.mm.yyyy")
End Sub
 

Schuba

Altın Üye
Katılım
27 Ocak 2016
Mesajlar
170
Excel Vers. ve Dili
microsoft 365 family türkçe
Altın Üyelik Bitiş Tarihi
21-02-2026
En büyük tarih kod

hocam öncelikle geri dönüşünüz için teşekkürler

gönderdğiniz kod gayet güzel çalışıyor ve sonucu doğru bir şekilde veriyor
fakat benim istediğim sonucu tıklayarak görmek değilde satırda dinamik olarak görmek çünkü bunları raporlamam gerekiyor filitreleyerek

konuyu daha iyi anlatabilmek için örnek bir dosya ekledim ve detaylı bir şekildede tam olarak ne istediğimi belirttim bir bakar yardımcı olursanız çok sevinirim şimdiden teşekkür ederim..

iyi çalışmalar...............
 

Ekli dosyalar

Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Alternatif;

37000 kayıt için 25 saniyede sonuç veriyor.
Daha hızlısı için farklı çalışmalar yapılabilir

Kod:
Option Explicit

Dim kapatilanfisler(100000, 3) As String
Dim bakimliste(100000, 2) As String
Dim cari As String
Dim sontarih, tarih, bakimtarihi As Date
Dim bakimsayisi, kapalisayisi, i, j, i1, sonsatir, tarihsatir As Long
Dim caribakim, mebran, durum As String
Dim mebranbuldu, carivar As Boolean
Dim sonsatirbakim, sonsatirkapali As Long

Sub koru()
ActiveSheet.Protect Password:="1122", DrawingObjects:=True, contents:=True, Scenarios:=True, AllowFiltering:=True, userinterfaceonly:=True
End Sub

Sub koruma()
    ActiveSheet.Unprotect "1122"
End Sub


Sub Auto_Open()
    If CDate(Cells(1, 1).Value) <> Date Then Call menu2
    Sheets("KAPATILAN FİŞLE").Select
    Call koru
    Sheets("BAKIM TAKİP").Select
    Cells(1, 1).Value = Date
    Call koru
End Sub


Sub menu2()
   Sheets("BAKIM TAKİP").Select
   Call koruma
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False
    Call sifirla
    Call yukle_bakim2
    Call kontrol2
    Call sonuc_yaz2
    Call sonkontrol
   Application.ScreenUpdating = True
   Application.DisplayAlerts = True
   Sheets("KAPATILAN FİŞLER").Select
   Call koru
   Sheets("BAKIM TAKİP").Select
   Call koru
End Sub

Sub sonkontrol()
   Sheets("BAKIM TAKİP").Select
   sonsatirbakim = Cells(Rows.Count, "B").End(3).Row
   sonsatirkapali = Sheets("KAPATILAN FİŞLER").Cells(Rows.Count, "B").End(3).Row
   For i = 5 To sonsatirbakim
     cari = Cells(i, "B").Value
     durum = Cells(i, "Z").Value
     If WorksheetFunction.CountIf(Sheets("KAPATILAN FİŞLER").Range("B1:B" & sonsatirkapali), cari) > 0 And durum = "BİLİNMİYOR" Then
         Cells(i, "AF").Value = "Hatalı Bakım Türü"
     End If
   Next i
End Sub

Sub sifirla()
   For i = 1 To 100000
     bakimliste(i, 1) = ""
     bakimliste(i, 2) = ""
     
     kapatilanfisler(i, 1) = ""
     kapatilanfisler(i, 2) = ""
     kapatilanfisler(i, 3) = ""
   Next i
End Sub

Sub sonuc_yaz2()
   Sheets("BAKIM TAKİP").Select
   sonsatir = Cells(Rows.Count, "B").End(3).Row
   For i = 5 To sonsatir
     Cells(i, "Z").Value = ""
     Cells(i, "Z").Value = bakimliste(i - 4, 2)
   Next i
End Sub

Sub kontrol2()
   Sheets("KAPATILAN FİŞLER").Select
   sonsatir = Cells(Rows.Count, "B").End(3).Row
   For i1 = 1 To bakimsayisi
     caribakim = bakimliste(i1, 1)
     sontarih = CDate("01.01.1970")
     tarihsatir = 0
     mebranbuldu = False
     carivar = False
     For i = 5 To sonsatir
       cari = Cells(i, "B").Value
       tarih = CDate(Cells(i, "E").Value)
       mebran = ""
       For j = 1 To 17 Step 2
           mebran = mebran & Cells(i, 9 + j) & ","
       Next j
       If caribakim = cari And sontarih <= tarih And InStr(mebran, "MEBRAN") > 0 Then
          sontarih = tarih
          tarihsatir = i
          mebranbuldu = True
       End If
       
       If caribakim = cari And mebranbuldu = False And carivar = False Then
          sontarih = tarih
          tarihsatir = i
          carivar = True
       End If
       
     Next i
     
     If tarihsatir = 0 Then bakimliste(i1, 2) = "BİLİNMİYOR"
     
     If tarihsatir >= 1 Then
        bakimtarihi = sontarih + 540
        If bakimtarihi >= Date Then
           bakimliste(i1, 2) = "PERYODİK"
        Else
           bakimliste(i1, 2) = "GENEL"
        End If
     End If
   Next i1
End Sub

Sub yukle_bakim2()
   Sheets("BAKIM TAKİP").Select
   sonsatir = Cells(Rows.Count, "B").End(3).Row
   bakimsayisi = sonsatir - 4
   For i = 5 To sonsatir
     cari = Cells(i, "B").Value
     bakimliste(i - 4, 1) = cari
     bakimliste(i - 4, 2) = ""
   Next i
End Sub
 
Son düzenleme:

Schuba

Altın Üye
Katılım
27 Ocak 2016
Mesajlar
170
Excel Vers. ve Dili
microsoft 365 family türkçe
Altın Üyelik Bitiş Tarihi
21-02-2026
Enbüyük tarih

hocam ellerinize sağlık tam istediğim gibi olmuş

fakat ben bu gönderdiğiniz kodu (ThisWorkbook) un kod bölümüne yapıştırdım
kodun çalışması için geliştirici sekmesinden makroları tıklıyıp makroların içinden (ThisWorkbook.menu) makrosunu tıklatarak çalıştırabiliyorum

bir önceki mesajımda dikkat ederseniz bu kodun çalışma kitabı açıldığında çalışsın istemiştim acaba kodu ben yanlış yeremi yapıştırdım yoksa siz bu şekildemi kodu yazdınız.

eğer bu şekilde yazdıysanız bunu çalışma kitabı ilk açıldığında çalışacak hale getirebilirmisiniz enazından işlem otomatik olmuş olur..

BU ARADA MÜŞTERİ LİSTESİNDEN KASTIM BAKIM TAKİP SAYFASIDIR SAYFANIN İSMİNİ DEĞİŞTİRMEYİ UNUTMUŞUM NEYSEKİ FARK ETMİŞSİNİZ.............
 
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
hocam ellerinize sağlık tam istediğim gibi olmuş

fakat ben bu gönderdiğiniz kodu (ThisWorkbook) un kod bölümüne yapıştırdım
kodun çalışması için geliştirici sekmesinden makroları tıklıyıp makroların içinden (ThisWorkbook.menu) makrosunu tıklatarak çalıştırabiliyorum

bir önceki mesajımda dikkat ederseniz bu kodun çalışma kitabı açıldığında çalışsın istemiştim acaba kodu ben yanlış yeremi yapıştırdım yoksa siz bu şekildemi kodu yazdınız.

eğer bu şekilde yazdıysanız bunu çalışma kitabı ilk açıldığında çalışacak hale getirebilirmisiniz enazından işlem otomatik olmuş olur..

BU ARADA MÜŞTERİ LİSTESİNDEN KASTIM BAKIM TAKİP SAYFASIDIR SAYFANIN İSMİNİ DEĞİŞTİRMEYİ UNUTMUŞUM NEYSEKİ FARK ETMİŞSİNİZ.............
Kod güncellendi.
Program her açılışta A1 hücresine bakar. Tarih aynı günün tarihinden farklı ise güncelleme yapar. Aynı tarih ise işlem yapmaz.

El il güncelleme için bir form butonu ekleyip menu makrosunu butona bağlayın.
 

Schuba

Altın Üye
Katılım
27 Ocak 2016
Mesajlar
170
Excel Vers. ve Dili
microsoft 365 family türkçe
Altın Üyelik Bitiş Tarihi
21-02-2026
En büyük tarih kod

hocam dediğiniz gibi kodu değiştirdim fakat çalışma kitabını açtığımda güncellemedi (bakım takip a1 ) hücresine yarının tarihini yazdım olmadı bugünün tarihini girdim gene olmadı
(a1) hücresine ne yazmam gerekiyorki açıldığında güncel
ama butonla güncellemedev sorun yok çalışıyor

birde kodda benim anlatımımdan dolayı eksik birşey farkettim
hani demiştimya 18 ay içerisinde mebran değiştiyse "PERYODİK
değişmedi ise "GENEL" ve o cariye ait herhangi bir kayıt yoksa "BİLİNMİYOR"
yazssın demiştik hatırlarsanız

fakat şöyle bir durum ouşuyor diyelimki (1 CARİ KODU İLE KAYDEDİLEN "KAMİL KARA") isimli müşteriye daha önce 2 veya 3 defa gitmişiz ama "MEBRANINI"ı değiştirmemişiz kapatılan fişler sayfasında 2 veya 3 defa farketmez kaydı var.

burda bize vermesi gereken sonucun kapatılan fişlerdeki KAMİL KARA isimli müşterinin cari koduna bakarak en eski tarihi baz alarak eyer 540 günden küçük ise "PERYODİK" 540 günden büyük ise "GENEL" sonucunu vermesi lazım
ama mevcut kodda "KAMİL KARA" isimli müşteriye ait kaç kayıt olursa olsun eğer hiç mebran değişmedi ise bize hep "BİLİNMİYOR"
sonucunu veriyor.

halbuki burda bizim almamız gereken sonuç "PERYODİK" olması gerekiyor çünkü daha önce 2 veya 3 defa gitmişiz sadece mebranını değişmemişiz

"BİLİNMİYOR " sonucunu bize sadece kapatılan fişlerde o cariye ait herhangi bir kayıt yoksa vermesi gerekiyor örnek ("YILMAZ IŞIK ") isimli müşteri gibi.

bunuda düzeltebilirseniz çok sevinirim .........

dosyayı tekrar ekliyorum kontrol edebilmeniz açısından....
 

Ekli dosyalar

Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
hocam dediğiniz gibi kodu değiştirdim fakat çalışma kitabını açtığımda güncellemedi (bakım takip a1 ) hücresine yarının tarihini yazdım olmadı bugünün tarihini girdim gene olmadı
(a1) hücresine ne yazmam gerekiyorki açıldığında güncel
ama butonla güncellemedev sorun yok çalışıyor
Kodu Module1 e yapıştırın. Thisworkbook da kalmasın.


burda bize vermesi gereken sonucun kapatılan fişlerdeki KAMİL KARA isimli müşterinin cari koduna bakarak en eski tarihi baz alarak eyer 540 günden küçük ise "PERYODİK" 540 günden büyük ise "GENEL" sonucunu vermesi lazım
Bu durumda mebran artık dikkate alınmayacak anladığım kadarı ile ,
540 güne göre genel yada peryodik olup olmadığı belirlenecek. Doğru mudur?
 

Schuba

Altın Üye
Katılım
27 Ocak 2016
Mesajlar
170
Excel Vers. ve Dili
microsoft 365 family türkçe
Altın Üyelik Bitiş Tarihi
21-02-2026
Mebran

Konuyu şöyle özetliyim
genel bakim bizim için mebranın değişmiş olmasi demek ve genel bakım dediğimiz olayda 540 günde bir yani 18 ayda bir oluyor
Fakat bazen bu mebranı başka bir değişle genel bakımı
Müşterinin isteği doğrultusunda daha erken veya daha geç değiştirebiliyoruz
Yani olmasi gereken 540 gün ama herzaman
540 günde bir standart olarak malesef değişmiyor
o yüzden her zaman mebranın en son değiştiği tarihin üstüne 540 gün koymamız gerekiyor
O yüzden mebrani her zaman baz almamız gerekiyor

Aslinda en son mevcut gönderdiğiniz kodda yapacağımız tek değişiklik daha öncesinden bu müşteriye bir kere dahi gidilmişse yani kapatılan fişlerde kaydı varsa ve hiç mebran değişmediyse ve 540 gün yani 18 ay dolmadıysa sonuca (bilinmiyor) değilde (peryodik) yazdırmak, eğer 540 günü geçtiyse (genel) yazdırmak

Şuanki mevcutda kapatılan fişlerde daha öncesinden 10 kere gidilmiş olsa dahi eğer hiç mebran değişmediyse (bilinmiyor) sonucunu veriyor.

Halbuki O müşteriye birkere dahi gittiysek, yani kapatılan fişlerde o cariye ait bir tane bile kayıt varsa o müsteriye bir daha gideceğimiz zaman nasıl bir bakım yapacağımızı biliyoruz demektir
dolayisiyla (bilinmiyor)
Sonucunu almamamiz gerekiyor.

(Bilinmiyor) sonucunu sadece kapatılan fişlerde o cariye ait hiç kayıt yoksa göstersin
 
Son düzenleme:
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Konuyu şöyle özetliyim
genel bakim bizim için mebranın değişmiş olmasi demek ve genel bakım dediğimiz olayda 540 günde bir yani 18 ayda bir oluyor
Fakat bazen bu mebranı başka bir değişle genel bakımı
Müşterinin isteği doğrultusunda daha erken veya daha geç değiştirebiliyoruz
Yani olmasi gereken 540 gün ama herzaman
540 günde bir standart olarak malesef değişmiyor
o yüzden her zaman mebranın en son değiştiği tarihin üstüne 540 gün koymamız gerekiyor
O yüzden mebrani her zaman baz almamız gerekiyor

Aslinda en son mevcut gönderdiğiniz kodda yapacağımız tek değişiklik daha öncesinden bu müşteriye bir kere dahi gidilmişse yani kapatılan fişlerde kaydı varsa ve hiç mebran değişmediyse ve 540 gün yani 18 ay dolmadıysa sonuca (bilinmiyor) değilde (peryodik) yazdırmak, eğer 540 günü geçtiyse (genel) yazdırmak

Şuanki mevcutda kapatılan fişlerde daha öncesinden 10 kere gidilmiş olsa dahi eğer hiç mebran değişmediyse (bilinmiyor) sonucunu veriyor.

Halbuki O müşteriye birkere dahi gittiysek, yani kapatılan fişlerde o cariye ait bir tane bile kayıt varsa o müsteriye bir daha gideceğimiz zaman nasıl bir bakım yapacağımızı biliyoruz demektir
dolayisiyla (bilinmiyor)
Sonucunu almamamiz gerekiyor.

(Bilinmiyor) sonucunu sadece kapatılan fişlerde o cariye ait hiç kayıt yoksa göstersin
SAFFET BALCI 2014 de mebran değişmiş ancak en güncel 2016 da değişmemiş. Şimdi bu genel mi peryodik mi.

Bakım takip teki cariler için kuralları ile sonuçları dosyaya ekler misiniz.
Akşam akşam yorgunluktan mıdır bilemedim. Mantığını kuramadım :)
 

Schuba

Altın Üye
Katılım
27 Ocak 2016
Mesajlar
170
Excel Vers. ve Dili
microsoft 365 family türkçe
Altın Üyelik Bitiş Tarihi
21-02-2026
en büyük tarih

hocam hakkınızı helal edin uraştırdık sorun sizde değil hakikaten biraz karışık veya ben tam izah edemedim.....

ekli dosyada şartları madde madde yazdım bakabilirsiniz...

SAFFET BALCI ÖRNEĞİNİ ELE ALINCA

dediğiniz gibi (mebran) (01.06.2014) ve (01.06.2016) olmak üzere iki kere değişmiş

bu örnekten yola cıkarak enson değişim tarihi (01.06.2016) olduğu için ve bu gün itibari ile daha 540 günü geçmediği içi "PERYODİK" sonucunu almamız gerekiyor.

ha eyer 01.06.2016 da (mebran) "değişmemiş" olsaydı
o zamanda enson (mebran) değişim tarihi (01.06.2014) olacağı için dolayısıyla bugün itibari ile 540 günü de geçmiş olacağı için bu seferde"GENEL" sonucunu almamız gerekiyordu

aslında burda sorun yok yazdığınız kod zaten enson mebran değişim tarihine bakıyor ve bu gün itibari ile 540 gün olmadıysa daha "PERYODİK" 540 günü geçtiyse "GENEL" sonucunu veriyor zaten

burdaki asıl sorun şu kapatılan fişlerde örneğin diyelimki SAFFET BALCI'ya ait
1-2 veya daha fazla kayıt var ama daha hiç (mebran) değişmemş
işte burda bize mevcut yazdığınız kod "BİLİNMİYOR" sonucunu veriyor
halbuki bize vermesi gereken sonuç"PERYODİK" olması gerekiyor

çünkü biz bu müşteriye daha önce gittik ve bir sonraki peryodun ne olması gerektiğini biliyoruz

daha doğrusu bu sorun kapatılan fişlerde o carinin "mebranı" değişene kadar devam ediyor .

mebran değiştikten sonra bu sorun ortadan kalkıyor
çünkü kod hep son mebran tarihine baktığı için ona göre hesaplama yapıyor.

bu müşteriye 10 defa bile gidilmiş olsa yani o carinin kapatılan fişlerde 10 adet farklı tarihlerde kaydı olsa bile "mebranı" değişmedi ise kod onu "bilinmiyor" diye yazıyor çünkü en son değişim tarihine bakacağı bir"mebran yok

benim istediğim ise diyelimki aynı cari kaydıyla kapatılan fişlerde 10 adet kayıt var
eğer o kayıtların herhangi bir tanesinde mebran değişti ise son değişen mebran tarihinin üzerine 540 gün koysun bugün itibari ile 540 gün daha dolmadıysa "PERYODİK"geçtiyse "GENEL" yazssın

yok eyer daha hiç mebran değişmedi ise o zamanda ilk yapılan bakım tarihini baz alsın
ve o tarihin üstüne 540 gün koysun bugün itibari ile 540 gün daha dolmadıysa "PERYODİK"geçtiyse "GENEL" yazssın
 

Ekli dosyalar

Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Kod güncellendi.

Modul1 deki kodu tamamen silip bunu yapıştırın.

Bu tarih mantığını doğru kurdum bilmiyorum. Kontrol ediniz.

bakimtarihi = tarih + 540
If bakimtarihi > Date Then
durum = "PERYODİK"
Else
durum = "GENEL"
End If
 

Schuba

Altın Üye
Katılım
27 Ocak 2016
Mesajlar
170
Excel Vers. ve Dili
microsoft 365 family türkçe
Altın Üyelik Bitiş Tarihi
21-02-2026
hocam bu kod olmaz bu kod sadece bakım tarine bakıyor eyer 540 günden küçükse "peryodik" değilse "genel" yazıyor

daha önce gönderdiğiniz kod aslında gayet güzel tam istediğim gibi çalışıyor tabiki daha kısa veya tek kod içinde bu iş doğru ve hızlı yapacak yeni bir kod olursa tabiki daha iyi olur yok olmuyorsa bu kodda işimi gayet güzel görür

sadece tek sorun kapatılan fişlerde müşterinin daha önce kaydı olmasına ramen hiç "MEBRAN" değişmediği için sonuca "BİLİNMİYOR" yazması

"BİLİNMİYOR" sonucunu sadece ve sadece bakım takip sayfasında kaydı
olupta kapatılan fişlerde hiç kaydı olmayan müşteriler için almalıyız

kuralları aşağıda belirttim tekrardan dikkatli okursanız anlıyacaksını mutlaka

PERYODİK KUALLARI
1 :kapatılan fişlerde o cariye ait 1 tane bile kayıt varsa ve o kayıtların
herhangi birtanesinde "MEBRAN" YAZMIYORSA
o cariye ait ilk kayıt tarihine yani en
eski kayıt tarih'e bakarak 540 gün olmadıysa daha "PERYODİK" yazıcak

2 :kapatılan fişlerde o cariye ait 1 tane bile kayıt varsa ve o kayıtların
herhangi birtanesinde "MEBRAN" YAZIYOR İSE
bu seferde en son yani en yakın tarihte
değişen "MEBRANIN" tarihine bakarak 540 gün olmadıysa daha
"PERYODİK" yazıcak

GENEL KUALLARI
1 :kapatılan fişlerde o cariye ait 1 tane bile kayıt varsa ve o kayıtların
herhangi birtanesinde "MEBRAN" YAZMIYORSA
o cariye ait ilk kayıt tarihine yani en
eski tarih'e bakarak 540 gün"ü geçti ise "GENEL" yazıcak

2 :kapatılan fişlerde o cariye ait 1 tane bile kayıt varsa ve o kayıtların
herhangi birtanesinde "MEBRAN" YAZIYOR İSE
bu seferde en son yani en yakın tarihte
değişen "MEBRANIN" tarihine bakarak 540 gün'ü geçti ise
"GENEL" yazıcak

BİLİNMİYOR KUALLARI
1: bakım takip sayfasında daki herhangi bir carinin
kapatılan fişlerde 1 hiç kaydı yoksa "BİLİNMİYOR" yazıcak

yani yukardaki kurallara baktığımız zaman mevcut kodla karşılaştırınca yanlış olan şeyin kapatılan fişlerdeki o cariye ait kayıtların içinde"MEBRAN" yoksa "BİLİNMİYOR" yazmasıdır
bu durumda kodun doğru sonuç vermesi için yapması gereken eyer
o cariye ait kayıtların içinde "MEBRAN" yoksa "BİLİNMİYOR" değilde
o cariye ait kayıtların içinde ilk kaydın yani en eski tarihli kaydın tarihine bakmak olur

not: şun mevcut daha önce gönderdiğiniz kod yukardaki kurallardan
sadece 2 tanesini yapmıyor
peryodik kuralları (1) ve genel kuralları (1)
bu iki kural haricindekin diğer kuralları zaten yapıyor...

kodu tekrardan ekledim kontrol edebilmeniz için bide kodda küçük değişiklikler yaptım sayfam korumalı olduğu için.
sanırım düzelmesi gereken kısım "Sub kontrol()" başlıklı kod..

Kod:
Dim kapatilanfisler(100000, 3) As String
Dim bakimliste(100000, 2) As String
Dim cari As String
Dim sontarih, tarih, bakimtarihi As Date
Dim bakimsayisi, kapalisayisi As Long

Sub Auto_Open()
   If CDate(Cells(1, 1).Value) <> Date Then Call menu
ActiveSheet.Unprotect "1122"
   Sheets("BAKIM TAKİP").Cells(1, 1).Value = Date
ActiveSheet.Protect "1122"
End Sub

Sub menu()
ActiveSheet.Unprotect "1122"
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False
    Call yukle_bakim
    Call kontrol
    Call sonuc_yaz
   Application.ScreenUpdating = True
   Application.DisplayAlerts = True
ActiveSheet.Protect "1122"
End Sub

Sub sonuc_yaz()
ActiveSheet.Unprotect "1122"
   Set shbakim = Sheets("BAKIM TAKİP")
   sonsatir = shbakim.Cells(Rows.Count, "B").End(3).Row
   For i = 25 To sonsatir
   ActiveSheet.Unprotect "1122"
    Application.Calculation = xlManual
     shbakim.Cells(i, "B").Value = bakimliste(i - 4, 1)
     shbakim.Cells(i, "Z").Value = bakimliste(i - 4, 2)
   Next i
ActiveSheet.Protect "1122"
End Sub

Sub kontrol()
ActiveSheet.Unprotect "1122"
   Set shkapali = Sheets("KAPATILAN FİŞLER")
   sonsatir = shkapali.Cells(Rows.Count, "B").End(3).Row
   For i1 = 1 To bakimsayisi
     caribakim = bakimliste(i1, 1)
     sontarih = CDate("01.01.1970")
     tarihsatir = 0
     For i = 25 To sonsatir
       cari = shkapali.Cells(i, "B").Value
       tarih = CDate(shkapali.Cells(i, "E").Value)
       mebran = ""
       For j = 1 To 17 Step 2
           mebran = mebran & shkapali.Cells(i, 9 + j) & ","
       Next j
       If caribakim = cari And sontarih <= tarih And InStr(mebran, "MEBRAN") > 0 Then
          sontarih = tarih
          tarihsatir = i
       End If
     Next i
     
     If tarihsatir = 0 Then bakimliste(i1, 2) = "BİLİNMİYOR"
     
     If tarihsatir >= 1 Then
        bakimtarihi = sontarih + 540
        If bakimtarihi >= Date Then
           bakimliste(i1, 2) = "PERYODİK"
        Else
           bakimliste(i1, 2) = "GENEL"
        End If
     End If
   Next i1
ActiveSheet.Protect "1122"
End Sub

Sub yukle_bakim()
ActiveSheet.Unprotect "1122"
   Set shbakim = Sheets("BAKIM TAKİP")
   sonsatir = shbakim.Cells(Rows.Count, "B").End(3).Row
   bakimsayisi = sonsatir - 4
   For i = 25 To sonsatir
     cari = shbakim.Cells(i, "B").Value
     bakimliste(i - 4, 1) = cari
     bakimliste(i - 4, 2) = ""
   Next i
ActiveSheet.Protect "1122"
    MsgBox "BAKIM TÜRLERİ GÜNCELLENDİ"
End Sub
 
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
hocam bu kod olmaz bu kod sadece bakım tarine bakıyor eyer 540 günden küçükse "peryodik" değilse "genel" yazıyor
Mesajımda kodun güncellendiğini yani ilk gönderdiğim mesajdaki kodda güncelleme yaptığımı yazdım. Hemen altında da o koddan bir alıntı yaptım.

Gönderdiğim kodu denediniz mi? Sadece iki satırlık koda göre mi olmayacağını yazıyorsunuz. :)
 

Schuba

Altın Üye
Katılım
27 Ocak 2016
Mesajlar
170
Excel Vers. ve Dili
microsoft 365 family türkçe
Altın Üyelik Bitiş Tarihi
21-02-2026
Haklısınız hocam aynen dediğiniz gibi düşünmüşüm malesef :)

fakat şimdi dediğiniz gibi dosyaya yapıştırıp denedimde herzaman doğru sonuçlar vermiyor örneyin kodu bikere çalıştırıyorum başka bir sonuç alıyorum hiçbirşeyi değiştirmeden 2.inci defa çalıştırıyorum başka bir sonuç alıyorum

veya fiş kapamadaki fişleri kontırol ediyorum bağzıları doğru bağzıları yanlış sonuç verimiş olduğunu görüyorum

dosya ekte bakabilirsiniz

hocam çok yordum sizi farkındayım hakkınızı helal edin fakat bu kadar uğraştıktan sonra bir sonuç almak adına
enson gönderdiğim mesajdaki şartları incliyerek bu kodu iyice bir gözden geçirip düzenliyip ekli dosyada çalıştırıp bana yollarsanız çok sevinirim...
 

Ekli dosyalar

Son düzenleme:
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Haklısınız hocam aynen dediğiniz gibi düşünmüşüm malesef :)

fakat şimdi dediğiniz gibi dosyaya yapıştırıp denedimde herzaman doğru sonuçlar vermiyor örneyin kodu bikere çalıştırıyorum başka bir sonuç alıyorum hiçbirşeyi değiştirmeden 2.inci defa çalıştırıyorum başka bir sonuç alıyorum

veya fiş kapamadaki fişleri kontırol ediyorum bağzıları doğru bağzıları yanlış sonuç verimiş olduğunu görüyorum

dosya ekte bakabilirsiniz

hocam çok yordum sizi farkındayım hakkınızı helal edin fakat bu kadar uğraştıktan sonra bir sonuç almak adına
enson gönderdiğim mesajdaki şartları incliyerek bu kodu iyice bir gözden geçirip düzenliyip ekli dosyada çalıştırıp bana yollarsanız çok sevinirim...
Dizi değişkenleri sıfırlama ile ilgili bir sorun sanırım.

6. mesajdaki kodu güncelledim : )
Birde son dosyadaki bilgilere göre ile Z de olması gereken sonucu yazabilir misiniz?
 
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
İlk yazmış olduğum koda mebransız durumunu ekledim.
Bu son dosyayı kontrol eder misiniz.
 
Son düzenleme:

Schuba

Altın Üye
Katılım
27 Ocak 2016
Mesajlar
170
Excel Vers. ve Dili
microsoft 365 family türkçe
Altın Üyelik Bitiş Tarihi
21-02-2026
hocam bu son gönderdiğiniz dosya %95 oranında doğru çalışıyor

% 100 doğru çalışıyormu diye kapatılan fişler sayfasındaki müşteri kayıtlarını tek tek filitreleyip
biraz uzun ve detaylı inceledim fark ettimki 10-15 güncellemede 1-2 defa satırlardan herhangi bir veya iki tanesinde yanlış sonuç veriyor bunun sebebi nedir acaba üst üste çok güncellediğimdenmi oluyor acaba yoksa küçük bir eksiklimi var.

birde olması gereken sonuçları istemiştiniz şuan yeni eklediğim dosya ya göre olması gereken sonuçları ve şartlarını detaylı görebilirsiniz orda çok daha açık anlatılmıştır...

çok az kaldı hocam :)
 

Ekli dosyalar

Üst