Excel Forum
ALTIN ÜYELİK Hakkında Bilgi


Geri Git   Excel Forum > EXCEL-Soruları > Fonksiyonlar
Atatürk
Şifremi Unuttum

DUYURU SİSTEMİ / REKLAM PANOSU

Fonksiyonlar Bir fonksiyonun, nasıl işlediğini veya aradığınız bir işleme uygun olup olmadığını bu başlık altında sorabilirsiniz.
Dosya ekleyebilirsiniz

Özel Arama


Yanıtla
 
Paylaş Konu Araçları Görünüm Modları
Eski 29-11-2016, 11:03   #1
h_semerkand
 
Giriş: 19/05/2012
Şehir: İstanbul
Mesaj: 9
Excel Vers. ve Dili:
Excel 2007
Varsayılan Fonsiyonlarda seri tanımlama

Bazı formüllerde aralık şeklinde değilde seçtiğim hücrelerden oluşan bir seri tanımlamak istiyorum. Bunun için aşağıdaki fonksiyonu yazdım. Ama çok uzun bunu daha kısa yazabilme imkanı var mıdır?

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
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

Bu mesaj en son " 29-11-2016 " tarihinde saat 13:59 itibariyle h_semerkand tarafından düzenlenmiştir....
h_semerkand Çevrimdışı   Alıntı Yaparak Cevapla
Eski 29-11-2016, 13:02   #2
Necdet Yeşertener
Moderatör
 
Giriş: 04/06/2005
Şehir: Ankara
Mesaj: 12,019
Excel Vers. ve Dili:
Ofis 2003 İngilizce Ofis 2007 Türkçe Ofis 2010 Türkçe
Varsayılan

Merhaba,

Ne yaptığınızı değil de ne yapmak istediğinizi anlatırsanız çözüme daha çabuk ulaşırsınız.

Örneğin A1,A3 ve A5 hücrelerini seçtiğinizi varsayalım.

Seriden kastınız ne? 1, 2 ve 3 mü yazılacak? Yoksa Ocak, Şubat Mart mı? vs vs vs.

Örneğin önce hücreleri seçip aşağıdaki kodları çalıştırırsanız 1 den başlayarak hücreleri 1, 2, 3 ... 99 diye doldurur.

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
Sub SeriYaz()

    Dim i   As Integer, _
        Hcr As Range
    
    For Each Hcr In Selection
        i = i + 1
        Hcr = i
    Next Hcr
    
End Sub
__________________
Sayfada Boş Satırları Silmek:
Sütunu Seçiniz, F5, Özel, Boşluklar, Tamam,
Sağ Klik, Sil, Tüm Satır, Tamam

Türkçe'nin Bir Eksiği Yok, Ya Sizin?



Necdet Yeşertener Çevrimdışı   Alıntı Yaparak Cevapla
Eski 29-11-2016, 13:51   #3
h_semerkand
 
Giriş: 19/05/2012
Şehir: İstanbul
Mesaj: 9
Excel Vers. ve Dili:
Excel 2007
Varsayılan

Necdet bey merhaba;

Ö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?

Bu mesaj en son " 29-11-2016 " tarihinde saat 14:24 itibariyle h_semerkand tarafından düzenlenmiştir....
h_semerkand Çevrimdışı   Alıntı Yaparak Cevapla
Eski 29-11-2016, 14:25   #4
Necdet Yeşertener
Moderatör
 
Giriş: 04/06/2005
Şehir: Ankara
Mesaj: 12,019
Excel Vers. ve Dili:
Ofis 2003 İngilizce Ofis 2007 Türkçe Ofis 2010 Türkçe
Varsayılan

Merhaba,

Hiç bir şey anlamadım.

A1 = 1
A2 = 2
A3 = 3
A4 = 4
A5 = 5 Değerleri var ve siz A1,A3 ve A5'i seçtiğinizde aslında 1, 3 ve 5 değerlerini mi almak istiyorsunuz?
__________________
Sayfada Boş Satırları Silmek:
Sütunu Seçiniz, F5, Özel, Boşluklar, Tamam,
Sağ Klik, Sil, Tüm Satır, Tamam

Türkçe'nin Bir Eksiği Yok, Ya Sizin?



Necdet Yeşertener Çevrimdışı   Alıntı Yaparak Cevapla
Eski 29-11-2016, 15:22   #5
h_semerkand
 
Giriş: 19/05/2012
Şehir: İstanbul
Mesaj: 9
Excel Vers. ve Dili:
Excel 2007
Varsayılan

Necdet bey;

ANBD fonksiyonunda değerler kısmına A1,A3 ve A5 hücrelerini (1, 3 ve 5 değerlerini) seçmeyi deneyin konuyu anlayacaksınız.
h_semerkand Çevrimdışı   Alıntı Yaparak Cevapla
Eski 30-11-2016, 08:27   #6
Necdet Yeşertener
Moderatör
 
Giriş: 04/06/2005
Şehir: Ankara
Mesaj: 12,019
Excel Vers. ve Dili:
Ofis 2003 İngilizce Ofis 2007 Türkçe Ofis 2010 Türkçe
Varsayılan

Merhaba,

A1=1
A2=2
A3=3
A4=4
A5=5
A6=6
A7=7
A8=8 ese

siz A1, A3 ve A5'i seçtiğinizde {1\3\5},

ya da A1:A3' seçtiğinizde {1\2\3}
yada

A1:A3,A5'i seçtiğinizde {1\2\3\5} olmasını istiyorsunuz sanırım

İstediğiniz hücreleri seçip fonksiyonda kullandığımda örneğin A1:A5 seçildiğinde sorun yaşamadım ama A1;A3;A5 seçtiğimde fonksiyon içinde kullanamadım.

Bunun için fonksiyonu çağırırken =SeriD(
dedikten sonra istediğiniz hücreleri gerek A1:A3 gibi yada karışık
A1:A3;a6;A8 gibi seçtiğinizde seçtikten sonra değerlerin başına ve sonuna ÇİFT TIRNAK koyarak fonksiyonu tamamlarsanız size sonucu üretecektir.

yani =SERID("A1:A4;A7")
Olarak fonksiyonu çağırdığınızda size {1\2\3\4\7} sonucunu üretecektir.

Umarım doğru anlamışımdır.

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
Function SeriD(Deger As String) As String
    
    Dim Txt As String, _
        i   As Integer, _
        j   As Integer, _
        Hcr As Range, _
        d
        
    d = Split(Deger, ";")
    Txt = "{"
    
    For i = 0 To UBound(d)
        If InStr(d(i), ":") > 0 Then
            For Each Hcr In Range(d(i))
                Txt = Txt & "\" & Hcr
            Next Hcr
        Else
            Txt = Txt & "\" & Range(d(i))
        End If
    Next i

    If Txt = "{" Then
        SeriD = ""
    Else
        SeriD = Txt & "}"
    End If
    
End Function
__________________
Sayfada Boş Satırları Silmek:
Sütunu Seçiniz, F5, Özel, Boşluklar, Tamam,
Sağ Klik, Sil, Tüm Satır, Tamam

Türkçe'nin Bir Eksiği Yok, Ya Sizin?



Necdet Yeşertener Çevrimdışı   Alıntı Yaparak Cevapla
Eski 30-11-2016, 12:34   #7
h_semerkand
 
Giriş: 19/05/2012
Şehir: İstanbul
Mesaj: 9
Excel Vers. ve Dili:
Excel 2007
Varsayılan

Necdet bey merhaba;

Size de zahmet verdim kusura bakmayın. Yazdığınız fonksiyon {1\2\3\4\7} şeklinde görüntü olarak seriye benzer sonuç veriyor. Fakat fonksiyon içinde kullanıldığında string bir değer olduğu için hesaplama yapmıyor.

Sizden ricam benim yukarıda yazdığım seri fonksiyonunu koyalayıp ANBD fonksiyonu içerisinde kullanın. Yazdığım fonksiyon sorunsuz çalışıyor. Sadece çok uzun.

Alıntı:
faiz oranı 0,10%

tarih değer
01.12.2016 100
28.12.2016 101
24.01.2017 102
20.02.2017 103
19.03.2017 104
15.04.2017 105

#DEĞER! sizin yazdığınız fonksiyon
305,9541656 benim yazdığım fonksiyon
h_semerkand Çevrimdışı   Alıntı Yaparak Cevapla
Eski 30-11-2016, 12:35   #8
h_semerkand
 
Giriş: 19/05/2012
Şehir: İstanbul
Mesaj: 9
Excel Vers. ve Dili:
Excel 2007
Varsayılan

Necdet bey merhaba;

Size de zahmet verdim kusura bakmayın. Yazdığınız fonksiyon {1\2\3\4\7} şeklinde görüntü olarak seriye benzer sonuç veriyor. Fakat fonksiyon içinde kullanıldığında string bir değer olduğu için hesaplama yapmıyor.

Sizden ricam benim yukarıda yazdığım seri fonksiyonunu koyalayıp ANBD fonksiyonu içerisinde kullanın. Yazdığım fonksiyon sorunsuz çalışıyor. Sadece çok uzun.

Alıntı:
faiz oranı 0,10%

tarih değer
01.12.2016 100
28.12.2016 101
24.01.2017 102
20.02.2017 103
19.03.2017 104
15.04.2017 105

#DEĞER! sizin yazdığınız fonksiyon
305,9541656 benim yazdığım fonksiyon
h_semerkand Çevrimdışı   Alıntı Yaparak Cevapla
Eski 30-11-2016, 15:17   #9
İdris SERDAR
Moderatör
 
İdris SERDAR kullanıcısının avatarı
 
Giriş: 21/10/2005
Şehir: Ankara
Mesaj: 14,564
Excel Vers. ve Dili:
Excel, 2016 - İngilizce
Varsayılan

Alıntı:
h_semerkand tarafından gönderildi Mesajı Görüntüle
Necdet bey merhaba;

Ö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?
.

Söz konusu ANBD işlevi ise, şu şekilde kullanmak işinize yarayabilir.

http://s3.dosya.tc/server9/cc5akp/ANBD-XNPV.xlsx.html


.
__________________
Çalışmalarımı görmek için:

http://www.excelgurusu.com/

İdris SERDAR
İdris SERDAR Çevrimdışı   Alıntı Yaparak Cevapla
Eski 01-12-2016, 16:10   #10
h_semerkand
 
Giriş: 19/05/2012
Şehir: İstanbul
Mesaj: 9
Excel Vers. ve Dili:
Excel 2007
Varsayılan

İdris bey teşekkür ederim.

Fakat seri tanımlama sadece ANBD fonksiyonunda değil birçok fonksiyonda gerekli. Fonksiyonu aşağıdaki şekilde kısa hale getirdim.
Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
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)
dizi = Array(Değer1, Değer2, Değer3, Değer4, Değer5, Değer6, Değer7, Değer8, Değer9, Değer10)
For i = 0 To 9
 If IsNull(dizi(i)) = True Or IsMissing(dizi(i)) = True Then
 Exit For
 Else
 sayı = i
 End If
Next i
ReDim yenidizi(sayı) As Double
For j = 0 To sayı
 yenidizi(j) = dizi(j)
Next j
seri_olustur = yenidizi
End Function
h_semerkand Çevrimdışı   Alıntı Yaparak Cevapla
Yanıtla


Konu Araçları
Görünüm Modları

Gönderme Kuralları
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
SimgelerAçık
[IMG] kodu Açık
HTML kodu Kapalı


Saat 21:35


Bu forum Elit NET - www.elitnet.com.tr tarafından sunulmaktadır.

Excel Eğitimi - Mobil Uygulama - Çorlu - Çorlu Web Tasarım -- Beylikdüzü mali müşavir - Lingerie - Dyeing Machine - Karton Bardak- Karton Bardak- Çorlu Dil Konuşma Terapisti- Çorlu Özel Eğitim- Site Yönetimi- Pronet Tekirdağ- Çorlu Kamera- Pronet Edirne- Pronet Çorlu- Çorlu Araç Takip- Çorlu Su Arıtma- Gebze Emlak- Rampa- Rotary- Çorlu İnternet Sitesi- Çorlu Sürücü Kursu- Çorlu Sürücü Kursu- Şişli Avukat- Edirne Serbest Muhasebeci- Çorlu Etüt- İstanbul Botanik- Çorlu Sigorta- Kağıt Bardak- Kaplan Tekstil- Çorlu Perde- Çorlu Havuz- Makina- Danışmazlar-
Powered by vBulletin Version 3.7.2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Advertisement System V2.6 By   Branden