Clever-Excel-Forum

Normale Version: vba nummerierung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Moin zusammen, ich bastel einen einem Code, der Folgendes können soll.

Ich wähle eine Zeile aus von Hand, dann soll mittels Makro eine neue Zeile darunter eingefügt werden und der Wert um die letzte Kommastelle um einen erhöht werden.

Bei den Zahlenreihen handelt es sich z. B. um 1.1, 1.1.1, 1.1.2, 1.1.2.1, 1.1.2.2, 1.2, 1.21, 1.22, 1.2.2.1, 1.2.2.2 usw.
Wenn ich also die Zeile mit dem Wert 1.1.2.2 auswähle muss wer Wert der hinzugefügten Zeile 1.1.2.3 sein.
Es soll immer die letzte Zahl um einen erhöht werden.

Was habe ich hinbekommen:
Das Zeileneinfügen funktioniert. Dann dachte ich mir ich kopiere den Wert der vorherigen Spalte um ihn dann entsprechend zu erhöhen, aber das ist wohl eher der falsche Ansatz und ich habe es nicht hinbekommen.

    Selection.EntireRow.Select
    Dim MyRange As Object
    Set MyRange = Selection
    Selection.EntireRow.Select
    Selection.Insert
    MyRange.Select
    ActiveCell.Offset(-2, 0).Select   
    ActiveCell.Copy
    ActiveCell.Offset(1, 0).Select
    ActiveCell.PasteSpecial Paste:=xlValues

Wie sollte ich vorgehen?

MfG
Björn
Hallöchen,

bist Du Dir sicher, dass das Zeileneinfügen wie gewünscht funktioniert?
Ich habe den Eindruck, dass die Zeile oberhalb eingefügt wird und nicht unterhalb.
Hallo

man kann auf viele Select verzichten, das vereinfacht die Sache.  Kompliziert und schwierig wird es aber, wenn man dem makro erklären muss  wie oft er ".1" anfügen muss, und ab wann  die letzte Stelle aufgezählt werden muss.  Da blicke ich auch noch nicht durch. 
Wenn du den Code aber verstanden hast kannst du das evtl. noch selbst anpassen.  Test bitte erst mal ob das Ergebnis okay ist.

mfg Gast 123

Code:
Sub Zeile_einfügen()
Dim n As Integer, az As Long  'az=aktive Zeile
Dim MyRange As Range, Txt As String
    az = Selection.Row
    Set MyRange = Selection
    Selection.EntireRow.Insert
    Cells(az - 1, 1).Copy Cells(az, 1)
    If InStr(Cells(az, 1), ".") Then
       n = Mid(Cells(az, 1), InStrRev(Cells(az, 1), ".") + 1)
       Txt = Left(Cells(az, 1), InStrRev(Cells(az, 1), "."))
       Cells(az, 1) = "'" & Txt & n + 1
    Else
       Cells(az, 1) = "'" & Cells(az, 1) & ".1"
    End If
    MyRange.Select
End Sub
Hallo,

Code:
Sub bbb()
  Dim varA As Variant, varN As Variant
  With ActiveCell
    varA = Split(.Value, ".")
    varN = varA(UBound(varA))
    If IsNumeric(varN) Then varN = varN + 1
    If UBound(varA) Then
      ReDim Preserve varA(UBound(varA) - 1)
      varN = Join(varA, ".") & "." & varN
    End If
    .Offset(1).EntireRow.Insert
    .Offset(1).Value = varN
    .Offset(1).Activate
  End With
End Sub

Gruß Uwe
@ schauan,
    Du hast recht.

@Gast123,
   die Zeile wird richtig eingefügt und die Nummer der vorherigen Zelle kopiert, aber nicht erhöht. Danke für den Versuch. Der Uwe hat die Lösung.

@Uwe,
   danke für die Lösung. Sie funktioniert!
   Leider habe ich nicht den ganzen Code verstanden und wollte fragen, ob Du so nett wärst, neben jede CodeZeile einen Einzeiler zur Erklärung hinzuzufügen?
   Danke!