• DİKKAT

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

indiste sıralama sorunu

spacebar

Altın Üye
Katılım
2 Temmuz 2009
Mesajlar
545
Excel Vers. ve Dili
office 2019 Türkçe
değerli üstadlarım günaydın. İndis formülü ile getirmiş olduğum değerlerin tarih sırasına göre gelmesini amaçlıyorum. formülde nasıl bir ek yapmam gerekiyor. yardımlarınız için şimdiden teşekkürler.
 

Ekli dosyalar

Formülle nasıl düzeltilir bilemedim ama makroyla isterseniz aşağıdaki makroyu deneyiniz:

PHP:
Sub tarihler()
Set s1 = Sheets("Sheet1")
son = s1.Cells(Rows.Count, "D").End(3).Row
eski = s1.Cells(Rows.Count, "I").End(3).Row

If eski > 1 Then s1.Range("H2:I" & eski).ClearContents

Set con = VBA.CreateObject("adodb.Connection")
con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

sorgu = "select [Yapılması Gereken Ödeme],[Yapılacak Tarih] from [Sheet1$A1:D" & son & "] where [BGS]=1"
Set RS = con.Execute(sorgu)
s1.[H2].CopyFromRecordset RS

End Sub
 
Yusuf bey teşekkür ederim ilginize. çalışmada formüllü çözüm daha uygun olacak. ayrıca bu kodlarda görevleri tarih sırasına göre vermemiş aynı formüldeki gibi geliyor.
 
sorgu satırını aşağıdakiyle değiştirip deneyin:

sorgu = "select [Yapılması Gereken Ödeme],[Yapılacak Tarih] from [Sheet1$A1:D" & son & "] where BGS=1 order by BGS"
 
olmadı üstad. tarih sıralamalı gelmiyor. teşekkür ederim ilginize.
 
Şunu dener misiniz:

sorgu = "select [Yapılması Gereken Ödeme],[Yapılacak Tarih] from [Sheet1$A1:D" & son & "] where BGS=1 order by [Yapılacak Tarih]"
 
Alternatif;

D2;
C++:
=EĞER(YADA(VE(GÜN(C2)=GÜN($M$1);AY(C2)=AY($M$1));VE(GÜN(C2)=GÜN($M$2);AY(C2)=AY($M$2)));C2+SATIR()/1000;0)

Alttakiler dizi formüldür.

H2;
C++:
=EĞERHATA(İNDİS($B$2:$D$21;KAÇINCI(KÜÇÜK(EĞER($D$2:$D$21>0;$D$2:$D$21);SATIR(A1));$D$2:$D$21;0);1);"")

I2;
C++:
=EĞERHATA(İNDİS($B$2:$D$21;KAÇINCI(KÜÇÜK(EĞER($D$2:$D$21>0;$D$2:$D$21);SATIR(A1));$D$2:$D$21;0);2);"")
 
tamam Yusuf44 üstad oldu sorunsuz çalışıyor. ellerinize sağlık. ama formüllü çözümü öğrenmek isterim.
 
Alternatif;

D2;
C++:
=EĞER(YADA(VE(GÜN(C2)=GÜN($M$1);AY(C2)=AY($M$1));VE(GÜN(C2)=GÜN($M$2);AY(C2)=AY($M$2)));C2+SATIR()/1000;0)

Alttakiler dizi formüldür.

H2;
C++:
=EĞERHATA(İNDİS($B$2:$D$21;KAÇINCI(KÜÇÜK(EĞER($D$2:$D$21>0;$D$2:$D$21);SATIR(A1));$D$2:$D$21;0);1);"")

I2;
C++:
=EĞERHATA(İNDİS($B$2:$D$21;KAÇINCI(KÜÇÜK(EĞER($D$2:$D$21>0;$D$2:$D$21);SATIR(A1));$D$2:$D$21;0);2);"")

Korhan Bey üstad ellerinize sağlık mükemmel çalışıyor. teşekkür ederim. tüm üstadlara sağlıklı günler dilerim.
 
Bu formüller D sütununa ihtiyaç duymuyor.

Dizi formüldür.

H2;
C++:
=EĞERHATA(İNDİS($B$2:$D$21;KAÇINCI(KÜÇÜK(EĞER(($C$2:$C$21>=$M$1)*($C$2:$C$21<=$M$2);$C$2:$C$21+SATIR($C$2:$C$21)/1000;"");SATIR(A1));$C$2:$C$21+SATIR($C$2:$C$21)/1000;0);1);"")

I2;
C++:
=EĞERHATA(İNDİS($B$2:$D$21;KAÇINCI(KÜÇÜK(EĞER(($C$2:$C$21>=$M$1)*($C$2:$C$21<=$M$2);$C$2:$C$21+SATIR($C$2:$C$21)/1000;"");SATIR(A1));$C$2:$C$21+SATIR($C$2:$C$21)/1000;0);2);"")
 
Bu formüller D sütununa ihtiyaç duymuyor.

Dizi formüldür.

H2;
C++:
=EĞERHATA(İNDİS($B$2:$D$21;KAÇINCI(KÜÇÜK(EĞER(($C$2:$C$21>=$M$1)*($C$2:$C$21<=$M$2);$C$2:$C$21+SATIR($C$2:$C$21)/1000;"");SATIR(A1));$C$2:$C$21+SATIR($C$2:$C$21)/1000;0);1);"")

I2;
C++:
=EĞERHATA(İNDİS($B$2:$D$21;KAÇINCI(KÜÇÜK(EĞER(($C$2:$C$21>=$M$1)*($C$2:$C$21<=$M$2);$C$2:$C$21+SATIR($C$2:$C$21)/1000;"");SATIR(A1));$C$2:$C$21+SATIR($C$2:$C$21)/1000;0);2);"")
Korhan Bey bu çözüm daha mükemmel oldu. yardımcı sütuna gerek kalmadı. teşekkür ederim. ellerinize sağlık.
 
Şunu dener misiniz:

sorgu = "select [Yapılması Gereken Ödeme],[Yapılacak Tarih] from [Sheet1$A1:D" & son & "] where BGS=1 order by [Yapılacak Tarih]"
@YUSUF44 Yusuf bey merhaba. çalışmayı formülle yapmayı düşünüyordum ama hem makrolu hem formüllü yapmaya karar verdim. Korhan Beyin formüllerini uyguladım. ona yazım düzenini ekledim. ancak kodda bunu yapamadım. sanırım Application.Proper(cell) kullanmamız gerekiyor. bunu kodların neresine eklememiz gerekiyor. teşekkür ederim.
 
Ek bir makro ile veriler üzerinde YAZIM.DÜZENİ fonksiyonunu uygulatabilirsiniz.

Kod içindeki Alan tanım adresini dilediğiniz gibi değiştirebilirsiniz.

C++:
Option Explicit

Sub Yazim_Duzeni_Uygula()
    Dim Alan As Range, Veri As Range
    
    Set Alan = Range("B2:B21")
    
    For Each Veri In Alan
        If Veri.Value <> "" Then
            Veri.Value = WorksheetFunction.Proper(Veri.Value)
        End If
    Next
    
    Set Alan = Nothing
    
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Korhan Bey teşekkür ederim. ellerinize sağlık.
 
Geri
Üst