ortalama fonksiyonu

Katılım
11 Mayıs 2005
Mesajlar
104
Merhaba,
Kod:
Function yazorta(a, b, c, d, e As Integer)
If Average(a & b & c & d & e) < 1 Then yazorta = "Hata"
If Average(a & b & c & d & e) <= 44 Then yazorta = "Bir"
If Average(a & b & c & d & e) <= 54 Then yazorta = "İki"
If Average(a & b & c & d & e) <= 69 Then yazorta = "Üç"
If Average(a & b & c & d & e) <= 85 Then yazorta = "Dört"
If Average(a & b & c & d & e) <= 100 Then yazorta = "Beş"
If Average(a & b & c & d & e) > 100 Then yazorta = "Hata"
end function
şeklinde bir fonksiyon oluşturmak istedim. Ama olmadı.
a,b,c,d,e sayılarının ortalamasını; 0,5 leri tam sayıya yuvarlayarak almam gerekiyor.
Ã?rnek
Kod:
ortalama=64,3 ise 64
ortalama=64,5 ise 65
Nasıl yapabilirim?
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,641
Excel Vers. ve Dili
Pro Plus 2021
[vb:1:ca9f8fa135]Function yazorta(a, b, c, d, e As Integer)
ort = Round(WorksheetFunction.Average(a, b, c, d, e), 0)
yazorta = Switch(ort < 1 Or ort > 100, "Hata", ort >= 1 And ort <= 44, "Bir", ort >= 45 And ort <= 54, "İki", ort >= 55 And ort <= 69, "Üç", ort >= 70 And ort <= 85, "Dört", ort >= 86 And ort <= 100, "Beş")
End Function
[/vb:1:ca9f8fa135]
 
Katılım
11 Mayıs 2005
Mesajlar
104
Sayın veyselemre,
teşekkür ediyorum. kodları denedim. İlk bakışta doğru çalışıyor gibi görünüyor. Ancak hesaplamalarda 0 a yuvarlama yapmıyor.
Þöyle ki:
Kod:
90+90+90+90+63=423/5=84.6
eder. 84,6 sayısını 85'e tamamlarsak, sonuçta "Beş" yazması gerekir. Ama "Dört" yazıyor.
Kodlarınızda anlayabildiğim kadarıyla eksik birşey yok. Ben de formülü VBA kodlarına çevirdiğimde
Kod:
    ActiveCell.FormulaR1C1 = _
        "=IF(ROUND(AVERAGE(RC[-5]:RC[-1]),0)<=44,""Bir"",IF(ROUND(AVERAGE(RC[-5]:RC[-1]),0)<=54,""iki"",IF(ROUND(AVERAGE(RC[-5]:RC[-1]),0)<=69,""üç"",IF(ROUND(AVERAGE(RC[-5]:RC[-1]),0)<=84,""dört"",IF(ROUND(AVERAGE(RC[-5]:RC[-1]),0)<=100,""Beş"",""HATA"")))))"
şeklinde çeviriyorum.
Acaba nerede hata yapıyoruz?
 
Katılım
11 Mayıs 2005
Mesajlar
104
Sayın veyselemre,
hatayı buldum. Ã?nemli birşey değilmiş :D
ort >= 70 And ort <= 85, "Dört", ort >= 86 And ort <= 100, "Beş")
Kod:
ort >= 70 And ort <= 84, "Dört", ort >= 85 And ort <= 100, "Beş")
şeklinde düzeltirsek doğru sonuç alıyoruz.
Tekrar teşekkür ediyorum.
Selamlar
:hey:
 
Katılım
11 Mayıs 2005
Mesajlar
104
Değerli arkadaşlar,
Bu fonksiyonu uygularken bir sorunla karşılaştım. Diyelim ki öğrenciye 4 not verdik. bunlar:70-70-70-70 olsun. Bu öğencinin not ortalaması 70 olması lazım . Ancak fonksiyonda 5 değişken belirtildiği için 280 5e bölünüyor ve sonuç 56 çıkıyor. Buna çözüm bulabilir miyiz?
Selamlar
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,895
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Fonksiyonla yapmak istiyorsanız =BAÐ_DEÐ_DOLU_SAY formülü ile 70-70-70-70 olan kısımları saydırıp saydırdığınıza böldürün..

VBA içinde COUNTA deyimini kullanın.
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,895
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Function Ortalamabul(Adres As Range)
alan = 0
Top = 0
For Each hucre In Adres.Cells
If hucre.Value <> 0 Then
alan = alan + 1
Top = Top + hucre.Value
End If
Next
Ortalamabul = Round((Top / alan), 0)
If Ortalamabul >= 1 And Ortalamabul <= 44 Then Ortalamabul = "Bir"
If Ortalamabul >= 45 And Ortalamabul <= 54 Then Ortalamabul = "iki"
If Ortalamabul >= 55 And Ortalamabul <= 59 Then Ortalamabul = "Üç"
If Ortalamabul >= 70 And Ortalamabul <= 85 Then Ortalamabul = "Dört"
If Ortalamabul >= 86 And Ortalamabul <= 100 Then Ortalamabul = "Beş"
If Ortalamabul > 100 Then Ortalamabul = "HATA"

End Function

Þeklinde olsa Adres ile ilgili alanı seçipte yaptırabilirsiniz
 
Katılım
11 Mayıs 2005
Mesajlar
104
Sayın Fructose,
ilginizden dolayı teşekkür ederim. Fonksiyonu denedim. Ama başarılı olamadım.
Ã?rnek dosya ekte.
Selamlar
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,641
Excel Vers. ve Dili
Pro Plus 2021
aşağıdaki kodu =yazorta_(A1:D1) veya =yazorta_(A1:G1) şeklinde kullanabilirsin


[vb:1:fad1f037f0]
Function yazorta_(alan As Range)
ort = Round(WorksheetFunction.Average(alan), 0)
yazorta_ = Switch(ort < 1 Or ort > 100, "Hata", ort >= 1 And ort <= 44, "Bir", ort >= 45 And ort <= 54, "İki", ort >= 55 And ort <= 69, "Üç", ort >= 70 And ort <= 84, "Dört", ort >= 85 And ort <= 100, "Beş")
End Function
[/vb:1:fad1f037f0]
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Birde aşağıdaki gibi deneyin.

[vb:1:24c8990831]Function yazorta(a, b, c, d, e As Integer)
deg = Array(a, b, c, d, e)
For z = 0 To 4
toplam = toplam + deg(z)
If deg(z) > 0 Then x = x + 1
Next
ort = Round(toplam / x, 0)
yazorta = Switch(ort < 1 Or ort > 100, "Hata", ort >= 1 And ort <= 44, "Bir", ort >= 45 And ort <= 54, "İki", ort >= 55 And ort <= 69, "Üç", ort >= 70 And ort <= 84, "Dört", ort >= 85 And ort <= 100, "Beş")
End Function[/vb:1:24c8990831]
 
Katılım
11 Mayıs 2005
Mesajlar
104
Merhaba arkadaşlar,
Sn.leventm ve Sn. veyselemre 'nin kodlarını denedim. Her ne kadar yazdıkları kodları çözemediysem de, :( Gayet güzel çalışıyor. Eminim sadece bana değil, tüm öğretmenlere yardımınız dokundu.
Fikirlerini ve emeklerini paylaşan tüm arkadaşlara teşekkür ediyorum.
İyi geceler.
 
Üst