Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Val Funktion, aber von der rechten Seite eines Strings

Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 16:22:00
Eddie Felson
Hallo,
ich suche nach einer möglichst einfachen Funktion, die dem Val von der rechten Seite des Strings aus emuliert.

Beispiele für eingegende Strings und was rauskommen soll.
Die Zahl ist in meinem Fall, immer vorhanden. Sie ist entweder 1 oder zweistellig. Der zusätzlich Text, linker Hand ist nicht immer vorhanden.

Text - Ergebnis als Zahl

"1" - 1
"20" - 20

"Text 1" = 1
"Texttext 21" = 21

Eine Möglichkeit wäre von rechts, Stelle für Stelle abfragen, ob es eine Zahl ist
Wenn die als Ergebnis z.B. raus kommt, die Zahl ist zweistellig, den String an der Stelle teilen und den rechten Teil in eine Zahl umwandeln.

Es ist leicht zu machen, aber umständlich und vielleicht dilettantisch :-)



Gruß Eddie

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 16:29:18
ralf_b
was genau soll das dann werden?
kannst du etwas weiter ausholen was die Verwendung dieses Konstruktes angeht?
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 16:53:34
Onur
Bei einer über 20 Jahre alten Excelversion.....
Ist das Leerzeichen zw. Text und Zahl wenigstens immer vorhanden?
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 16:45:27
daniel
Hi
wenn die Zahl immer mit einem Leerzeichen vom Text getrennt ist, dann ginge folgendes:

dim x

x = Split("abc 12", " ")
x = x(ubound(x))
if isnumeric(x) then
x = cdbl(x)
else
x = 0
end if

ansonsten wüsste ich jetzt auch nichts einfaches.

Gruß Daniel
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 16:51:03
daniel
Hi
vielleicht so, zumindest mit Ganzzahlen sollte das funktionieren:
1. Text umdrehen (dafür gibts ne Funktion)
2. VAL anwenden
3. das Ergebnis von VAL umdrehen
4. nochmal VAL anwenden

x = Val(StrReverse(Val(StrReverse("abcd 123"))))


Gruß Daniel
Anzeige
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 17:28:00
Oppawinni
Für deine Testfälle funktioniert
=1*RECHTS(C7;LÄNGE(C7)-LÄNGE(WECHSELN(WECHSELN(WECHSELN(C7;"0";"");"1";"");"2";"")))
nicht ganz ernst gemeint.
Ich hab auch keine Idee, was 2003 überhaupt kann. War da nicht ne ziemlich knappe Beschränkung des Zellinhalts..
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 17:44:58
Oppawinni
ach, das
=1*RECHTS(A1;LÄNGE(A1)-LÄNGE(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(WECHSELN(A1;"0";"");"1";"");"2";"");"3";"");"4";"");"5";"");"6";"");"7";"");"8";"");"9";"")))
sind auch nur 202 Zeichen, bissl mehr wenn die Adressen ausgereizt werden. :)))
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 17:41:14
Yal
Hallo Eddie,

"bis 2003" ist sehr wahrscheinlich nicht passend. Wenn 365, kann man anhand des Leerzeichen trennen, falls davor immer einen Leerzeichen gibt:
=TEXTNACH(A1;" ";-1)
-1 verwendet den letzten Leerzeichen.

Per VBA geht es am besten mit RegEx:
Function RegExExtrakt(ByVal Target) As String

Dim R
If TypeOf Target Is Range Then Target = Target.Cells(1).Value
Set R = CreateObject("VBScript.RegExp")
R.Pattern = "\d+$" '\d+ für 1 oder mehrere Numeric, $ steht für "am Ende des Strings"
On Error Resume Next
RegExExtrakt = R.Execute(Target)(0)
End Function

Sub test()
Debug.Print RegExExtrakt("test123abc456") 'Erg sollte 456 sein
Debug.Print RegExExtrakt(Trim("hallo 25 12 ")) 'Erg: 12. Wegen möglichen Leerzeichen am Ende des Strings sollte man vorher trimmen.
End Sub


RegEx-Pattern lassen sich gut unter https://regex101.com ausprobieren/validieren. Ohne ist es natürlich .. skryptisch.

VG
Yal
Anzeige
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 22:16:22
Oppawinni
Ja, RegEx ist da sicher das Beste.
Man könnte sich natürlich für den Fall auch leicht was basteln:


Sub test()
Debug.Print myValFromRight("asd3fq3121")
Debug.Print myValFromRight("asd3fqq 20")
Debug.Print myValFromRight("1")
End Sub

Function myValFromRight(strIn As String) As Long

Dim i As Long
Dim strOut As String
For i = Len(strIn) To 1 Step -1
If InStr("0123456789", Mid(strIn, i, 1)) = 0 Then Exit For
Next
strOut = Right(strIn, Len(strIn) - i)
myValFromRight = IIf(strOut = "", 0, strOut)

End Function



Anzeige
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 17:53:59
JoWE
nur mal so,
wenn in den Zellen immer entweder ein einstelliger oder ein zweistelliger Zahlenwert am Ende der Zeichenfolge und vor diesem Wert immer ein Leerzeichen steht, dann sollte doch auch =RECHTS(C24;2)*1
funktionieren.
Jochen
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 18:04:01
Onur
Kennt 2003 Matrixfunktionen schon ?
{=MAX(WENN(ISTFEHLER(WERT(RECHTS($A$1;SPALTE($A:$E))));0;WERT(RECHTS($A$1;SPALTE($A:$E)))))}
AW: Val Funktion, aber von der rechten Seite eines Strings
09.03.2024 02:57:25
Eddie Felson
Ich habe gemerkt, ich hätte genauer Formulieren müssen.

Ich suche VBA Code, keine Zellformeln

Es ist immer eine Ein oder Zweistellige-Zahl (0-21)

Vor der Zahl steht gelegentlich ein Text. Wenn das der Fall ist steht zwischen Text und Zahl immer ein Leerzeichen.
Anzeige
AW: Val Funktion, aber von der rechten Seite eines Strings
09.03.2024 03:01:08
Onur
Dann reicht doch
Val(Right(Range("A1";2))
AW: Val Funktion, aber von der rechten Seite eines Strings
09.03.2024 10:43:59
JoWE
nicht ganz, aber so:
Val(Right(Range("A2"),2))
AW: Val Funktion, aber von der rechten Seite eines Strings
09.03.2024 22:34:17
Oppawinni
nee, da sieht man mal, wie einfach Aufgaben sein könnten, wenn sie genau genug beschrieben wären und auch verstanden würden.
Jetzt hat das Forum für den Bimbelkram, der keine Minute wert ist, bestimmt einen Mann*innentag verschwendet.
AW: Val Funktion, aber von der rechten Seite eines Strings
09.03.2024 22:46:28
Onur
Und trotzdem war es offensichtlich nicht mal ein "Danke" wert.
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 16:57:22
JoWE
oder so:
mid(Range("A2"),instrRev(Range("A2")," ")+1,99)

Jochen
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 17:50:56
daniel
für "abc 123" ja,
für "abc123"nein.
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 18:05:00
JoWE
stimmt für Deine Zeichenfolgen, es sollte aber doch am Ende des Strings immer ein Leerzeichen gefolgt von einem einstelligen oder einem zweistelligen numerischen Wert sein. Dann dürfte es doch passen, oder?
Falls ich von falschen Eingangsbedingungen ausging, nehme ich meine Beiträge zähneknirschend zurück ;=)
Anzeige
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 18:25:30
JoWE
es könnte jedoch auch so gehen
(auch wenn es mit oder ohne Leerzeichen vor den 1-stelligen oder 2-stelligen Werten am String-Ende geht):
------------------------------------
sdlkfjSDLKFJSDJDJF66 | 66 | =WENNFEHLER(RECHTS(A1;2)*1;RECHTS(A1;1)*1)
Sdklfjkdjadkgj2 | 2 | =WENNFEHLER(RECHTS(A2;2)*1;RECHTS(A2;1)*1)
aKSHshfsfhfh 5 | 5 | =WENNFEHLER(RECHTS(A3;2)*1;RECHTS(A3;1)*1)
ÖLFKölskfaLSFK 66 | 66 | =WENNFEHLER(RECHTS(A4;2)*1;RECHTS(A4;1)*1)
------------------------------------
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 19:13:12
daniel
wenn die Zahl immer sauber mit einem Leerzeichen getrennt ist, kann man das so machen.
Allerdings war ja auch nach der Emulation der VAL-Funktion von rechts gefragt.
Und VAL braucht das Leerzeichen nicht und wandelt auch "123abc" in 123.
Es ist immer die Frage, wie die Daten vorliegen. Wenns sauber getrennt ist, gehts einfach, wenn nicht dann nicht.
Anzeige
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 18:29:06
Onur
Meines Wissens nach kennt 2003 kein "WENNFEHLER".
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 19:11:28
JoWE
Ach sieh an, gab's denn ISTFEHLER ???
dann evtl. so:
=WENN(ISTFEHLER(RECHTS(A1;2)*1)=WAHR;RECHTS(A1;1)*1;RECHTS(A1;2)*1)
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 19:14:39
Onur
Ich habe extra gegoogelt und deswegen selber auch ISTFEHLER nehmen müssen.
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 19:16:24
JoWE
hatte ich auch versucht aber nix dazu gefunden...
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 17:23:15
Eddie Felson
Funktioniert, danke
Val(StrReverse(Val(StrReverse("abcd 200" geht nicht (owT)
08.03.2024 19:48:31
Oppawinni
von negativen Zahlen gar nicht zu reden
AW: Val Funktion, aber von der rechten Seite eines Strings
08.03.2024 22:41:38
Oppawinni
Geht mit Trick
strTest = "asihk111jldsa 200 "

x = Int(Val(StrReverse(Val(StrReverse(Trim(strTest) & "1")))) / 10)

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige