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

VBA Code optimieren

VBA Code optimieren
05.04.2018 20:21:56
Florian
Hallo,
und zwar hab ich ein Sub() geschrieben welches mir meine Daten nach einer Auftragsnummer durchsucht und dann dies in ein eigenes Tabellenblatt kopiert.
das Sub() funktioniert ohne probleme nur braucht es enorm viel rechenzeit je mehr daten durchsucht werden.
jetzt meine frage, kann man den Code iwie optimieren damit der Vorgang schneller wird?

Public Sub kopieren()
Worksheets("AuftragsNr_filtern").Range("A26:H1000").ClearContents
Dim x As Long
Dim y As Long
y = 26
Dim lastRow As Long
Dim a As Long
a = Sheets("AuftragsNr_filtern").Range("C3").Value
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For x = 1 To lastRow
If Cells(x, 1) = a Then
Rows(x).Copy Destination:=Tabelle2.Rows(y)
y = y + 1
Else
End If
Next x
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code optimieren
05.04.2018 21:09:01
Martin
Hallo Florian,
probiere mal, ob es so schneller klappt:
Public Sub Kopieren()
Dim x As Long
Dim y As Long
Dim lastRow As Long
Dim a As Long
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
Worksheets("AuftragsNr_filtern").Range("A26:H1000").ClearContents
y = 26
a = Sheets("AuftragsNr_filtern").Range("C3").Value
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For x = 1 To lastRow
If Cells(x, 1) = a Then
Rows(x).Copy Destination:=Tabelle2.Rows(y)
y = y + 1
End If
Next x
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
Viele Grüße
Martin
Anzeige
AW: VBA Code optimieren
05.04.2018 21:11:22
Werner
Hallo Florian,
warum filterst du nicht einfach deine Liste nach dem Wert in Variable a und kopierst das Filterergebnis in einem Rutsch?
Gruß Werner
AW: Code vereinfachen
05.04.2018 22:26:20
Gerd
Moin Florian!
Public Sub kopieren()
With Worksheets("AuftragsNr_filtern")
.Range("A26:H1000").ClearContents
If WorksheetFunction.CountA(Columns(1), .Cells(3, 3).Value) > 0 Then
Columns(1).AutoFilter 1, .Cells(3, 3).Value
AutoFilter.Range.Offset(1).EntireRow.Copy .Cells(26, 1)
Columns(1).AutoFilter
End If
End With
End Sub

Gruß Gerd
AW: VBA Code optimieren
06.04.2018 07:55:53
Daniel
Hi
Programmierer folgenden Ablauf:
1. Tabelle nach Spalte A sortieren
2. mit .Find nach der ersten Fundstelle suchen (Searchdirection:=xlnext)
3. mit .Finde nach der letzten Fundstelle suchen (Searchdirection:=xlprevious)
4. diese und alle dazwischenliegenden Zeilen als Block kopieren.
Gruß Daniel
Anzeige
noch einer
06.04.2018 09:38:22
Rudi
Hallo,
erst sammeln, dann kopieren
Public Sub kopieren()
Dim x As Long
Dim lastRow As Long
Dim a As Long
Dim rngC As Range
Application.ScreenUpdating = False
Worksheets("AuftragsNr_filtern").Range("A26:H1000").ClearContents
a = Sheets("AuftragsNr_filtern").Range("C3").Value
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For x = 1 To lastRow
If Cells(x, 1) = a Then
If rngC Is Nothing Then
Set rngC = Cells(x, 1)
Else
Set rngC = Union(rngC, Cells(x, 1))
End If
End If
Next x
If Not rngC Is Nothing Then
rngC.EntireRow.Copy Tabelle2.Cells(26, 1)
End If
End Sub

Gruß
Rudi
Anzeige
AW: VBA Code optimieren
06.04.2018 16:40:46
snb

Sub M_snb()
With Sheets(1)
.Range("A1:A2").Copy .Cells(1, 200)
.Cells(2, 200) = "suchwert"
.Columns(1).AdvancedFilter 2, .Cells(1, 200).CurrentRegion, Sheets(2).Cells(26, 1)
End With
End Sub

Fragen und Lösung, wie ichs bisher verstehe
06.04.2018 16:45:49
Zwenn
Hallo Florian,
  • Gehe ich Recht in der Annahme, dass Sheets("AuftragsNr_filtern") die gleiche Tabelle ist, in die Du weiter unten unter der Bezeichnung Tabelle2 reinkopierst?

  • Dein Makro sucht in der Tabelle, aus der es gestartet wird. Damit hältst Du es flexiebel. Soll das so sein oder gibt es eine feste Tabelle, in der gesucht werden soll? Dann könntest Du das Makro z.B. vom Tabellenblatt AuftragsNr_filtern mit einem Button starten

  • Kann der gesuchte Wert nur ein einziges Mal vorkommen oder kann er auch öfter vorliegen?

  • Falls er nur einmal vorkommen kann, füge vor End If noch Exit For ein. Damit wird die Schleife sofort verlassen, wenn der Wert gefunden und die entsprechende Zeile kopiert wurde.
    Das ist dann noch immer keine optimale Lösung. Es läuft aber schon wesentlich schneller durch, sofern es nur ein Wert ist, der pro Makrostart gefunden werden soll. Allerdings nur, solange er sich möglichst weit vorne befindet.
    Für den Fall sieht Dein Makro mit etwas sortiertem Code dann so aus:
    (Das Else kannst Du weglassen, wenn Du keinen alternativen Code ausführen willst. Variablendeklarationen solltest Du der Übersichtlichkeit immer alle zusammen ganz nach oben schreiben, darunter dann die ersten notwendigen Initialisierungen und dann der restliche Code.)
    
    Dim x As Long
    Dim y As Long
    Dim lastRow As Long
    Dim a As Long
    y = 26
    a = Sheets("AuftragsNr_filtern").Range("C3").Value
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("AuftragsNr_filtern").Range("A26:H1000").ClearContents
    For x = 1 To lastRow
    If Cells(x, 1) = a Then
    Rows(x).Copy Destination:=Tabelle2.Rows(y)
    y = y + 1
    Exit For
    End If
    Next x
    End Sub
    
    Die bessere Lösung ist der Ansatz mit dem Autofilter, wie von Werner vorgeschlagen. Damit werden alle gefilterten Zeilen kopiert. Egal ob eine oder mehrere:
    
    Public Sub kopieren()
    Dim y As Long
    Dim a As Long
    y = 26
    a = Sheets("AuftragsNr_filtern").Range("C3").Value
    Worksheets("AuftragsNr_filtern").Range("A26:H1000").ClearContents
    If WorksheetFunction.CountA(Columns(1), a) > 0 Then
    ActiveSheet.Columns(1).AutoFilter 1, a
    ActiveSheet.AutoFilter.Range.Offset(1).EntireRow.Copy Sheets("AuftragsNr_filtern"). _
    Cells(y, 1)
    ActiveSheet.Columns(1).AutoFilter
    End If
    End Sub
    
    Viele Grüße,
    Zwenn
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige