Soru Dizi elemanlarını değiştirmeden sıralama yapmak?

Katılım
1 Nisan 2023
Mesajlar
2
Excel Vers. ve Dili
Microsoft® Excel® LTSC MSO (16.0.14332.20478) 64 bit Türkçe
Merhabalar,
B2 hücresinde 15,64 verisi yer almaktadır. C sütunumda 200 kadar veri bulunmakta. Benim sorunum C sütununda 15,64 den sonra (dizi minimum olarak sıralanmamış haliyle) ilk gelen en büyük sayıyı bulmak. Aşağıda yazığım kod ile bunu buluyorum
(MİN(EĞER(C4:C200>=B2;C4:C200)))
Fakat bu kod diziyi minimum olarak sıralayıp bana direkt 15,65(bu veride 200lük verinin içinde bulunmakta, dizi sırası 71) gibi ilk verimden sonraki büyük sayıyı veriyor.
Eğer kodu (MİN(EĞER(C4:C20>=B2;C4:C20)))
Bu şekilde değiştirip uygularsam bu sefer 15,66 (dizi sırası 17) olan veriyi getiriyor. Benim istediğim bu veri ve bu şekilde çalıştırırsam kalan verileri yok saymış oluyorum, bütün diziyi içine alıp dizi sırasını değiştirmeden tek tek bakıp verdiğim değerden sonraki büyük olan değeri sonuç olarak göstericek kodu arıyorum.
İyi çalışmalar.
 

Korhan Ayhan

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

Kullandığınız formül mantık olarak tüm veriyi tarar ve büyük ya da eşit minimum değeri size döndürür.

Bu formül yerine döngü kullanmanız gerekir. Fakat bunda da bir fark katsayısı belirlemeniz gerekir.

15,66-15,64 = 0,02 buradaki katsayı kaç olursa sizin için uygun oluyor.

Örnek dosya ekleyerek tarif ederseniz daha sağlıklı cevaplar verebiliriz.
 
Katılım
1 Nisan 2023
Mesajlar
2
Excel Vers. ve Dili
Microsoft® Excel® LTSC MSO (16.0.14332.20478) 64 bit Türkçe
Sub kacgungecmis()

x = Cells(2, 1).Value
t = Cells(1, 1).Value

Dim fiyatlar(1 To 365) As Integer

For i = 1 To Cells(3, 2).End(xlDown).Row
fiyatlar(i) = Cells(i, 2).Value
Next i

MsgBox (t & vbNewLine & vbNewLine & "AltSınır: " & LBound(fiyatlar) & " gün" & vbNewLine & "ÜstSınır: " & UBound(fiyatlar) & " gün" & vbNewLine & vbNewLine & "En Yüksek Fiyat: " & Application.WorksheetFunction.Max(fiyatlar) & " TL")

y = Application.WorksheetFunction.Max(fiyatlar)

If y > x Then

For i = 1 To Cells(3, 2).End(xlDown).Row

If Cells(i, 2).Value >= x Then

MsgBox (t & vbNewLine & vbNewLine & "Geçen gün sayısı: " & i - 2 & " gün" & vbNewLine & vbNewLine & "Değişen fiyat: " & Cells(i, 2).Value & " TL")

Exit For

End If

Next

Else

MsgBox ("Alış fiyatı satış fiyatından büyüktür, zararlı satış olur." & vbNewLine & vbNewLine & "Beklemede Kalın!")

End If

End Sub


Uzun uğraş sonucu yukarıda yaptığım kod ile istediğime ulaştım, teşekkür ederim cevap için :)
 
Üst