• DİKKAT

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

Aynı hücrede yer alan metin ve sayıların içinden sayıların toplanması ve yanınada Adet metninin eklenmesi

Katılım
4 Mayıs 2020
Mesajlar
7
Excel Vers. ve Dili
12 trükçe
Merhabalar;

Örneğin tek hücrede yer alan : (11 Adet 5 kg) ifadesinin 11+5 :16 Adet sonucunu verecek şekilde toplanması için yardımcı olabilir iseniz sevinirim. Her halükarda sonucun aynına istediğimiz adet vs gibi bir metininde eklenmesi
 
Veriniz A1 hücresinde ise;
Kod:
=BİRLEŞTİR((SOLDAN(A1;BUL("Adet";A1;1)-1))+(PARÇAAL(A1;BUL("t ";A1;1)+2;BUL(" kg";A1;1)-BUL("t ";A1;1)-2));" EXCEL")

EXCEL yazdığım yere istediğiniz değeri yazabilirsiniz.
Formülü aşağıya doğru kopyalayabilirsiniz.
 
Üstad merhaba,
Burada (11 Adet 5 Kg) tek bir hücrede yer alıyor, ayrı hücreler olmadığı için birleştir olmaz kanaatimce ama, birde buradaki adet ve kg değişebilir sürekli olarak tabloda bu örnek olarak yazdım saedece
 
Örnek excel paylaşırsanız istemiş olduğunuzu daha rahat anlayıp ona göre çözümler üretilebilir.
dosya.tc sitesine örnek dosyayı yüklerseniz yardımcı oluruz.
 
Kullanıcı Tanımlı Fonksiyon;

Hücrede kullanım şekli; =K_TOPLA(Hücre;Birim)

Dilerseniz birim bölümü boş bırakılabilir. Opsiyonel olduğu için formül otomatik olarak Adet ifadesini kendisi ekler.

Örnek; =K_TOPLA(A1;"Adet")

C++:
Option Explicit

Function K_TOPLA(Alan As Range, Optional Birim As String = "Adet") As String
    Dim Veri As Range, Kelime As Variant, X As Integer, Toplam As Double
    
    Application.Volatile
    
    For Each Veri In Alan
        If Veri.Value <> "" Then
            Kelime = Split(Veri.Value)
            For X = 0 To UBound(Kelime)
                If IsNumeric(Kelime(X)) Then
                    Toplam = Toplam + Kelime(X)
                    If K_TOPLA = "" Then
                        K_TOPLA = Kelime(X)
                    Else
                        K_TOPLA = K_TOPLA & "+" & Kelime(X)
                    End If
                End If
            Next
        End If
    Next
    
    K_TOPLA = K_TOPLA & " : " & Toplam & " " & Birim
End Function
 
Kullanıcı Tanımlı Fonksiyon;

Hücrede kullanım şekli; =K_TOPLA(Hücre;Birim)

Dilerseniz birim bölümü boş bırakılabilir. Opsiyonel olduğu için formül otomatik olarak Adet ifadesini kendisi ekler.

Örnek; =K_TOPLA(A1;"Adet")

C++:
Option Explicit

Function K_TOPLA(Alan As Range, Optional Birim As String = "Adet") As String
    Dim Veri As Range, Kelime As Variant, X As Integer, Toplam As Double
   
    Application.Volatile
   
    For Each Veri In Alan
        If Veri.Value <> "" Then
            Kelime = Split(Veri.Value)
            For X = 0 To UBound(Kelime)
                If IsNumeric(Kelime(X)) Then
                    Toplam = Toplam + Kelime(X)
                    If K_TOPLA = "" Then
                        K_TOPLA = Kelime(X)
                    Else
                        K_TOPLA = K_TOPLA & "+" & Kelime(X)
                    End If
                End If
            Next
        End If
    Next
   
    K_TOPLA = K_TOPLA & " : " & Toplam & " " & Birim
End Function

korhan bey gayet güzel oldu ama sadece sonuç yazılsın istiyoruz örneğin sadece 18 adet gibi
 
B1 Hücresine kopyalayınız.Aşağı doğru çoğaltınız.Not: İşlemi tam anlayamadım formüldeki * işareti uygun değil ise istediğiniz işlem işareti ile değiştiriniz + / gibi
Kod:
=KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));1;100))*KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));200;100))&" "&KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));300;100))
 
Merhaba

Yukarda Korhan Ayhan beyin yukardaki 5 numaralı mesajındaki Kullanıcı Tanımlı Fonksiyonu gayet güzel olmuş.

Alternatif olarak ilgili hücre çift tıklandığında aynı hücrenin hemen sağ tarafına
istenilen sonucu yazan makro koduda aşağıdadır.

Selamlar...
Kod:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'04.05.2020   15:54

Target.Value = Target.Value & " "

For i = 1 To Len(Target.Value)

    If Mid(Target.Value, i, 1) >= 0 And Mid(Target.Value, i, 1) <= 9 Then 
        say = say & Mid(Target.Value, i, 1)     
    Else 
        If say <> "" Then     
            topla = topla + say * 1
            say = ""         
        End If   
    End If

Next

Target.Value = Mid(Target.Value, 1, Len(Target.Value) - 1)

If topla > 0 Then
 
    Target.Offset(0, 1) = ""
    timer1 = Timer
    Do While Timer - timer1 < 0.3
    Loop
    Target.Offset(0, 1) = topla & "  Adet" 
 
End If

End Sub
 
"adet" ve "kg" metinleri her hücrede sabit olsa, formülle de çözülebilir .... Yoksa, aşağıdaki formülü iyice uzatmak gerekir.

Kod:
=SUMPRODUCT((TRIM(MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1;" adet ";"+"); "kg";"");"+";REPT(" ";255));1+(ROW(A$1:A$999)-1)*255;255)) & "0")/10)


Not: Mesajı yazana kadar 2 cevap daha gelmiş .... ;)

.
 
B1 Hücresine kopyalayınız.Aşağı doğru çoğaltınız.Not: İşlemi tam anlayamadım formüldeki * işareti uygun değil ise istediğiniz işlem işareti ile değiştiriniz + / gibi
Kod:
=KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));1;100))*KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));200;100))&" "&KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));300;100))

=KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));1;100))*KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));200;100))&" "&KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));300;100))

yerine

=KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));1;100))+KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));200;100))&" "&KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));300;100))

yapınca oluyor üstad çarpma (*) işaret yerine toplama (+) işareti ile değiştiridim üstad
 
=KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));1;100))*KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));200;100))&" "&KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));300;100))

yerine

=KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));1;100))+KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));200;100))&" "&KIRP(PARÇAAL(YERİNEKOY($A1;" ";YİNELE(" ";100));300;100))

yapınca oluyor üstad çarpma (*) işaret yerine toplama (+) işareti ile değiştiridim üstad
Dönüş yaptığınız için teşekkür ederim.
 
Başlığınızda sonuna ADET eklesin diye belirtince ek olarak ilk mesajınızda 11+5: 16 Adet sonucunu versin ifadesini kullanınca ben sonucu METİN biçiminde görmek istediğinizi düşündüm.

Aşağıdaki kullanıcı tanımlı fonksiyonu deneyebilirsiniz.

Sonucu hesaplar sonuna sizin belirlediğiniz birimi ekler.

C++:
Option Explicit

Function K_TOPLA(Alan As Range, Optional Birim As String = "Adet") As String
    Dim Veri As Range, Kelime As Variant, X As Integer, Toplam As Double
    
    Application.Volatile
    
    For Each Veri In Alan
        If Veri.Value <> "" Then
            Kelime = Split(Veri.Value)
            For X = 0 To UBound(Kelime)
                If IsNumeric(Kelime(X)) Then
                    K_TOPLA = K_TOPLA + Kelime(X)
                End If
            Next
        End If
    Next
    
    K_TOPLA = K_TOPLA & " " & Birim
End Function
 
tüm arkadaşlarımızın emeğine sağlık, teşekkür ederiz

Sevgili Peygamberimiz, "İnsanların en hayırlısı, insanlara faydalı olandır"(el-Aclûnî, Keşfu’l-Hafâ, 1/393, H. No: 1254) buyuruyor.

Allah razı olsun
 
Geri
Üst