AccessTr.neT

Tam Versiyon: Enterpolasyon (Ara Değer) Hesaplama
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Sayfalar: 1 2
Arkadaşlar raporda yaptığım bir hesaplama sonucuna göre başka bir tabodan ara değer hesaplatmak istiyorum. Şöyle ki,

Rapor1 de göreceğiniz gibi
Toplam Sayı: 5060
Sınıf: 3 Sınıf değerleri var.

Şimdi bu değerleri PID isimli tabloda orantılayacağız. 5060 değeri 5000 ve 7500 ün arasında olduğu için bu iki değer alınacak. Sınıfımızda 3 Sınıf olduğu içinde 5000 ve 7500 ün 3 Sınıf karşılığı olan 2,62 ve 2,32 sınıf değerleri alınacak ve hesaplanak. Kısaca, 5060 değerinin 3 sınıf için karşılığını bulmak istiyorum. Bu değerde raporda gösterilecek.

Rapordaki sayı değerine göre hangi aralıkta olduğunu tespit edecek, sonrada, o aralığa ait sınıf değerlerini kullanarak istenen değeri bulmak.

NOT: Verilen örnek için sonuç 2,61 dir.

Selamlar...
2,61 değerini nasıl hesapladınız? işlemi yazar mısınız?
Siz sanırım, 5000 ve 7500'ün değerleri olan 2,62 ve 2,32 'nin Ağırlıklı Ortalamasını hesaplamışsınız ve 2,61 olarak bulmuşsunuz. Ama nasıl hesapladığınızın formülü yazmamışsınız.

Her 2 değeri de bulan örneği ekledim.

Alt (mesela 5000 için 2,62) ve Üst (mesela 7500 için 2,32 ) değerlerini buluyor, ortalaması olan 2,61 in nasıl hesaplanacağının formülünü de sizin yazmanız gerekiyor.

Kod:
Private Sub Ayrıntı_Format(Cancel As Integer, FormatCount As Integer)
Dim Bulunan_AltDeger, Bulunan_UstDeger
    Select Case Me.SINIF
    Case "1 Sınıf"
        Bulunan_AltDeger = DLookup("[1 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[1 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "2 Sınıf"
        Bulunan_AltDeger = DLookup("[2 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[2 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "3 Sınıf"
        Bulunan_AltDeger = DLookup("[3 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[3 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "4 Sınıf"
        Bulunan_AltDeger = DLookup("[4 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[4 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "5 Sınıf"
        Bulunan_AltDeger = DLookup("[5 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[5 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    End Select
    Me.AltDeger = Bulunan_AltDeger
    Me.UstDeger = Bulunan_UstDeger
End Sub

Ayrıca alan adlarında boşluk kullanmamanızı şiddetle tavsiye ederim.
Bu ve dikkat etmeniz gereken diğer şeyler için aşağıdaki konuyu okuyun.
Yapılmaması gereken ölümcül hatalar
Sn.seruz, hesap için 5000 ve 7500 değerlerine de ihtiyaç var. Onlarıda form üstünde 2,62 ve 2,32 gibi gösterebilirsek, formülü rakamlar üzerinden yazacağım. Biraz uğraştım ama yapamadım...

Selamlar...
Aslında bu kadar Dlookup yerine, ADO kullanan bir function yapsak daha güzel olacak ama şimdi vaktim yok. Siz formülü yazın, uygun olursam Pazartesi-Salı function ile çözümü gönderirim.

Yazdığım kodları aşağıdaki şekilde değiştirin.
Kod:
Dim Bulunan_AltM2, Bulunan_UstM2, Bulunan_AltDeger, Bulunan_UstDeger

    Select Case Me.SINIF
    Case "1 Sınıf"
        Bulunan_AltDeger = DLookup("[1 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[1 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "2 Sınıf"
        Bulunan_AltDeger = DLookup("[2 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[2 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "3 Sınıf"
        Bulunan_AltDeger = DLookup("[3 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[3 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "4 Sınıf"
        Bulunan_AltDeger = DLookup("[4 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[4 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "5 Sınıf"
        Bulunan_AltDeger = DLookup("[5 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[5 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    End Select
    Me.AltDeger = Bulunan_AltDeger
    Me.UstDeger = Bulunan_UstDeger
    Bulunan_AltM2 = DLookup("[YYm/BM (m2)]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
    Bulunan_UstM2 = DLookup("[YYm/BM (m2)]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Me.Deger = 0  'Buraya formülü yazacaksınız
Formül, kodların en altında yazılıdır arkadaşlar. (Rapor1-Ayrıntı-Olay- Biçimlendiğinde)

Verilen örnek değerler için formül;

2,32-2,62
_________ = -0,00012

7500-5000


-0,00012 x (5060-5000) = -0,0072

-0,0072 + 2,62 = 2,61


Yardımlarında dolayı seruz üstada çok teşekkür ederim. +rep

Ama kendisinden bir isteğim daha olacak. PID tablosuna bakınca; [YYm/BM (m2)] isimli alandaki sayıların 500-80000 aralığında olduğunu görürüz. 500 den küçük sayılar için 500 ün SINIF değrlerini, 80000 den büyük sayılar içinde 80000 in SINIF değerlerini almasını istiyorum.

Selamlar...
Sayfalar: 1 2