Hey there!

It looks like you're enjoying Hesaptablosu - Akademik Excel Forumu but haven't created an account yet. Why not take a minute to register for your own free account now? As a member you get free access to all of our forums and posts plus the ability to post your own messages, communicate directly with other members and much more. Register now!

Already a member? Login at the top of this page to stop seeing this message.

Toplam 2 sonuçtan 1 ile 2 arasındakiler gösteriliyor.

Konu: Seri Tanımlama Fonksiyonu

  1. #1
    Üye
    Üyelik tarihi
    Sep 2004
    Mesajlar
    54

    Seri Tanımlama Fonksiyonu

    Öncelikle Seri tanımlamaya niye ihtiyaç duyduğumu anlatayım.

    Örneğin; ANBD Fonksiyonunu düşünelim.


    ANBD(0.09, A2:A6, B2:B6) şeklinde değerler ve tarihler seri şeklinde girilmekte. Değerleri ele alalım. A2:A6 aralığını seçtik diyelim. Bu seçimimiz bir seri Excel işlem yaparken {10/11/15/16/18} şeklinde seçimimizi işleme alıyor. Burada sorun şu, ben bir aralık değil [A2;A4;A6} hücre değerlerini YANİ {10/15/18} seçmek istiyorum. Excel bu duruma müsaade etmiyor. Bu durumu aşmak için ANBD fonksiyonu içindeki değerler alanına yukarıda girdiğim şekli ile seri oluştur fonksiyonu tanımladım. Bununla meselemi hallediyorum. Sorun fonksiyon çok uzun daha kısa yazabilir miyim?

    Yazdığım fonksiyon aşağıda. Bunu daha kısa yazabilir miyim?

    Kod:
    Function seri_olustur(Değer1, Değer2, Optional Değer3, Optional Değer4, Optional Değer5, Optional Değer6, Optional Değer7, Optional Değer8, Optional Değer9, Optional Değer10)
    If IsNull(Değer2) = True Or IsMissing(Değer2) = True Then
    seri_olustur = Array(Değer1)
    Else
    If IsNull(Değer3) = True Or IsMissing(Değer3) = True Then
    seri_olustur = Array(Değer1, Değer2)
    Else
    If IsNull(Değer4) = True Or IsMissing(Değer4) = True Then
    seri_olustur = Array(Değer1, Değer2, Değer3)
    Else
    If IsNull(Değer5) = True Or IsMissing(Değer5) = True Then
    seri_olustur = Array(Değer1, Değer2, Değer3, Değer4)
    Else
    If IsNull(Değer6) = True Or IsMissing(Değer6) = True Then
    seri_olustur = Array(Değer1, Değer2, Değer3, Değer4, Değer5)
    Else
    If IsNull(Değer7) = True Or IsMissing(Değer7) = True Then
    seri_olustur = Array(Değer1, Değer2, Değer3, Değer4, Değer5, Değer6)
    Else
    If IsNull(Değer8) = True Or IsMissing(Değer8) = True Then
    seri_olustur = Array(Değer1, Değer2, Değer3, Değer4, Değer5, Değer6, Değer7)
    Else
    If IsNull(Değer9) = True Or IsMissing(Değer9) = True Then
    seri_olustur = Array(Değer1, Değer2, Değer3, Değer4, Değer5, Değer6, Değer7, Değer8)
    Else
    If IsNull(Değer10) = True Or IsMissing(Değer10) = True Then
    seri_olustur = Array(Değer1, Değer2, Değer3, Değer4, Değer5, Değer6, Değer7, Değer8, Değer9)
    Else
    seri_olustur = Array(Değer1, Değer2, Değer3, Değer4, Değer5, Değer6, Değer7, Değer8, Değer9, Değer10)
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End Function
    Konu semerkand tarafından (29.11.2016 Saat 14:58 ) değiştirilmiştir.

  2. #2
    Üye
    Üyelik tarihi
    Sep 2004
    Mesajlar
    54
    Seri oluştur fonksiyonunda aşağıdaki şekli ile ile daha kullanışlı oldu. Çünkü bazen hem aralık hem de hücre seçimi yapılması gerekebilir. Yapılan tüm seçimlerin seri olarak tanımlanmasına imkan tanıyan aşağıdaki fonksiyon birçok kişinin işine yarayabilir. Fonksiyonun son hali aşağıda.
    Kod:
    
    
    Kod:
    Function seri_olustur(Değer1, Optional Değer2, Optional Değer3, Optional Değer4, Optional Değer5, Optional Değer6, Optional Değer7, Optional Değer8, Optional Değer9, Optional Değer10)
    tum_seri = Array(Değer1, Değer2, Değer3, Değer4, Değer5, Değer6, Değer7, Değer8, Değer9, Değer10)
    'İlk olarak hangi değerlerin seri olduğu bulunup yeni serinin toplam büyüklüğü saptanacak
    dizielemansayısı_s = 0
    sondeger = -1
    For t = 0 To 9
      If IsArray(tum_seri(t)) Then
      dizielemansayısı_s = dizielemansayısı_s + WorksheetFunction.Count(tum_seri(t))
      sondeger = sondeger + 1
      Else
        If IsNull(tum_seri(t)) = True Or IsMissing(tum_seri(t)) = True Then
        Else
        dizielemansayısı_s = dizielemansayısı_s + 1
        sondeger = sondeger + 1
        End If
      End If
    Next t
    ReDim yenidizi(dizielemansayısı_s - 1) As Double
    yenidizielemansayısı = (dizielemansayısı_s - 1)
    'Bu noktadan sonra önce seri olanlar sonra seri olmayanlara değer atanacak
    yeniseri_sırano = 0
    For x = 0 To dizielemansayısı_s - 1
      If IsArray(tum_seri(x)) Then
       aradizi_elemansayısı = WorksheetFunction.Count(tum_seri(x))
       For w = 1 To aradizi_elemansayısı
       yenidizi(yeniseri_sırano) = tum_seri(x)(w)
       yeniseri_sırano = yeniseri_sırano + 1
       Next w
      Else
       For q = x To sondeger
       If IsArray(tum_seri(q)) Then
       GoTo devam
       Else
       yenidizi(yeniseri_sırano) = tum_seri(q)
       yeniseri_sırano = yeniseri_sırano + 1
       If yeniseri_sırano > yenidizielemansayısı Then GoTo tamam
       End If
       Exit For
       Next q
      End If
    devam:
    Next x
    tamam:
    seri_olustur = yenidizi
    End Function
    Konu semerkand tarafından (03.12.2016 Saat 14:07 ) değiştirilmiştir.

Konu Bilgisi

Users Browsing this Thread

Şu anda 1 üyemiz bu konuya göz atıyor. (0 kayıtlı üye ve 1 misafir.)

Bu Konu İçin Etiketler

Yetkileriniz

  • Konu Acma Yetkiniz Yok
  • Cevap Yazma Yetkiniz Yok
  • Eklenti Yükleme Yetkiniz Yok
  • Mesajınızı Değiştirme Yetkiniz Yok
  •