iç içe kullanıcı tanımlı fonksiyon oluşturmak

Katılım
15 Haziran 2019
Mesajlar
26
Excel Vers. ve Dili
excel 2016 türkçe
formül çubuğuna gireceğim alandaki hücrelerde değerler var, ben oluşturduğum bir fonksyonla bu değerleri değiştirdikten sonra bu değerleri toplayıp fonksyonu yazdığım hücrede gösterecek bir fonksyon yazmak istemiştim

yani sütundaki hücrelerdeki değerleri ilk önce ilk fonksyonla değiştirip sonra ayrıca toplamak istemiyorum. tek bir fonksyon, belirttiğim aralıkta ilk fonksyonu çalıştırsın oluşan değerleri toplasın istiyorum. böyle bir şey mümkünmü? birşeyler yazdım ama çalıştıramadım #DEĞER! hatası veriyor


Function sadecesayi(ifade) ' suanda bu fonksyon bir hücredeki harf işaret karışık bir kelimeden sayıları çekip alıyor fakat fonksyon tanımlama kısmına(buraya) As integer yazdığım zaman DEĞER hatası veriyor. acaba bu yüzdenmi aşağıdaki fonksyonda kullanılamıyor?
Application.Volatile
Dim uzunluk As Long
uzunluk = Len(ifade)

sadecesayi = ""
For i = 5 To uzunluk - 2
If IsNumeric(Mid(ifade, i, 1)) Then
sadecesayi = sadecesayi & Mid(ifade, i, 1)
End If
Next
End Function

bu fonksyonu aşağıda kullanmak istiyorum ama yapamadım

Function toplam(bolge As Range) As Integer
Dim rng As Range
Application.Volatile


For Each rng In Range("bolge")
rng = sadecesayi(rng)
x = x + rng.Value
Next rng

toplam= x

End Function

yeni öğreniyorum bugün bu noktada çok takıldım yardım ederseniz çok sağolun..
 
Son düzenleme:

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
5,802
Excel Vers. ve Dili
2019 Türkçe
Merhaba.
Aşağıdaki gibi yapabilirsiniz.

Kod:
Function sadecesayi(ifade)
    Application.Volatile
    Dim uzunluk As Long
    Dim i As Integer
    uzunluk = Len(ifade)
    sadecesayi = ""
    For i = 5 To uzunluk - 2
        If IsNumeric(Mid(ifade, i, 1)) Then
            sadecesayi = sadecesayi & Mid(ifade, i, 1)
        End If
    Next
End Function

Function toplam(bolge As Range) As Long
    Dim rng As Range
    Application.Volatile
    For Each rng In bolge
        toplam = toplam + sadecesayi(rng.Value)
    Next rng
End Function
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Konu çözümlenmiş fakat alternatif olması açısından eğer dosyanızda özel bir durum yoksa tek kullanıcı fonksiyon ile de bu işlem yapılabilir.

Kod:
Option Explicit

Function KTOPLA(Alan As Range) As Double
    Dim Reg_Exp As Object, Veri As Range, Sayi As Double
    
    Application.Volatile True
    Set Reg_Exp = CreateObject("VBScript.RegExp")
    Reg_Exp.Pattern = "[^\d-]+"
    
    For Each Veri In Alan
        Sayi = Reg_Exp.Replace(Veri.Value, "")
        KTOPLA = KTOPLA + Sayi
    Next
End Function
 
Katılım
15 Haziran 2019
Mesajlar
26
Excel Vers. ve Dili
excel 2016 türkçe
çok teşekkürler sizinkini de çalışıcam
 
Üst