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

Forumthread: Zahl mit String in negative Zahl wandeln

Zahl mit String in negative Zahl wandeln
29.03.2022 11:27:59
Bernd
Hallo allen hier im Forum,
hoffentlich kann mir jemand helfen: Ich habe in einer Excel Datei aus der Buchhaltung eine Textspalte deren Zellen mit einer Zahl und einem Buchstaben gefüllt sind. Die Zahl steht für den Betrag und der Buchstabe für das Vorzeichen. Beispiel: 123456 H oder 123456 S. Das H steht für Haben, also ein positiver Wert, und das S steht für Soll; also ein negativer Wert. Damit ich diese Zellen als Zahlenwerte wandele, lösche ich mit einem Makro die Buchstaben raus und wandel danach die Zellen in eine Zahl um. Das funktioniert soweit auch super. Aaaaaber: Bei den Werten mit einem S für Soll müsste ich eine Minuszahl erzeugen. Ich bräuchte also eine Schleife, die die Zellen nach den Werten mit einem S durchsucht, das "S" löscht, den Wert in der Zelle in eine negative Zahl wandelt. Hat jemand eine Idee?

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Zahl mit String in negative Zahl wandeln
29.03.2022 11:32:45
{Boris}
Hi,
z.B. - bezogen auf die aktuelle Selektion:

Sub til()
Dim C As Range
For Each C In Selection
C.Replace "H", ""
If Right(C, 1) = "S" Then
C.Replace "S", ""
C = C * -1
End If
Next C
End Sub
VG, Boris
AW: Zahl mit String in negative Zahl wandeln
29.03.2022 11:33:16
UweD
Dann zeig uns doch mal ein bestehendes Makro
LG UweD
Anzeige
AW: Zahl mit String in negative Zahl wandeln
29.03.2022 11:43:50
UweD

Sub SollHaben()
Dim LR As Integer, i As Integer, Sp As Integer, Z1 As Integer
Sp = 1 'Spalte A
Z1 = 2 'wegen Überschrift
LR = Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
For i = Z1 To LR
With Cells(i, Sp)
If InStr(.Value, "S") > 0 Then
.Value = -CDbl(Replace(.Value, "S", ""))
ElseIf InStr(Cells(i, Sp), "H") > 0 Then
.Value = CDbl(Replace(.Value, "H", ""))
End If
End With
Next
End Sub
LG UweD
Anzeige
AW: Zahl mit String in negative Zahl wandeln
29.03.2022 15:16:24
Bernd
Liebe Forumsmitglieder,
vielen Dank für die schnelle Hilfe.
Das Makro von UweD hat super funktioniert. Lieben Dank.
Bin begeistert. Habe noch die Währungsformatierung drangehängt.

Sub SollHaben()
Dim LR As Integer, i As Integer, Sp As Integer, Z1 As Integer
Sp = 12 'Spalte L
Z1 = 2 'wegen Überschrift
LR = Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
For i = Z1 To LR
With Cells(i, Sp)
If InStr(.Value, "S") > 0 Then
.Value = -CDbl(Replace(.Value, "S", ""))
.NumberFormat = "#,##0.00 $"
ElseIf InStr(Cells(i, Sp), "H") > 0 Then
.Value = CDbl(Replace(.Value, "H", ""))
.NumberFormat = "#,##0.00 $"
End If
End With
Next
End Sub

Anzeige
Prima
29.03.2022 15:44:11
UweD
Danke für die Rückmeldung
AW: Zahl mit String in negative Zahl wandeln
29.03.2022 11:34:01
JoWE
Hallo Bernd,
Du schriebst "...und wandel danach die Zellen in eine Zahl um".
Damit hast Du doch bereits einen Teil der Lösung.
Die umgewandelte Zahl muss lediglich noch mit minus 1 (-1) multpliziert werden.
Gruß
Jochen
AW: Zahl mit String in negative Zahl wandeln
29.03.2022 11:37:47
Rudi
Hallo,
für Spalte A:

Sub aaa()
Dim rngC As Range
Application.ScreenUpdating = False
For Each rngC In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
Select Case Right(rngC, 1)
Case "H": rngC = Replace(rngC, "H", "") * 1
Case "S": rngC = Replace(rngC, "S", "") * -1
End Select
Next rngC
End Sub
Gruß
Rudi
Anzeige
=(1-2*(RECHTS(A1)="S"))*WECHSELN(A1;RECHTS(A1);)
29.03.2022 12:01:39
lupo1
AW: Zahl mit String in negative Zahl wandeln
29.03.2022 12:45:33
Daniel
Hi
prinzipiell mag ich keine Schleifen. Das geht auch ohne.
1. Ersetze " H" durch nichts
2. Ersetze " S" durch "-"
3. Wende dann DATEN - DATENTOOLS - TEXT IN SPALTEN auf die Spalte an um aus den Textwerten Zahlen zu machen. Hierbei kann man angeben, dass negative Zahlen ein nachgestelltes "-" haben, somit werden dann auch diese als Zahl erkannt.

With Columns(1)
.Replace " H", "", xlPart
.Replace " S", "-", xlPart
.TextToColumns Destination:=.Cells(1, 1), DataType:=xlFixedWidth, FieldInfo:=Array(0, 1), _
DecimalSeparator:=",", ThousandsSeparator:=".", TrailingMinusNumbers:=True
End With
allerdings würde ich in solchen Fällen die Originalspalte so belassen wie sie ist (zur Dokumentation) und in einer zusätzlichen Spalte die Werte berechnen und mit dieser Spalte weiter arbeiten.
Hier würde ich die Umwandlung mit Formeln machen, einige wurden dir ja schon genannt.
ich schlage diese vor:

=Links(A1;Länge(A1)-2)*2*((Rechts(A1;1)="H")-0,5)
oder

=Links(A1;Länge(A1)-2)*Wenn(Rechts(A1;1)="S";-1;1)
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige