Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1500to1504
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

Wert in String ermitteln u. weiterzählen

Wert in String ermitteln u. weiterzählen
29.06.2016 11:35:43
Lukas
Hallo Leute,
in meinem Sub fehlen mir zwei entscheidende Zeilen um einen nummerischen Wert in einem String zu ermitteln, diesen +1 weiterzuzählen und den neuen Wert letztlich in ein anderes Tabellenblatt zu übertragen.
Mein Coding:
Private Sub REnrButton1_Click()
'Die letzte RE-Nr. aus TB3 Umsatz (Spalte C) soll gesucht und um +1 erhöht werden = neue RE-Nr.  _
in TB1 in Zelle "I13"
'orig. Format der RE-Nr.: "C 134/2016" -> es soll die Zahl vor dem Schrägstrich / ermittelt und  _
um +1 weitergezählt werden. Also neue RE-Nr.: "C 135/2016"
Dim strREnr As String
Dim strREnr2 As String
Dim r As Byte
With Sheets(3)
For r = 2 To Sheets(3).Cells(Rows.Count, 3).End(xlUp).Row       'Die Schleife durchläuft  _
die Zellen C2 bis C Ende (= Spalte RE-Nr.)
'die Var. "strREnr" soll die letzte RE-Nr. enthalten ? :(
Next r
'danach soll im "strREnr" die Zahl vor dem Schrägstrich / ermittelt und um +1 weitergezä _
hlt werden ? :(
strREnr2 = strREnr 'strREnr2 = neue RE-Nr.
Sheets(1).Range("I13").Value = strREnr2  'Übertrag der neuen RE-Nr. in TB1 Zelle "I13"
End With
End Sub
Bitte um Rat.
Gruß
Lukas

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: neue Zahl
29.06.2016 11:51:16
Fennek
Hallo,
wenn in A1 steht "C 135/2016"
dann ist die nächste Zahl, also 136

sub test()
Tx = cells(1,1)
Z = split(split(Tx, "/")(0), " ")(1) +1
msgbox Z
end sub
Den neuen String wieder zusammenszusetzen, überlasse ich dir.
mfg

AW: Wert in String ermitteln u. weiterzählen
29.06.2016 11:54:54
Nepumuk
Hallo,
fängt die Rechnungsnummer immer mit C Leezeichen Nummer an? Ist die letzte Rechnungsnummer der letzte Eintrag in Spalte C der Tabelle 3 oder kann die auch zwischendrin stecken?
Gruß
Nepumuk

AW: Wert in String ermitteln u. weiterzählen
29.06.2016 12:38:19
Lukas
Hallo Nepomuk,
ja, die RE-Nr. fängt immer mit C Leerzeichen an.
Nein. Die RE-Nr. in Spalte C kann auch dazwischen stecken.
Gruß
Lukas

Anzeige
AW: Wert in String ermitteln u. weiterzählen
29.06.2016 13:33:36
Nepumuk
Hallo,
teste mal:
Option Explicit

Private Sub REnrButton1_Click()
    Dim lngRow As Long, lngBillNumber As Long
    With Worksheets(3)
        For lngRow = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
            lngBillNumber = Application.Max(lngBillNumber, fncExtractNumbers(.Cells(lngRow, 3)))
        Next
    End With
    Worksheets(1).Cells(13, 9).Value = "C " & CStr(lngBillNumber + 1) & "/" & Year(Date)
End Sub

Private Function fncExtractNumbers(ByRef probjCell As Range) As Long
    Dim objRegEx As Object, objMatch As Object
    Set objRegEx = CreateObject("VBScript.RegExp")
    With objRegEx
        .Global = True
        .Pattern = "C (\d+)\/\d+"
        Set objMatch = .Execute(probjCell.Text)
    End With
    fncExtractNumbers = Clng(objMatch.Item(0).SubMatches.Item(0))
    Set objMatch = Nothing
    Set objRegEx = Nothing
End Function

Gruß
Nepumuk

Anzeige
AW: Wert in String ermitteln u. weiterzählen
29.06.2016 14:13:08
Lukas
Hallo Nepomuk,
es funktioniert p-e-r-f-e-k-t! Danke!!!
Könntest du mir die Private Function kurz kommentieren.
Ich blicke da nur zu 50% durch und möchte in jedem Fall einen Lerneffekt haben.
Viele Grüße
Lukas

AW: Wert in String ermitteln u. weiterzählen
29.06.2016 15:04:24
Nepumuk
Hallo,
genügt dir das so? Wenn nicht dann bitte genauer beschreiben was du wissen willst.
Option Explicit

Private Function fncExtractNumbers(ByRef probjCell As Range) As Long
    Dim objRegEx As Object, objMatch As Object
    'Regular Expression-Objekt erstellen
    Set objRegEx = CreateObject("VBScript.RegExp")
    With objRegEx
        'Suche auch nach der ersten Fundstelle weiter
        .Global = True
        'Suchbegriff C gefolgt von einem Leerzeichen gefolgt von mindestens einer Ziffer
        'gefolgt von einem / gefolgt von mindestens einer Ziffer
        .Pattern = "C (\d+)\/\d+"
        'Matchobjekt erstellen
        Set objMatch = .Execute(probjCell.Text)
    End With
    'Zahl aus dem Subpattern holen
    fncExtractNumbers = Clng(objMatch.Item(0).SubMatches.Item(0))
    'Objekte freigeben
    Set objMatch = Nothing
    Set objRegEx = Nothing
End Function


Gruß
Nepumuk

Anzeige
AW: Wert in String ermitteln u. weiterzählen
29.06.2016 15:09:04
Lukas
Dieser Teil (jede Zeile) ist mir nicht ganz klar:
Private Function fncExtractNumbers(ByRef probjCell As Range) As Long
Dim objRegEx As Object, objMatch As Object
'Regular Expression-Objekt erstellen
Set objRegEx = CreateObject("VBScript.RegExp")
End Function

AW: Wert in String ermitteln u. weiterzählen
29.06.2016 15:53:52
Nepumuk
Hallo,
in Windows gibt es eine DLL mit dem Namen vbscript.dll und in dieser DLL gibt es eine Klasse RegExp. Über CreateObject wird ein Vereis auf diese Klasse erstellt um sie dann in VBA zu benutzen.
Gruß
Nepumuk

AW: Wert in String ermitteln u. weiterzählen
30.06.2016 08:33:35
Lukas
Hallo Nepumuk,
ich habe noch zwei Fragen:
1.
Wenn eine Leerzeile zw. den Rechnungsnummern ist (Spalte 3) erhalte ich einen Laufzeitfehler.
Wie kann ich die Funktion erweitern, sodass Leerzeilen ignoriert werden?
Quasi: Schleife durchläuft alle Zeilen in Spalte 3 und ermittelt den höchsten Wert, unabhängig von Leerzeilen.
2.
Ist es möglich, nur den Wert vor dem Schrägstrich bis zum Leerzeichen auszulesen und zu erhöhen? Also ohne ".Pattern = "C ..." - Quasi: ignoriere das restl. Format der RE-Nr.
Es kann durchaus sein, dass sich der Buchstabe vor der RE-Nr. (zB: A 114/2016 od. RE 114/2016) ändert. Dann würde die Function einen Laufzeitfehler zurückgeben.
Gruß
Lukas

Anzeige
AW: Wert in String ermitteln u. weiterzählen
30.06.2016 14:25:49
Nepumuk
Hallo Lukas,
teste mal:
Option Explicit

Private Sub REnrButton1_Click()
    Dim lngRow As Long, lngBillNumber As Long, lngMaxBillNumber As Long
    Dim objRegEx As Object, objMatch As Object
    Set objRegEx = CreateObject("VBScript.RegExp")
    objRegEx.Pattern = "\w+ (\d+)\/\d+"
    With Worksheets(3)
        For lngRow = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
            Set objMatch = objRegEx.Execute(.Cells(lngRow, 3).Text)
            If objMatch.Count > 0 Then
                lngBillNumber = Clng(objMatch.Item(0).SubMatches.Item(0))
                If lngBillNumber > lngMaxBillNumber Then lngMaxBillNumber = lngBillNumber
            End If
        Next
    End With
    Worksheets(1).Cells(13, 9).Value = "C " & CStr(lngMaxBillNumber + 1) & "/" & Year(Date)
    Set objMatch = Nothing
    Set objRegEx = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: Wert in String ermitteln u. weiterzählen
30.06.2016 14:46:59
Lukas
Hallo,
1. Leerzeilen werden jetzt berücksichtigt. Super!
2. Das "C" müsste aus der Zelle dynamisch ausgelesen werden weil das RE-Format, sprich der Buchstabe vor der Zahl, variiert. ZB: "A 114/2016" oder "RE 114/2016"
Habe ich das richtig verstanden, dass du die "Private Function" von gestern jetzt in direkt in den Sub übernommen hast. Sprich, ich kann diese auskommentieren?
Gruß
Lukas

AW: Wert in String ermitteln u. weiterzählen
30.06.2016 15:23:14
Nepumuk
Hallo Lukas,
die Funktion kannst du löschen.
Option Explicit

Private Sub REnrButton1_Click()
    Dim lngRow As Long, lngBillNumber As Long, lngMaxBillNumber As Long
    Dim objRegEx As Object, objMatch As Object, objMaxMatch As Object
    Set objRegEx = CreateObject("VBScript.RegExp")
    objRegEx.Pattern = "(\w+) (\d+)\/\d+"
    With Worksheets(3)
        For lngRow = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
            Set objMatch = objRegEx.Execute(.Cells(lngRow, 3).Text)
            If objMatch.Count > 0 Then
                lngBillNumber = Clng(objMatch.Item(0).SubMatches.Item(1))
                If lngBillNumber > lngMaxBillNumber Then
                    lngMaxBillNumber = lngBillNumber
                    Set objMaxMatch = objMatch
                End If
            End If
        Next
    End With
    Worksheets(1).Cells(13, 9).Value = objMaxMatch.Item(0).SubMatches(0) & _
        " " & CStr(lngMaxBillNumber + 1) & "/" & Year(Date)
    Set objMaxMatch = Nothing
    Set objMatch = Nothing
    Set objRegEx = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: Wert in String ermitteln u. weiterzählen
01.07.2016 08:57:45
Lukas
Hi Nepumuk,
was soll ich sagen/schreiben außer, es funkt PERFEKT!
D-A-N-K-E!!!!! Echt nett von dir, dass du dich der Sache angenommen hast!!!
Zur Info: Ich mache das für eine gemeinnützige Non-Profit Organisation und bin stets froh wenn ich VBA seitig ein bisschen dazulerne.
Thread kann geschlossen werden ;)
Viele Grüße
Lukas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige