• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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?
 
[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]
 
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?
 
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:
 
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
 
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.
 
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
 
Sayın Fructose,
ilginizden dolayı teşekkür ederim. Fonksiyonu denedim. Ama başarılı olamadım.
Ã?rnek dosya ekte.
Selamlar
 
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]
 
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]
 
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.
 
Geri
Üst