Aynı Hücre İçerisindeki Birden Fazla Değeri Toplama

  • Konuyu başlatan Konuyu başlatan bd
  • Başlangıç tarihi Başlangıç tarihi
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Çözüm
Bu makroda benden alternatif olsun.

KTF: =XDtop(A1)
VBA:
Function XDtop(hcr As Range, Optional krt = " kg,")
XDdizi = Split(hcr, krt)
For i = LBound(XDdizi) To UBound(XDdizi)
XDtop = XDtop + CDbl(XDdizi(i))
Next
End Function


VBA:
Sub exceldepo()
XDdizi = Split(Range("A1").Value, " kg,")
For i = LBound(XDdizi) To UBound(XDdizi)
XDtopla = XDtopla + CDbl(XDdizi(i))
Next
MsgBox XDtopla
End Sub
İlk çözüm benden olsun... başka çözümü olan varmı ?
Kod:
=EĞER(ESAYIYSA(MBUL("kg";A1));TOPLA.ÇARPIM(--(0&KIRP(YERİNEKOY(PARÇAAL(YERİNEKOY(A1;"kg,";YİNELE(" ";UZUNLUK(A1)));1+((SATIR(DOLAYLI("$1:"&(1+UZUNLUK(A1)-UZUNLUK(YERİNEKOY(A1;"kg,";"")))))-1)*UZUNLUK(A1));UZUNLUK(A1));"kg";""))));TOPLA.ÇARPIM(--KIRP(PARÇAAL(YERİNEKOY(A1;",";YİNELE(" ";UZUNLUK(A1)));1+((SATIR(DOLAYLI("$1:"&(1+UZUNLUK(A1)-UZUNLUK(YERİNEKOY(A1;",";"")))))-1)*UZUNLUK(A1));UZUNLUK(A1)))))
 
Makrolu kodda benden olsun.

VBA:
Private Sub CommandButton1_Click()

Dim kes, i As Integer, al

kes = WorksheetFunction.Substitute(Range("A1").Value, "kg,", "kg")
kes = Split(kes, " kg")
For i = LBound(kes) To UBound(kes) - 1
    al = al + CDbl(kes(i))
Next
Range("B1").Value = al
Erase kes

End Sub
 
bende bir şeyler yapmaya çalıştım
Kod:
=EĞER(A1="";"";SOLDAN(A1;6)+PARÇAAL(A1;BUL(",";A1;BUL(",";A1)+1)+1;3)+PARÇAAL(A1;BUL(",";A1;BUL(",";A1;BUL(",";A1)+1)+1)+1;6))
 
Ktf ki ve başka yöntemle.

Unbenannt.webp


VBA:
Private Sub CommandButton1_Click()

Dim kes, i As Integer, al

kes = Split(Trim(WorksheetFunction.Substitute(WorksheetFunction.Substitute(Range("A1").Value, " ", ""), "kg,", "kg")), "kg")
For i = LBound(kes) To UBound(kes) - 1
    al = al + kes(i) + 0
Next
Range("B1").Value = al
Erase kes

End Sub

VBA:
Function kesss(rng As Range)

Dim kes, i As Integer, al

kes = Split(Trim(WorksheetFunction.Substitute(WorksheetFunction.Substitute(rng.Value, " ", ""), "kg,", "kg")), "kg")
For i = LBound(kes) To UBound(kes) - 1
    al = al + kes(i) + 0
Next
kesss = al
Erase kes

End Function
 

Ekli dosyalar

B uda benden olsun yani burdaki ikilemi gördünüzmü fonksiyon ne kadar uzun olursa o kadar işlevi sağlamdır anlamına gelmiyor sanırım.

VBA:
Function KgTOPLA(Veri As Range, Optional Ayıraç = ",")
    Dim Sayı_Bul As Double
    Application.Volatile True
    Sayı = Split(Veri.Value, Ayıraç)
    For X = 0 To UBound(Sayı)
        If Sayı(X) <> "" Then
            If Left(Sayı(X), 1) = "," Then
                Sayı_Bul = Mid(Sayı(X), 2, Len(Sayı(X)) - 1)
                KgTOPLA = KgTOPLA + CDbl(Sayı_Bul)
            Else
                KgTOPLA = KgTOPLA + CDbl(Sayı(X))
            End If
        End If
    Next
End Function
 

Ekli dosyalar

Soruyu soran üye kg olarak sormuş.Kısa yönden yapmıştım tabii koda eğer boşşa yada eğer hatalıysa gibi şeylerde eklenebilir.Sizin yaptığınızda iyi olmuş.Aslında en mantıklısı butona yazdığım kod onu döngüye sokup mesela A sütunundaki son dolu satıra kadar felan olsa daha iyi olur.Üye sadece A1 ve B1 için istemiş:)
Kısaca formülü severdim kodla tanışana kadar :)
Sonuç üyenin istediği gibi olsunda farketmez.
 
tsk ederim ?ama benApplication.Volatile yi kullandım çünkü kullanıcının hücreye bağımlı olmasını istemedim aslında bu konuyu açarken amacım şuydu ki buna siz cevap yazdınız kod ile kendi fonksiyonunuzu oluşturmanın yaygın hale gelebileceğini anlatmaya çalışmaktı ve aslında çoğu kullanıcı belkide farkında değildir böyle bir işlemin olabileceğinden ...
 
Rica ederim.Alttaki kodu extra kullanmamıştım çünkü araştırmalarımda tavsiye edilmiyordu her ne kadar hesaplamayı tetiklesede.
Application.Volatile
 
evet haklısınız varoluş nedeni zaten kulanıcı için gecici çözüm üretme sonrasında bir etkisi kalmıyor tek yaptığı tetikleme ise sadece deger değiştikce sonuç döngüsü yapmak selamlar...iftar vakti inşallah yaklaşıyor..hayırlı iftarlar
 
Bir alternatif de benden. (KFT)

Kod:
Function KG_Topla(alan)
    Application.Volatile
    Set vrg = CreateObject("vbscript.regexp")
    vrg.Global = True
    vrg.Pattern = "\d+(,)*\d{0,2}\s*(kg|\$)"
    Set a = vrg.Execute(alan)
    topla = 0
        For i = 0 To a.Count - 1
            topla = topla + Val(Replace(a(i), ",", "."))
        Next i
    KG_Topla = topla
End Function

Formul: =KG_Topla(A1)
 
Arkadaşlar merhaba,

En sevdiğim etkileşimi yapmışsınız.
İlerde bu etkileşimler (Excel Pratikleri) için özel bir forum olacak.

Sorulan soruya cevap verilmeden diğer üyelerin cevapları görülemeyecek.

Burada sorulan sorular ihtiyaç için değil, tamamen beyin cimnastiği yapmak için olacak ve soruyu soranda cevabını ilk konuya ekleyecek.

Alt yapısını Exceldepo.com da yapmıştım bu sistemin ama buranın kullanımı daha güçlü olduğundan buraya kurguluyoruz şimdi.

Bakalım düşündüğüm etkiyi yapacak mı?
 
Birden fazla alternatif.... Hangi yoldan sonuca ulaşmak istersen onu kullan... Seviyorum bu exceli :)) Derya deniz... Daha neler öğreneceğiz bakalım...
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Benzer Konular Popüler İçerikler Daha Fazlası
Geri
Üst Alt