Meine Sequenz wird so etwas wie 0000-16x, 0001-16x, 0002-16x, … ,9999-16x sein Ich möchte ein Makro schreiben, das einen der Werte liest und um eins erhöht. z.B. Wenn 0014-16x angezeigt wird, gibt der Code 0015-16x zurück.

Mein Code funktioniert nur, wenn der Inhalt der Zelle alle Zahlen sind

Dim name As Variant
name = ActiveCell
name = name + 1
ActiveCell.Offset(1, 0).Activate
ActiveCell.FormulaR1C1 = name

Wie kann ich eine Sequenz wie die, die ich habe, inkrementieren? Vielen Dank

2
S.camp 18 Jän. 2019 im 01:26

4 Antworten

Beste Antwort

Ohne Fehlerprüfung:

Function NextSequence(v)
    Dim arr
    arr = Split(v, "-")
    NextSequence = Format(CLng(arr(0)) + 1, "0000") & "-" & arr(1)
End Function
3
Tim Williams 17 Jän. 2019 im 22:37

Teilen wir die Zeichenfolge durch das Trennzeichen "-", erhöhen die Zahl um 1, fügen Nullen hinzu und reformieren unsere Zeichenfolge - probieren Sie dies aus:

Sub Increment()

    Dim name As Variant
    Dim firsthalf As String, secondhalf As String

    name = Split(ActiveCell, "-")(0)
    secondhalf = Split(ActiveCell, "-")(1)
    name = name + 1

    Select Case Len(name)
        Case 1
            firsthalf = "000" & name
        Case 2
            firsthalf = "00" & name
        Case 3
            firsthalf = "0" & name
        Case 4
            firsthalf = name
    End Select

    ActiveCell.Offset(1, 0).Activate
    ActiveCell.FormulaR1C1 = firsthalf & "-" & secondhalf

End Sub
1
dwirony 17 Jän. 2019 im 22:33

Ich kann dies derzeit nicht testen, da ich von meinem Telefon aus poste, aber Sie können die Funktion Split() mit einem - Trennzeichen verwenden und 1 zur Position (0) hinzufügen Fügen Sie das Array wieder zusammen und füllen Sie es mit Nullen auf, bis seine Länge 8 beträgt.

Beispiel:

Dim name() As Variant
Dim jName as String
name = Split(ActiveCell,"-")
name(0) = name(0) + 1
jName = Join(name,"-")
Do Until Len(jName) = 8
    jName = "0" & jName
Loop
ActiveCell.Offset(1, 0).Activate
ActiveCell.FormulaR1C1 = jName
1
Tate Garringer 17 Jän. 2019 im 22:45

Hier ist eine Nicht-VBA-Lösung, FWIW ...

=TEXT(LEFT(A1,FIND("-",A1)-1)+1,"0000")&"-"&MID(A1,FIND("-",A1)+1,99)

Mit 0000-16x in Zelle A1 und der Formel in Zelle A2. Zum Ausfahren einfach ausfüllen.

0
MBB70 17 Jän. 2019 im 22:53