Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zahlen aus aus Text extrahieren und addieren

Zahlen aus aus Text extrahieren und addieren
11.09.2008 16:20:36
Bernd
Hallo,
ich würde gerne aus einer Zelle, die sowohl Zahlen, aber auch Text enthält, die Zahlen "extrahieren" und miteinander addieren. Der Inhalt der Zelle B2 z.B. würde so aussehen:
'+15 Autos;-10 Waschmaschinen;-3 Schränke
Nun möchte ich in Zelle C2 das Ergebnis sehen: 2
Wie könnte das funktioniere?
Gruß
Bernd
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlen aus aus Text extrahieren und addieren
11.09.2008 17:00:00
Peter
Hallo Bernd,
versuch es so:

Public Sub Addiere()
Dim Temp_1  As Variant
Dim Temp_2  As Variant
Dim iIndex  As Integer
Dim lZeile  As Long
Dim dSumme  As Double
For lZeile = 2 To 2
dSumme = 0
Temp_1 = Split(Range("B" & lZeile).Value, ";")
For iIndex = 0 To UBound(Temp_1)
Temp_2 = Split(Temp_1(iIndex), " ")
If IsNumeric(Temp_2(0)) Then
dSumme = dSumme + CDbl(Temp_2(0))
End If
Next iIndex
MsgBox "Die Summe ist " & dSumme
Next lZeile
End Sub


Gruß Peter

Anzeige
AW: Zahlen aus aus Text extrahieren und addieren
11.09.2008 20:20:51
Bernd
Hallo,
danke, das klappt wirklich perfekt! Vielleicht noch was als "Nice to have" :
Kann man das so automatisieren, dass bei manuellen Änderungen in den Zellen von Spalte B automatisch die neuen Summen gerechnet werden ohne dass ich das Makro manuell starten muss?
Gruß
Bernd
AW: Zahlen aus aus Text extrahieren und addieren
11.09.2008 21:28:07
Peter
Hallo Bernd,
dann füge das nachfolgende Makro in das betreffende Tabellenblatt
Rechtsklick auf den Tabellenblattreiter
Linksklick auf Code anzeigen
Makro in das sich öffnende Fenster kopieren
mit Schließen-Kreuz schließen
ausprobieren.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Temp_1  As Variant
Dim Temp_2  As Variant
Dim iIndex  As Integer
Dim lZeile  As Long
Dim dSumme  As Double
If Target.Count = 1 And Target.Column = 2 Then
dSumme = 0
Temp_1 = Split(Target.Value, ";")
For iIndex = 0 To UBound(Temp_1)
Temp_2 = Split(Temp_1(iIndex), " ")
Temp_2(0) = Trim(Temp_2(0))
If IsNumeric(Temp_2(0)) Then
dSumme = dSumme + CDbl(Temp_2(0))
End If
Next iIndex
Range("C" & Target.Row).Value = dSumme
End If
End Sub


Gruß Peter

Anzeige
AW: Zahlen aus aus Text extrahieren und addieren
12.09.2008 10:42:49
Bernd
Hallo Peter,
danke für die Erweiterung, die auch funktioniert! Die Lösung von Chris hat auch seine Reize, vor allem weil da die Syntax, wie man die Zahlen aus dem Text rausliest, nicht so starr ist. Wenn z. B. im text versehentlich mal ein Komma statt Semikolon auftaucht, wird trotzdem addiert. Laesst sich Dein Makro dahingegend nich flexibilisieren bzw. könnte man das Makro von Chris ebenfalls noch so perfektionieren, dass bei Änderungen in Spalte B sofort neu gerechnet wird?
Viele Grüße
Bernd
Anzeige
AW: Zahlen aus aus Text extrahieren und addieren
12.09.2008 13:56:36
Chris
Servus Bernd,
so:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DatenArray() As Long, MIDArray() As Variant
Dim i As Long, x As Long, summe As Double, z As Long
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column  2 Then Exit Sub
If Target.Column = 2 And Target.Value = "" Then Target.Offset(0, 1) = "": Exit Sub
If Not Intersect(Target, Range("B:B")) Is Nothing Then
For i = 1 To Len(Target)
If IsNumeric(Mid(Target, i, 1)) Then
ReDim Preserve DatenArray(x)
ReDim Preserve MIDArray(x)
DatenArray(x) = i
MIDArray(x) = Mid(Target, i, 1)
x = x + 1
Else
If i > 1 Then
If Mid(Target, i, 1) = "," And IsNumeric(Mid(Target, i - 1, 1)) And IsNumeric(Mid(Target,  _
i + 1, 1)) Then
ReDim Preserve DatenArray(x)
ReDim Preserve MIDArray(x)
DatenArray(x) = i
MIDArray(x) = Mid(Target, i, 1)
x = x + 1
End If
End If
End If
Next i
For i = LBound(DatenArray()) To UBound(DatenArray())
If DatenArray(i) - 1  0 Then
Select Case Mid(Target, DatenArray(i) - 1, 1)
Case "-":
MIDArray(i) = "-" & MIDArray(i)
End Select
End If
Next i
For i = LBound(DatenArray()) + 1 To UBound(DatenArray())
If DatenArray(i) = DatenArray(i - 1) + 1 Then
MIDArray(i) = MIDArray(i - 1) & MIDArray(i)
MIDArray(i - 1) = 0
End If
Next i
For i = LBound(MIDArray()) To UBound(MIDArray())
summe = summe + MIDArray(i)
Next i
Cells(Target.Row, 3) = summe
End If
End Sub


berücksichtigt jetzt auch Kommazahlen, was vorher nicht war.
Gruß
Chris

Anzeige
AW: Zahlen aus aus Text extrahieren und addieren
12.09.2008 15:22:00
Bernd
Hallo Chris,
noch 2 Fragen zu Deiner Lösung:
Wo steuere ich genau die Spalte, die ich berechnen möchte bzw. wie kann ich z.B. definieren, dass ich nur B2:B18 berechnet wird also nicht die ganze Spalte?
Gruß
Bernd
AW: Zahlen aus aus Text extrahieren und addieren
12.09.2008 15:52:00
Chris
Servus Bernd,
If Target.Column 2 Then Exit Sub
If Target.Column = 2 And Target.Value = "" Then Target.Offset(0, 1) = "": Exit Sub
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Für andere Spalten da, wo 2 steht, die Zahl für die anderen Spalten angeben z.B. Spalte H = 8 und B:B dann durch H:H ersetzen.
für B2:B18 das, statt B:B schreiben .
Wenn die Spalte geändert wird, muss auch summe = ... geändert werden, da hier jetzt in C geschriebeb wird.
ambesten hier Target.Offset(0,1) schreiben (nachbarzelle)
Gruß
Chris
Anzeige
Vielen Dank!
15.09.2008 13:10:59
Bernd
Hallo Chris,
besten Dank für die detaillierte Anwort! Ich denke, dass muesste ich hinbekommen, ansonsten melde ich mich nochmal!
Gruß
Bernd
AW: Zahlen aus aus Text extrahieren und addieren
11.09.2008 17:21:11
Chris
Servus,
oder so, wenn das Trennzeichen kein semikolon ist, sondern beliebig:

Sub test()
Dim DatenArray() As Long, MIDArray() As Double
Dim i As Long, x As Long, summe As Double, z As Long, letzte As Long
letzte = Cells(Rows.Count, 2).End(xlUp).Row
For z = 2 To letzte
For i = 1 To Len(Cells(z, 2))
If IsNumeric(Mid(Cells(z, 2), i, 1)) Then
ReDim Preserve DatenArray(x)
ReDim Preserve MIDArray(x)
DatenArray(x) = i
MIDArray(x) = Mid(Cells(z, 2), i, 1)
x = x + 1
End If
Next i
For i = LBound(DatenArray()) To UBound(DatenArray())
'MsgBox DatenArray(i) & " " & MIDArray(i)
Select Case Mid(Cells(z, 2), DatenArray(i) - 1, 1)
Case "-":
MIDArray(i) = "-" & MIDArray(i)
End Select
'MsgBox DatenArray(i) & " " & MIDArray(i)
Next i
For i = LBound(DatenArray()) + 1 To UBound(DatenArray())
If DatenArray(i) = DatenArray(i - 1) + 1 Then
MIDArray(i) = MIDArray(i - 1) & MIDArray(i)
MIDArray(i - 1) = 0
End If
Next i
For i = LBound(MIDArray()) To UBound(MIDArray())
summe = summe + MIDArray(i)
Next i
Cells(z, 3) = summe
summe = 0
x = 0
Next z
End Sub


Das ist für die gesamte Spalte B.
Gruß
chris

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zahlen aus Text extrahieren und addieren in Excel


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul hinzufügen: Rechtsklicke auf "VBAProject (DeineDatei.xlsx)", wähle Einfügen und dann Modul.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Public Sub Addiere()
       Dim Temp_1 As Variant
       Dim Temp_2 As Variant
       Dim iIndex As Integer
       Dim lZeile As Long
       Dim dSumme As Double
    
       For lZeile = 2 To 2
           dSumme = 0
           Temp_1 = Split(Range("B" & lZeile).Value, ";")
           For iIndex = 0 To UBound(Temp_1)
               Temp_2 = Split(Temp_1(iIndex), " ")
               If IsNumeric(Temp_2(0)) Then
                   dSumme = dSumme + CDbl(Temp_2(0))
               End If
           Next iIndex
           MsgBox "Die Summe ist " & dSumme
       Next lZeile
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: Makro wird nicht ausgeführt

    • Stelle sicher, dass die Entwicklertools aktiviert sind. Gehe zu Datei > Optionen > Menüband anpassen und aktiviere Entwicklertools.
  • Fehler: Falsches Ergebnis

    • Überprüfe, ob der Text in der Zelle korrekt formatiert ist und die Zahlen durch Semikolons getrennt sind.

Alternative Methoden

Eine weitere Möglichkeit, um Zahlen aus Text zu extrahieren und zu addieren, besteht darin, die Formel SUMME in Kombination mit WERT und TEXTVERKETTEN zu verwenden. Hier ist ein Beispiel:

=SUMME(WERT(TEXTVERKETTEN(";", B2)))

Diese Methode ist einfacher, erfordert jedoch, dass die Zahlen in einem konsistenten Format vorliegen.


Praktische Beispiele

Angenommen, du hast in Zelle B2 folgenden Text: '+15 Autos;-10 Waschmaschinen;-3 Schränke. Um die Zahlen in Zelle C2 zu addieren, kannst du die oben genannten Makros verwenden.

  1. Beispiel 1: Zelle B2 enthält '+20 Äpfel;-5 Birnen;10 Trauben

    • Ergebnis in C2: 25
  2. Beispiel 2: Zelle B3 enthält '-7 Stühle;3 Tische;5 Lampen

    • Ergebnis in C3: 1

Tipps für Profis

  • Automatisierung: Verwende das Worksheet_Change-Ereignis, um das Makro automatisch auszuführen, wenn Änderungen in der Spalte B vorgenommen werden. Hier ist ein Beispiel:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("B:B")) Is Nothing Then
           Call Addiere
       End If
    End Sub
  • Flexibilität: Um die Trennzeichen flexibel zu gestalten, passe den Split-Befehl an, sodass er auch Kommas oder andere Zeichen berücksichtigt.


FAQ: Häufige Fragen

1. Wie kann ich die Zahlen aus mehreren Zellen extrahieren?
Du kannst die Schleife im Makro so anpassen, dass sie mehrere Zeilen durchläuft, z.B. von For lZeile = 2 To 18.

2. Funktioniert das auch mit Excel für Mac?
Ja, der VBA-Code funktioniert sowohl in Windows- als auch in Mac-Versionen von Excel, solange die Entwickleroptionen verfügbar sind.

3. Wie kann ich das Makro anpassen, um es auf eine andere Spalte anzuwenden?
Ändere die Zahl in If Target.Column = 2 Then auf die entsprechende Spaltennummer, z.B. If Target.Column = 8 Then für Spalte H.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige