Nicht markierten Teil einer Tabelle löschen (VBA)

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox


Excel-Version: 8.0 (Office 97)
nach unten

Betrifft: Nicht markierten Teil einer Tabelle löschen (VBA)
von: Martin Beck
Geschrieben am: 23.05.2002 - 12:17:28

Hallo,

ich möchte gerne per VBA alle Zellen in einem Tabellenblatt, die nicht markiert sind, löschen. Ich benötige also einen Range, der das Komplement zu Selection darstellt. Bisheriger Ansatz:


Sub Test()
s = ActiveSheet.UsedRange.Columns.Count
z = ActiveSheet.UsedRange.Rows.Count

For i = z To Step -1
    If Application.Intersect(Selection, Rows(i)) Is Nothing Then
        Rows(i).Delete
    End If
Next i

For j = s To Step -1
    If Application.Intersect(Selection, Columns(j)) Is Nothing Then
        Columns(j).Delete
    End If
Next j
End Sub

Geht das auch einfacher, insb. ohne die beiden Schleifen? Ich dachte an so etwas wie

Not Application.Intersect(Selection, Cells)

Bin für jeden Hinweis dankbar.

Gruß
Martin Beck

nach oben   nach unten

Re: Nicht markierten Teil einer Tabelle löschen (VBA)
von: Udo RiHü
Geschrieben am: 23.05.2002 - 18:58:42

Hallo,
wie wär's damit?
Sub loeschen()
Dim C, C1, R, R1

C = Selection.Column
C1 = Selection.Columns.Count
R = Selection.Row
R1 = Selection.Rows.Count

'Wrng = MsgBox("Alle unmarkierten Zellen werden unwiederruflich gelöscht!", 273)
'If Wrng <> vbOK Then Exit Sub

If C > 1 Then
Range(Cells(1, 1), Cells(1, C - 1)).EntireColumn.Delete
End If
If R > 1 Then
Range(Cells(1, 1), Cells(R - 1, 1)).EntireRow.Delete
End If
Range(Cells(1, C1 + 1), Cells(1, 256)).EntireColumn.Delete
Range(Cells(R1 + 1, 1), Cells(65536, 1)).EntireRow.Delete

Range(Cells(1, 1), Cells(R1, C1)).Select
End Sub


nach oben   nach unten

Guter Vorschlag, aber ...
von: Martin Beck
Geschrieben am: 24.05.2002 - 09:20:58

Hallo Udo,

erstmal Danke für die Antwort. Über die Ecken des selektierten Bereichs zu gehen war auch mein erster Ansatz. Das (und damit auch Dein Makro) funktioniert allerdings nur dann korrekt, wenn es sich bei dem markierten Bereich um eine Matrix (Einfachselektion) handelt. Bei Mehrfachmarkierungen gibt es Probleme, die ich mit meinem Schleifenansatz überwunden habe.

Was mich aber eigentlich interessiert ist die Frage, ob man den nichtselektierten Bereich des UsedRange direkt als Range-Objekt ansprechen kann. Nach meinen bisherigen Überlegungen vermute ich mal, daß dies nicht geht. Ich würde mich aber gerne eines besseren belehren lassen. Vielleicht geht was über Union, Intersect, Areas???

Gruß
Martin Beck


 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Nicht markierten Teil einer Tabelle löschen (VBA)"