Belirlenen tarih ve saat öncesi ve sonrasına göre veri getirme

hassas

Altın Üye
Katılım
8 Temmuz 2009
Mesajlar
545
Excel Vers. ve Dili
2007-2010
Altın Üyelik Bitiş Tarihi
01-05-2027
Sayın arkadaşlar iyi günler
ekli dosya içerisinde detaylı açıklamasını yaptığım dosyamla ilgili yardımcı olabilirmisiniz acaba.
özetle - İlgili dosyada belirtilen kapı noya göre belirtilen teslim tarihinden önceki son dört veri ve teslim tarihinden sonra ilk dört verinin getirmesini istiyorum.
şimdiden iyi çalışmalar diler tüm hayatınızda kolaylıklar ve basarılar diler
iim.
 

Ekli dosyalar

Ö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.
Merhabalar.

Umarım yanlış anlamadım.
Aşağıdaki şekilde dener misiniz? (DATA sayfasındaki verilerin A sütununa göre artan sıralandığı varsayılmıştır)

-- E3 hücresine (formül, dizi formülü olduğundan CTRL+SHIFT+ENTER ile girilmelidir) uygulayın ve
sağa doğru KOPYALA=>ÖZEL YAPIŞTIR=>FORMÜLLERİ şeklinde kopyalayın.
.
Kod:
=[COLOR="red"]EĞERHATA[/COLOR]([COLOR="red"]KAYDIR[/COLOR](DATA!$A$1;[COLOR="red"]BÜYÜK[/COLOR]([COLOR="red"]EĞER[/COLOR]([COLOR="red"]DOLAYLI[/COLOR]("DATA!H"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)-[COLOR="red"]EĞERSAY[/COLOR](DATA!$A:$A;"<="&0+$C3)+1&":H"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1))=$D3;[COLOR="red"]EĞER[/COLOR]([COLOR="red"]DOLAYLI[/COLOR]("DATA!A"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)-[COLOR="red"]EĞERSAY[/COLOR](DATA!$A:$A;"<="&0+$C3)+1&":A"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1))<=0+$C3;[COLOR="red"]SATIR[/COLOR]([COLOR="red"]DOLAYLI[/COLOR]("DATA!A"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)-[COLOR="red"]EĞERSAY[/COLOR](DATA!$A:$A;"<="&0+$C3)+1&":A"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)))));[COLOR="Red"]TAMSAYI[/COLOR](([COLOR="red"]SÜTUN()[/COLOR]-5)/4)+1)-1;[COLOR="red"]ARA[/COLOR]([COLOR="red"]MOD[/COLOR](([COLOR="Red"]SÜTUN()[/COLOR]-5);4);{0;1;2;3};{0;3;10;9}));"")
-- V3 hücresine (formül, dizi formülü olduğundan CTRL+SHIFT+ENTER ile girilmelidir) uygulayın ve
sağa doğru KOPYALA=>ÖZEL YAPIŞTIR=>FORMÜLLERİ şeklinde kopyalayın.
.
Kod:
=[COLOR="red"]EĞERHATA[/COLOR]([COLOR="red"]KAYDIR[/COLOR](DATA!$A$1;[COLOR="red"]KÜÇÜK[/COLOR]([COLOR="red"]EĞER[/COLOR]([COLOR="red"]DOLAYLI[/COLOR]("DATA!H"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)+1&":H"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)+[COLOR="red"]EĞERSAY[/COLOR](DATA!$A:$A;">="&0+$C3)+1)=$D3;[COLOR="red"]EĞER[/COLOR]([COLOR="red"]DOLAYLI[/COLOR]("DATA!A"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)+1&":A"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)+[COLOR="red"]EĞERSAY[/COLOR](DATA!$A:$A;">="&0+$C3)+1)>=0+$C3;[COLOR="red"]SATIR[/COLOR]([COLOR="red"]DOLAYLI[/COLOR]("DATA!A"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)+1&":A"&[COLOR="red"]KAÇINCI[/COLOR]($C3+0;DATA!$A:$A;1)+[COLOR="red"]EĞERSAY[/COLOR](DATA!$A:$A;">="&0+$C3)+1))));[COLOR="red"]TAMSAYI[/COLOR](([COLOR="red"]SÜTUN()[/COLOR]-22)/4)+1)-1;[COLOR="red"]ARA[/COLOR]([COLOR="red"]MOD[/COLOR](([COLOR="red"]SÜTUN()[/COLOR]-23)+1;4);{0;1;2;3};{0;3;10;9}));"")
-- Son olarak da ilk formül satırını (E3:AK3 hücre aralığını) kopyalayıp aşağı doğru liste boyunca yapıştırın.
.
 

hassas

Altın Üye
Katılım
8 Temmuz 2009
Mesajlar
545
Excel Vers. ve Dili
2007-2010
Altın Üyelik Bitiş Tarihi
01-05-2027
Sayın ömer bey öncelikle verdiğiniz katkıdan dolayı çok tesekkür ederim. Sizin verdiğiniz formülleri kopyaladım E Sutunu ile T Sutunu arasındaki verileri getirmiyor. Fakat V Sutunu ile AK3 Sutunu arasındaki verileri doğru getiriyor.
 

Ö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.
Şu an bilgisayar başında değilim.
Uygun olduğumda kontrol ederim.
 

Ö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.
Tekrar merhaba.

Önceki formül cevabımda, E3 hücresi için verdiğim formülü güncelledim.
Sayfayı yenileyerek, formülün düzeltilmiş halini gerçek veriler üzerinde deneyiniz.
 

hassas

Altın Üye
Katılım
8 Temmuz 2009
Mesajlar
545
Excel Vers. ve Dili
2007-2010
Altın Üyelik Bitiş Tarihi
01-05-2027
Sayın ömer bey çok teşekkür ederim şimdi çalıştı.
Fakat data sayfasındaki veri ve sorgu sayfasındaki sorgulanacak adet de yaklaşık 3500 adet olduğu için kasıyor bunu makro olarak ta yapabilirmiyiz aca.
çok teşekkür ederim.
 

hassas

Altın Üye
Katılım
8 Temmuz 2009
Mesajlar
545
Excel Vers. ve Dili
2007-2010
Altın Üyelik Bitiş Tarihi
01-05-2027
Sayın ömer bey tekrar rahatsız ediyorum kusura bakmayınız .Tekrar sorgu sayfasına kendi orjinal verilerimi data sayfasına da verilerimi yüklediğimde yine tüm hücreler boş yazıyor.
ekli dosya ya sizin verdiğiniz verdiğim formülü kopyalayınca oluyor.
kendi orjinal verilerimi yapıştırdığımda E İle T sutunu hücredeki verieer gelmiyor.
 

Ö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.
O zaman yapabileceğim pek bir şey yok malesef.
Satır sayısı azaltılmış gerçek veri (hem DATA sayfası hem de SORG sayfası C sütunu için)
içeren örnek dosyaya erişmeden bir şey söyleyemem.

SORG sayfasındaki veri satırı adeti gerçekte nedir acaba?
Eğer SORG sayfası satır adeti fazla değilse AD TANIMLAMASI yaparak veya yardımcı birkaç sütun kullanarak hızlandırmaya yönelik deneme yapabilirim.
.
 

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,105
Excel Vers. ve Dili
office2010
Makro olarak çözüm.
Verilerinizin fazla olmasından dolayı kod yavaş çalışabilir.

Kod:
Sub sorgu()
[SIZE="1"]Z = TimeValue(Now)
Set s1 = Sheets("DATA")
Set s2 = Sheets("SORG")
a = s1.Range("A2:V" & s1.Cells(Rows.Count, 1).End(3).Row)
b = s2.Range("C3:D" & s2.Cells(Rows.Count, 3).End(3).Row)
Set d = CreateObject("scripting.dictionary")
Set d1 = CreateObject("scripting.dictionary")
ReDim c(1 To UBound(a), 1 To 16)
ReDim c1(1 To UBound(a), 1 To 16)
    For k = 1 To UBound(b)
        t = CDate(b(k, 1))
        ara = b(k, 2)
        For i = 1 To UBound(a)
            If CDate(a(i, 1)) <= t And ara = a(i, 8) Then
                d(a(i, 8)) = d(a(i, 8)) & "|" & a(i, 1) & "|" & _
                a(i, 4) & "|" & a(i, 11) & "|" & CStr(a(i, 10))
            End If
            If CDate(a(i, 1)) > t And ara = a(i, 8) Then
                d1(a(i, 8)) = d1(a(i, 8)) & "|" & a(i, 1) & "|" & _
                a(i, 4) & "|" & a(i, 11) & "|" & CStr(a(i, 10))
            End If
        Next i
    On Error Resume Next
        For i = 1 To UBound(b)
            deg = Split(d(b(i, 2)), "|")
            deg1 = Split(d1(b(i, 2)), "|")
            For j = 1 To 16 Step 4
                c(i, j) = deg(UBound(deg) - j - 2)
                c(i, j + 1) = deg(UBound(deg) - j - 1)
                c(i, j + 2) = CDbl(deg(UBound(deg) - j))
                c(i, j + 3) = "'" & deg(UBound(deg) - j + 1)
                c1(i, j) = deg1(j)
                c1(i, j + 1) = deg1(j + 1)
                c1(i, j + 2) = CDbl(deg1(j + 2))
                c1(i, j + 3) = "'" & deg1(j + 3)
            Next j
        Next i
    Next k
s2.Range("E3:AK" & Rows.Count).ClearContents
s2.[E3].Resize(UBound(b), 16) = c
s2.[V3].Resize(UBound(b), 16) = c1
MsgBox CDate(TimeValue(Now) - Z), vbInformation
End Sub[/SIZE]
 
Son düzenleme:

hassas

Altın Üye
Katılım
8 Temmuz 2009
Mesajlar
545
Excel Vers. ve Dili
2007-2010
Altın Üyelik Bitiş Tarihi
01-05-2027
Sayın ziynettin bey yaptığınız katkilarinizdan dolayı çok teşekkür ederim ve tüm islerinizde kolaylıklar ve başarılar dilerim ve ayrıca kodunuz çok hızlı çalışiyor. Sayın Ömer beye de katkılarından dolayı tekrar teşekkür ederim
 
Üst