Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
416to420
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
416to420
416to420
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zählfunktion in VBA ???

Zählfunktion in VBA ???
21.04.2004 09:06:08
Ben
Hallo Leute,
ich brauche eine Zähl-Funktion, die mir für die folgenden Argumente die folgenden Werte liefert:
Für "abc" gibt die Funktion einen Leerstring
Für "ab1" gibt die Funktion "ab2"
Für "a12" gibt die Funktion "a13"
Für "123" gibt die Funktion "124"
Für einen Leerstring gibt die Funktion einen Leerstring
Die Funktion zählt also die numerischen Anteile des Arguments nach oben. Gibt es keine numerischen Anteile (z. B. bei "dfg" oder beim Leerstring als Argument), wird ein Leerstring zurückgegeben.
So, und wie programmiere ich jetzt diese Funktion in VBA?
Ich habe folgenden Versuch gemacht:


Function zaehlen(argument)
' Prüft, ob das Argument ein Leerstring ist:
If VarType(argument) > 1 Then
' Prüft, ob das Argument nur aus Zahlen besteht:
If VarType(argument + 1) = 10 Then
' Prüft, ob die letzten beiden Stellen des Arguments Zahlen sind:
If VarType(Right(argument, 2) + 1) = 10 Then
' Prüft, ob die letzte Stelle des Arguments eine Zahl ist:
If VarType(Right(argument, 1) + 1) = 10 Then
' Falls nein, wird ein Leerstring zurückgegeben:
zaehlen = ""
Else
' Falls nur die letzte Stelle des Arguments eine Zahl ist, _
wird diese hochgezählt:
zaehlen = Right(argument, 1) + 1
End If
Else
' Falls nur die letzten beiden Stellen des Arguments Zahlen sind, _
werden diese hochgezählt:
zaehlen = Right(argument, 2) + 1
End If
Else
' Falls alle drei Stellen des Arguments Zahlen sind, werden diese hochgezählt:
zaehlen = argument + 1
End If
Else
' Falls das Argument ein Leerstring ist, wird ein Leerstring zurückgegeben:
zaehlen = ""
End Function


Wenn ich nun diese Funktion ausprobiere, bekomme ich eine Fehlermeldung. Also funkioniert sie nicht.
Aber wie kann ich die gewünschte Zählfunktion dann programmieren?
Für Hinweise hierzu wäre ich Euch sehr dankbar!
Viele Grüße, Ben.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zählfunktion in VBA ???
21.04.2004 09:56:53
Harald Kapp
Hallo Ben,
so:

Function test(x As Variant) As Long
Dim a, b As Long
Dim tmp As String
If Len(x) <> 0 Then
tmp = x
'Suche Anfang der Zahl
a = 1
Do While a <= Len(x)
Select Case Left(tmp, 1)
Case 0 To 9
Exit Do ' erste Ziffer gefunden
Case Else
a = a + 1
tmp = Right(tmp, Len(tmp) - 1)
End Select
Loop
'Suche Ende der zahl
b = a + 1
Do While b <= Len(x)
Select Case Left(tmp, 1)
Case 0 To 9
b = b + 1
tmp = Right(tmp, Len(tmp) - 1)
Case Else
Exit Do ' erste Nicht-Ziffer gefunden
End Select
Loop
tmp = Mid(x, a, b - a)
If tmp <> "" Then
test = CLng(tmp) + 1
Else
test = 0
End If
End If
End Function

Gruß Harald
Anzeige
AW: Zählfunktion in VBA ???
21.04.2004 09:58:07
Uwe
Hallo, Ben!
Mein Lösungsvorschlag sieht so aus:
Function zaehlen(ByVal argument As String) As String
Dim lenS As Integer, pos As Integer, returnS As String
' Prüft, ob das Argument ein Leerstring ist oder keine Numerischen Ziffern am Ende aufweist:
If Len(argument) = 0 Or IsNumeric(Right(argument, 1)) = False Then
returnS = ""
Else
If IsNumeric(argument) Then
returnS = Str(Val(argument) + 1)
Else
' Falls nur die letzte Stelle(n) des Arguments (eine) Zahl(en) ist(sind), wird diese hochgezählt:
lenS = Len(argument)
pos = lenS - 1
While IsNumeric(Mid(argument, pos, 1))
pos = pos - 1
Wend
returnS = Left(argument, pos) + Str(Val(Right(argument, lenS - pos)) + 1)
End If
End If
zaehlen = returnS
End Function

Hierbei bitte ich zu beachten, dass dieser Vorschlag nicht ausgetestet ist und möglicherweise vielleicht wesentlich vereinfacht werden kann. Allein mir fehlt momentan die Testmöglichkeit.
Gruß!
Anzeige
AW: Ersetze bitte (2x): Str( durch CStr( ....
21.04.2004 10:24:18
Uwe
.
AW: Zählfunktion in VBA ???
21.04.2004 10:15:10
Matthias G
Hallo Ben,
ich hab' auch noch was:

Function Zählen(a As String) As String
Dim a0 As String, b As String
Dim i As Integer, j As Integer, z As String
For i = 1 To Len(a)
If IsNumeric(Mid(a, i, 1)) Then Exit For
Next i
a0 = Left(a, i - 1)
If i > Len(a) Then Exit 

Function 'Leerstring
For j = i To Len(a)
If Not IsNumeric(Mid(a, j, 1)) Then Exit For
Next j
z = CStr(Val(Mid(a, i, j - i) + 1))
Zählen = a0 & z & Mid(a, j)
End Function

Gruß, Matthias
AW: Zählfunktion in VBA ???
21.04.2004 10:35:37
Ben
Hallo Harald, Uwe & Matthias,
herzlichen Dank für Euren VBA-Code! Der ist sehr lehrreich für mich.
Für Euch weiterhin alles Gute!
Viele Grüße, Ben.
Anzeige
AW: Danke für die Rückmeldung! - o.T.
21.04.2004 10:50:06
Matthias G
:-)

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige