• DİKKAT

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

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
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

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