Merhabalar,
Daha önce çok detaylı girememiştim ama bir ihtiyaç üzerine Libreofis Calc ile fonksiyon yazmaya bir bakayım dedim. Bu fonksiyon belirlenen alan içinde verilen kritere göre diğer bir alandaki en büyük değerini buluyor. Sanırım MS-Ofis’de MAXIFS fonksiyonuna karşılık geliyormuş. Yıllardır MS-Ofis görmüşlüğüm yok! Nedir bilemiyorum ama orada olup da LibreOfis’de olmamasına gönlüm el vermedi… 🙂
Aşağıda örnek bir liste var. Yıl ve grup bazında en yüksek rakamı sağdaki kolona yazdırabiliyoruz. Ancak Kriter kolonu olarak her iki kolonu bir yerde birleştirmek gerekiyor.
Fonksiyon kullanıma bir örnek:
=SECENEKSORGU($E$2:$E$20;E2;$D$2:$D$20)
| YIL | GRUP | ÜCRET | Kriter | YIL_GRUP_MAKS_ÜCRET |
| 1988 | C | 11,74 | 1988C | 14,82 |
| 1988 | C | 14,40 | 1988C | 14,82 |
| 1988 | C | 14,38 | 1988C | 14,82 |
| 1988 | C | 14,82 | 1988C | 14,82 |
| 1988 | C | 11,69 | 1988C | 14,82 |
| 1988 | D | 11,69 | 1988D | 11,69 |
| 1989 | B | 11,04 | 1989B | 11,04 |
| 1989 | C | 14,28 | 1989C | 14,28 |
| 1989 | C | 11,13 | 1989C | 14,28 |
| 1989 | D | 11,43 | 1989D | 14,82 |
| 1989 | D | 14,58 | 1989D | 14,82 |
| 1989 | D | 14,82 | 1989D | 14,82 |
| 1990 | C | 11,69 | 1990C | 14,67 |
| 1990 | C | 14,67 | 1990C | 14,67 |
| 1992 | D | 13,41 | 1992D | 13,41 |
| 1993 | C | 11,80 | 1993C | 11,8 |
| 1996 | E | 13,78 | 1996E | 13,78 |
| 1996 | E | 13,78 | 1996E | 13,78 |
| 1997 | C | 9,88 | 1997C | 9,88 |
Fonksiyona alan aktarılması ile ilgli şu sayfadan faydalandım. İlgilenen arkadaşlar bakmasında fayda var.
Bu arada nedendir bilmem?! LiberOffice’de fonksiyon ismi içinde küçük “i” harfinde sorun yaşadım. Küçük “i” kullandığınızda fonksiyon kullanılamıyor?!
Function SecenekSorgu(Optional KriterAlan, Optional Kriter, Optional SorguAlan) as double
'Fonksiyon, belirlenen sorgu alanı içinde aranan kriteri bulur ve sorgulama alanı
'içindeki karşılıklarındaki en büyük sayıyı verir.
'Elbette amaca göre farklı kontroller ve eklemeler yapılabilir...
'Mucibirahman İLBUĞA
'Mart 2016
Dim KriterRow As Integer
Dim KriterCol As Integer
Dim SorguCol as integer
Dim HataVar as Boolean
Dim HucreDeger as double
Dim YeniDeger as double
HataVar = False
If NOT IsArray(KriterAlan) or NOT IsArray(KriterAlan) Then
SecenekSorgu = "HATA! Sorgu ve Toplam ALAN olmalı!"
HataVar = true
end if
If isarray(Kriter) then
SecenekSorgu = SecenekSorgu + "HATA! Kriter tek bir hücre olmalı!!"
HataVar = true
end if
if HataVar = true then
exit function
end if
' Burada sorgulama Başlıyor...
KriterCol = LBound(KriterAlan, 2)
SorguCol = LBound(SorguAlan, 2)
HucreDeger = 0
For KriterRow = LBound(KriterAlan, 1) To UBound(KriterAlan, 1)
if KriterAlan(KriterRow, KriterCol) = Kriter Then
Yenideger = SorguAlan(KriterRow, SorguCol)
If YeniDeger > HucreDeger then HucreDeger = YeniDeger
end if
Next
SecenekSorgu = HucreDeger
End Function