Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Optimieren von Funktionen möglich?

Forumthread: Optimieren von Funktionen möglich?

Optimieren von Funktionen möglich?
12.02.2017 09:58:57
Funktionen

Hallo,
beide Funktionen laufen, jedoch brauchen sie lange zum Ausführen, wenn die Tabelle sehr lang wird- z.B. 3000 Datensätze im Bereich von A-L.
Zeile Einfügen und Rest nach unten verschieben- fügt mir eine Leerzeile ein und
Zeile Löschen und Rest nach oben verschieben- löscht eben mal die aktive Zeile.
Gibt es für diese Funktionen auch schnellere Möglichkeiten?
  • Sub nachUnten()
    ' Zeile Einfügen und Rest nach unten verschieben, mit Erweiterung  _
    NR in SpalteA
    Dim lngLetzte As Long
    If Cells(ActiveCell.Row, 1).Value = "" Then Exit Sub
    Cells(ActiveCell.Row, 2).Resize(1, 13).Insert Shift:=xlDown, CopyOrigin:= _
    xlFormatFromLeftOrAbove
    lngLetzte = Cells(ActiveCell.Row, 1).End(xlDown).Row
    If lngLetzte = ActiveSheet.Rows.Count Then
    Cells(ActiveCell.Row + 1, 1) = Cells(ActiveCell.Row, 1) + 1
    ElseIf Application.WorksheetFunction.CountA(Cells(lngLetzte + 1, 2).Resize(1, 13)) = 0 Then
    Cells(lngLetzte + 1, 2).Resize(1, 13).Delete Shift:=xlUp
    Else
    Cells(lngLetzte + 1, 1) = Cells(lngLetzte, 1) + 1
    End If
    End Sub
    

    
    Sub nachOben()
    ' Zeile Löschen und Rest nach oben verschieben
    Application.ScreenUpdating = False
    Dim lngLetzte As Long
    Dim lngZeile As Long
    lngZeile = ActiveCell.Row
    lngLetzte = Cells(ActiveCell.Row, 1).End(xlDown).Row
    If Cells(ActiveCell.Row + 1, 1).Value = "" _
    Or Cells(ActiveCell.Row, 1).Value = "" Then
    Cells(ActiveCell.Row, 2).Resize(1, 13).ClearContents
    Else
    Cells(ActiveCell.Row, 2).Resize(1, 13).Delete Shift:=xlUp
    Cells(lngLetzte, 2).Resize(1, 13).Insert Shift:=xlDown
    Cells(lngLetzte - 1, 2).Resize(1, 13).Copy
    Cells(lngLetzte, 2).PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
    Cells(lngZeile, 3).Select
    End If
    Application.ScreenUpdating = True
    End Sub
    


  • Gruß Andi
    Anzeige

    2
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Optimieren von Funktionen möglich?
    12.02.2017 10:15:06
    Funktionen
    Hallo Andi,
    die meiste Zeit geht in der Regel durch die Neuberechnung aller Formeln verloren, deshalb solltest du die Formelberechnung zwischenzeitlich auf "manuell" umschalten:
    Sub nachUnten()
    ' Zeile Einfügen und Rest nach unten verschieben, mit Erweiterung  _
    _
    NR in SpalteA
    Dim lngLetzte As Long
    If Cells(ActiveCell.Row, 1).Value = "" Then Exit Sub
    With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    End With
    Cells(ActiveCell.Row, 2).Resize(1, 13).Insert Shift:=xlDown, CopyOrigin:= _
    xlFormatFromLeftOrAbove
    lngLetzte = Cells(ActiveCell.Row, 1).End(xlDown).Row
    If lngLetzte = ActiveSheet.Rows.Count Then
    Cells(ActiveCell.Row + 1, 1) = Cells(ActiveCell.Row, 1) + 1
    ElseIf Application.WorksheetFunction.CountA(Cells(lngLetzte + 1, 2).Resize(1, 13)) = 0 Then
    Cells(lngLetzte + 1, 2).Resize(1, 13).Delete Shift:=xlUp
    Else
    Cells(lngLetzte + 1, 1) = Cells(lngLetzte, 1) + 1
    End If
    With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
    End With
    End Sub
    Sub nachOben()
    ' Zeile Löschen und Rest nach oben verschieben
    Dim lngLetzte As Long
    Dim lngZeile As Long
    lngZeile = ActiveCell.Row
    lngLetzte = Cells(ActiveCell.Row, 1).End(xlDown).Row
    With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    End With
    If Cells(ActiveCell.Row + 1, 1).Value = "" _
    Or Cells(ActiveCell.Row, 1).Value = "" Then
    Cells(ActiveCell.Row, 2).Resize(1, 13).ClearContents
    Else
    Cells(ActiveCell.Row, 2).Resize(1, 13).Delete Shift:=xlUp
    Cells(lngLetzte, 2).Resize(1, 13).Insert Shift:=xlDown
    Cells(lngLetzte - 1, 2).Resize(1, 13).Copy
    Cells(lngLetzte, 2).PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
    Cells(lngZeile, 3).Select
    End If
    With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
    End With
    End Sub
    
    Viele Grüße
    Martin
    Anzeige
    AW: Optimieren von Funktionen möglich?
    12.02.2017 10:24:43
    Funktionen
    Danke Martin, läuft schon schneller. Super
    Gewisse Zeiten sollte man auch bei soviel Zeilen schon mal einplanen.
    Danke für das Ändern.
    Gruß Andi
    ;

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige