LibreOfis Calc ile fonksiyon yazma…

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
Bu yazı Açık Kaynak, Linux kategorisine gönderilmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kodu girin... *