Soru 14
14. sorumuzla devam edelim.
Aşağıdaki gibi bir tablomuz var.
Farklı ürünlerin, farklı tarihlerdeki satın almalarına ilişkin satın alma tutarları bulunuyor. Burada seçilen ürünün, en düşük satın alma fiyatının tarihi isteniyor.
Dosyayı buradan indirebilir, cevaplarınızı yorum olarak yazabilirsiniz.
CEVAP
=MİN(EĞER(C2:C51=MİN(EĞER(A2:A51=F5;C2:C51));B2:B51))
Dizi formülüdür. Ctrl Shift Enter yapmayı unutmayın.
=İNDİS($B2:$B51;KAÇINCI(ÇOKEĞERMİN($C$2:$C$51;$A$2:$A$51;$F$5);$C$2:$C$51;0);0)
=İNDİS($A$2:$C$51;KAÇINCI(MİN(FİLTRE(A2:$C$51;A2:$A$51=$F$5));C2:$C$51;0);2)
Sub fiyatbul()
‘TANIMLAMA
Dim satirsayisi As Integer
Dim a As Integer
Dim dusukfiyat As Integer
Dim fiyat As Integer
Dim tarih As Date
a = 2
fiyat = 0
‘SON SATIRI BULMA
satirsayisi = Sheets(“Sayfa1”).UsedRange.Rows.Count
‘SON SATIRA KADAR KONTROL EDEN DÖNGÜ
For a = 2 To satirsayisi
‘KONTROL EDİLEN SATIRIN İLK HÜCRESİ İLE GİRİLEN DEĞER AYNI MI?
If Sheets(“Sayfa1”).Cells(a, 1) = Sheets(“Sayfa1”).Cells(5, 6) Then
‘iLK EŞLEŞME KONTROLÜ, FİYAT VE TARİH BELİRLEME
If fiyat = 0 Then
fiyat = Cells(a, 3)
dusukfiyat = fiyat
tarih = Cells(a, 2)
End If
‘2 VE SONRAKİ ÜRÜN EŞLEŞMELERİNDE DÜŞÜK FİYAT KONTROLÜ VE TARİHİNİN BELİRLENMESİ
fiyat = Cells(a, 3)
If fiyat 0 And fiyat < dusukfiyat Then
dusukfiyat = fiyat
tarih = Cells(a, 2)
End If
End If
Next
'TARİHİN İLGİLİ HÜCREYE YAZILMASI
Cells(6, 7) = tarih
'ÜRÜN İSMİ DOĞRU DEĞİLSE KONTROL TALEP ETME
If tarih = 0 Then
MsgBox ("ÜRÜN İSMİNİ DOĞRU GİRDİĞİNİZDEN EMİN OLUN")
Cells(6, 7) = ""
End If
End Sub
Dizi formülü,
=İNDİS($B$1:$B$51;KAÇINCI(MİN(EĞER(A1:A51=F5;C1:C51));EĞER(A1:A51=F5;C1:C51);0))
Makro,
Sub dusukk()
Range(“G6”).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 top 1 [Satın Alma Tarihi] from[sayfa1$] where ” & _
“Ürünler = ‘” & Sayfa1.Range(“f5”) & “‘ order by [Satın Alma Fiyatı] asc”
Set rs = con.Execute(sorgu)
Range(“G6”).CopyFromRecordset rs
End Sub
Merhaba,
*Dizi Formülüdür
=KAYDIR(A1;KAÇINCI(F5&MİN(EĞER((F5=A2:A51);C2:C51));A2:A51&C2:C51;0);1)
=İNDİS($B$2:$B$51;KAÇINCI($F$5&MİN(EĞER($A$2:$A$51=$F$5;$C$2:$C$51;””));$A$2:$A$51&$C$2:$C$51;0))
dizi formülü şeklinde ctrl+shift+enter ile yazılmalı
{=İNDİS(B:B;KAÇINCI(BÜYÜK(–(A2:A51=F5)*(C2:C51);EĞERSAY(A:A;F5));C:C;0);1)}
=İNDİS($B:$B;KAÇINCI(ÇOKEĞERMİN($C:$C;$A:$A;$F$5);$C:$C;0);0)
=+İNDİS($A$2:$C$51;KAÇINCI($F$5&MİN(EĞER($A$2:$A$51=$F$5;$C$2:$C$51));$A$2:$A$51&$C$2:$C$51;0);2)
=MİN(EĞER($A$2:$A$51=F5;$B$2:$B$51))
Hocam merhaba,
Verdiğiniz formül hatalı. Ürün10’un en küçük değeri olan 110 değerini , C2 satırına yazarsanız, ürün10 için en küçük tarih 1 mayıs çıkacatır. Doğru sonucun 5 mayıs olması lazım.Yazdığınız formül listedeki en küçük değerin sahip olduğu, en küçük tarihi getiriyor.
Formül doğru çalışıyor. 5 mayıs tarihini getiriyor. Zaten sorduğum şey bu.
Sub deneme()
m = Application.WorksheetFunction.Max(Range(“c:c”))
For i = 2 To 51
If Cells(i, 1) = Range(“f5”) Then
If Cells(i, 3) <= m Then
m = Cells(i, 3)
c = Cells(i, 2)
End If
End If
Next i
Range("g6") = c
End Sub
dizi formülüdür
=ARA(2;1/(MİN(EĞER($A$2:$A$51=$F$6;$C$2:$C$51;””))=$C$2:$C$51);$B$2:$B$51)
Mustafa hocam selamlar,
Kimse yeni formülleri kullanmamış. Ben daha kısa yoldan ve Ctrl Shift Enter olayına girmeden aşağıdaki gibi çözdüm.
Saygılarımla.
=FİLTRE(B2:B51;C2:C51=ÇOKEĞERMİN(C2:C51;A2:A51;F5))
Ben kullanmıştım aslında en yukarıdaki ilk çözümüm de :))