[Excel] Script optimieren

Königstein93

Lt. Commander
Registriert
Juni 2009
Beiträge
1.177
Guten Morgen allerseits,
ich habe folgende Excel-Tabelle erstellt und mittels der Makro-Aufzeichnungen ein "gutes" VBA-Programm hinbekommen…
So sieht ungefähr die Tabelle "Sample" aus:
ABCDEFGHIFilter (J)
NameDatumKWxxxxxxJa
NameDatumKWxxxxxNein
NameDatumKWxxxxxNein
NameDatumKWxxxxNein
NameDatumKWxxxxNein

Ich habe hierbei zwei Buttons erstellt, womit bei einem die Filter ein und ausgeblendet werden und der zweite ist eine Art "Bereinigen", d.h. es sollen alle Zeilen, wo in J "Ja"steht (wird erst erfüllt, wenn ein x in "H"und "I"sich befindet) gefiltert werden und gleichzeitig erst nach "J" und dann nach "A"sortiert werden.

Der Code hierfür ist dieser:
Code:
Sub Verschwinden()
'
' Verschwinden Makro
'
' Tastenkombination: Strg+ö
'
    Columns("A:J").Select
    ActiveWorkbook.Worksheets("Sample").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sample").Sort.SortFields.Add2 Key:=Range( _
        "J2:J784"), SortOn;=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
ActiveWorkbook.Worksheets("Sample").Sorr.SortFields.Add2 Key:=Range( _
        "A2:A784"), SortOn;=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Sample").Sort
        .SetRange Range("A2:J784")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        ActiveSheet.Range("$J$1:$J$97").AutoFilter Field:=1, Criteria1:="Nein"
    End With
    ActiveSheet.AutoFilter.ApplyFilter
End Sub
Sub Sichtbar()
'
' Sichtbar Makro
'
'Tastenkombination: Strg+q
'
    ActiveSheet.Range("$J$1:$J$97").AutoFilter Field:=1
End Sub

Meine Frage hierbei: Wie kann man das ganze optimieren (Kenne mich nicht so mit VBA aus), sodass er die kompletten Spalten (wo überall was drin steht oder stehen wird) benutzt und nicht bei "Buchstabe97" aufhört! Wichtig dabei ist, dass die erste Zeile nicht beachtet wird (Kopfzeile)
 
Klar, man kann da mehr "optimieren", aber wenn das dein einziges Problem ist, warum änderst du die 97 nicht auf eine höhere Zahl (wie du es auch an anderer Stelle bereits machst:
.SetRange Range("A2:J784")

Ermittlung der letzten Zeile (besser):
https://www.excel-inside.de/vba-loe...zte-spalte-und-letzte-zelle-per-vba-ermitteln

Idealerweise kannst du auch die Tabelle in Excel als "Tabelle" definieren. Dann kannst du diese direkt ansprechen und der Verweis ändert sich dynamisch mit.
 
Hi,
schau dir doch diese Beispiel Code an:
Code:
Sub LetzteZeileSpalte()
Dim lngLastZeile As Long
Dim lngLastSpalte As Long
Dim intSpalte As Integer
Dim intZeile As Integer

    intSpalte = 1
    intZeile = 1
    lngLastZeile = Cells(Rows.Count, intZeile).End(xlUp).Row
    lngLastSpalte = Cells(intSpalte, Columns.Count).End(xlToLeft).Column
    
    ActiveSheet.Range(Cells(lngLastZeile, intZeile), Cells(intSpalte, lngLastSpalte)).Select
    
End Sub
Es ermittelt die letzte Zeile und Spalte, das könntest du wie schon gh0st2k geschrieben hatte für deinen Code benutzen und die Range ergänzen.
 
Zurück
Oben