• DİKKAT

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

Formül içeren hücreleri toplama

Katılım
13 Temmuz 2013
Mesajlar
241
Excel Vers. ve Dili
Türkçe 2007
Arkadaşlar merhaba, ek'li dosyada belirtmiş olduğum içeriğinde formül olan hücreleri nasıl toplayabiliriz?
 

Ekli dosyalar

Dosyanız ektedir.:cool:
Kod:
Sub formultopla59()
Dim i As Long, toplam As Double
For i = 2 To 28
    If Range("B" & i).HasFormula And IsNumeric(Range("B" & i)) Then _
            toplam = toplam + Range("B" & i).Value
Next i
MsgBox "TOPLAM : " & toplam
End Sub
 

Ekli dosyalar

Hocam emeğine sağlık peki şunu yapabilirmiyiz rakamları b sütununa formül ile aldım. Öyle bir şey yapmadan sadece rakamları toplatabilirmiyiz? dosyayı ekliyorum daha detaylı belirttim hocam...
 

Ekli dosyalar

Hocam emeğine sağlık peki şunu yapabilirmiyiz rakamları b sütununa formül ile aldım. Öyle bir şey yapmadan sadece rakamları toplatabilirmiyiz? dosyayı ekliyorum daha detaylı belirttim hocam...
Dosyanız ektedir.:cool:
Kod:
Sub topla59()
Dim topla As Double, i As Long
Range("B:B").Clear
For i = 2 To 28
    sayi = Right(Cells(i, "A").Value, Len(Cells(i, "A").Value) - 3)
    If IsNumeric(sayi) Then Cells(i, "B").Value = sayi * 1
Next i
MsgBox "İşlem Tamamlandı." & vbLf & "evrengizlen@hotmail.com"
    
End Sub
 

Ekli dosyalar

hocam 25. satırda NO: ADH 1 ADET
yazıyor fakat burayı almamış burdaki 1 rakamını alması gerekiyor. yani orda 5 te yazabilir sadece rakamları seçerek toplamını vermesini istiyorum mümkünmüdür?

hocam örneğin hücre içerisinde NO: sasa 1 ssa veya NO değilde Numara: sd 1 sd gibi veriler olabilir sadece rakamları alıp toplasın istediğim bu.. imkansız bşey değildir umarım:)
 
hocam 25. satırda NO: ADH 1 ADET
yazıyor fakat burayı almamış burdaki 1 rakamını alması gerekiyor. yani orda 5 te yazabilir sadece rakamları seçerek toplamını vermesini istiyorum mümkünmüdür?

hocam örneğin hücre içerisinde NO: sasa 1 ssa veya NO değilde Numara: sd 1 sd gibi veriler olabilir sadece rakamları alıp toplasın istediğim bu.. imkansız bşey değildir umarım:)

Tahsin bey ve Korhan bey çözümlemişler.
Kolay gelsin.
 
Aşağıdaki kodları deneyiniz, ıv sutunu yardımcı sutun olarak kullanılmış olup, rakamların toplamı b1 hücresine alınır
Kod:
Sub rakamlarıtopla()
Dim nums As String
Set regEx = CreateObject("vbscript.RegExp")
Set regEx = Nothing
For i = 1 To Cells(65536, 1).End(xlUp).Row
    For b = 1 To Len(Cells(i, 1))
        If IsNumeric(Mid(Cells(i, 1), b, 1)) = True Then
            nums = nums & Mid(Cells(i, 1), b, 1)
        End If
   Next b
   Cells(i, 256) = nums
   nums = ""
Next i
Range("B1") = WorksheetFunction.Sum(Range("ıv2:ıv65536"))
Range("ıv2:ıv65536").Clear
End Sub
 
Alternatif olarak "Regular Expression" (Düzenli İfadeler) özelliğini kullanarak hazırladığım fonksiyonu kullanabilirsiniz.

Fonksiyon içindeki deseni (Pattern) geliştirmek gerekebilir.

Kullanım şekli;
Kod:
=KTOPLA(A1:A100)


Kod:
Function KTOPLA(Alan As Range) As Double
    Dim Veri As Range
    
    Application.Volatile True
    
    With CreateObject("Vbscript.Regexp")
        .Pattern = "[a-zA-ZğüşiöçĞÜŞİÖÇ.;: ]+"
        .Global = True
        .IgnoreCase = True
        
        For Each Veri In Alan
            Debug.Print .Replace(Veri.Text, "")
            If IsNumeric(.Replace(Veri.Text, "")) Then
                KTOPLA = KTOPLA + .Replace(Veri.Text, "")
            End If
        Next
    End With
End Function
 
Sn. Korhan hocam, sn.OoParadiSeoO den öne ben teşekkür etmek istiyorum, arşivime alacağım değişik ve güzel bir kod, teşekkürler.
 
Alternatif olarak "Regular Expression" (Düzenli İfadeler) özelliğini kullanarak hazırladığım fonksiyonu kullanabilirsiniz.

Fonksiyon içindeki deseni (Pattern) geliştirmek gerekebilir.

Kullanım şekli;
Kod:
=KTOPLA(A1:A100)


Kod:
Function KTOPLA(Alan As Range) As Double
    Dim Veri As Range
    
    Application.Volatile True
    
    With CreateObject("Vbscript.Regexp")
        .Pattern = "[a-zA-ZğüşiöçĞÜŞİÖÇ.;: ]+"
        .Global = True
        .IgnoreCase = True
        
        For Each Veri In Alan
            Debug.Print .Replace(Veri.Text, "")
            If IsNumeric(.Replace(Veri.Text, "")) Then
                KTOPLA = KTOPLA + .Replace(Veri.Text, "")
            End If
        Next
    End With
End Function

Korhan Hocam,
Debug.Print ve Application.Volatile
ne işe yarıyor? Sildmi bir değişiklik göremedim.
 
Hocam emeğine sağlık muazzam birşey olmuş... patterni nasıl geliştirebilirz? örneğin "ı" harfi içeren bir metinden rakamı almadı. Her türlü olasılıkta veri alabilmemiz için bu sıkalayı nasıl geliştirebiliriz..
 
Hocam emeğine sağlık muazzam birşey olmuş... patterni nasıl geliştirebilirz? örneğin "ı" harfi içeren bir metinden rakamı almadı. Her türlü olasılıkta veri alabilmemiz için bu sıkalayı nasıl geliştirebiliriz..
Kod:
Sub regex_test()

deger = "0123::::: çÇ ğĞ ıI iİ öÖ şŞ üÜ.,?-/+*x 456 abz ABZ"

With CreateObject("VBScript.Regexp")
.Global = True

.pattern = "[^0-9]+"

MsgBox "Test9: " & .Replace(deger, "")
End With
End Sub
 
Merhaba Ergün Bey,

"Application.Volatile True" komutu her durumda fonksiyonun hesaplama işlemi yapmasını sağlar. KTF yani özel yazılmış fonksiyonlarda kullanılır.

"Debug.Print" komutu ise kod editöründe F8 tuşu ile kodu adım adım çalıştırıp oluşan değerleri görmek için kullanılır.

Kod editöründe "View-Immediate Window" menüsünden ya da CTRL+G tuşlarına basarak aktif hale getirebilirsiniz. Buradaki amaç kulandığımız kodun hangi değerleri ürettiğini gözlemlemektir.

Aktif hale getirdikten sonra aşağıdaki kodu F8 ile adım adım çalıştırıp gözlem yapın.

Kod:
Sub TEST()
    For X = 1 To 10
        Debug.Print "DENEME " & X
    Next
End Sub

Ayrıca sizin son önerdiğiniz desende ondalıklı sayıları alamadım.
 
Geri
Üst