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