Attribute VB_Name = "Modul1" 'entwickelt von Winfried Radner 'e-mail: Wolf.W.Radzinski@onlinehome.de 'Benutzung frei - ohne Gewähr Sub invert_select() On Error Resume Next Dim oldr As String Dim leftoldr As String Dim rightoldr As String Dim newr As String Dim kpos As Integer oldr = Selection.Address rightoldr = oldr newr = "" kpos = 0 Do While Len(rightoldr) > 0 kpos = InStr(1, rightoldr, ",") If kpos < 1 Then leftoldr = rightoldr rightoldr = "" Else leftoldr = Left(rightoldr, kpos - 1) rightoldr = Right(rightoldr, Len(rightoldr) - kpos) End If If newr = "" Then newr = invers_selection(Range(leftoldr)) Else On Error GoTo err_bereich 'Fehler tritt auf, wenn intersect leer ist newr = Intersect(Range(newr), Range(invers_selection(Range(leftoldr)))).Address weiter: End If Loop If newr <> "" Then Range(newr).Select Else 'wenn keine Selection vorhanden, 'dann wird Activecell selektiert! ActiveCell.Select End If Exit Sub err_bereich: newr = "" Resume weiter End Sub Private Function invers_selection(act_select As Range) As String On Error Resume Next Dim part1 As Range Dim part2 As Range Dim part3 As Range Dim part4 As Range Dim p As Integer p = 0 If act_select.Row > 1 Then Set part1 = Rows("1:" & act_select.Row - 1) p = 1 End If If act_select.Row + act_select.Rows.Count - 1 < 65536 Then Set part2 = Rows(act_select.Row + act_select.Rows.Count & ":65536") p = p + 2 End If If act_select.Column > 1 Then Set part3 = Range(Columns(1), Columns(act_select.Column - 1)) p = p + 4 End If If act_select.Column + act_select.Columns.Count - 1 < 256 Then Set part4 = Range(Columns(act_select.Column + act_select.Columns.Count), Columns(256)) p = p + 8 End If invers_selection = "" Do While p > 0 Select Case p Case 0: Case 1, 3, 5, 7, 9, 11, 13, 15: If invers_selection = "" Then invers_selection = part1.Address Else invers_selection = Union(Range(invers_selection), part1).Address End If p = p - 1 Case 2, 6, 10, 14: If invers_selection = "" Then invers_selection = part2.Address Else invers_selection = Union(Range(invers_selection), part2).Address End If p = p - 2 Case 4, 12: If invers_selection = "" Then invers_selection = part3.Address Else invers_selection = Union(Range(invers_selection), part3).Address End If p = p - 4 Case 8: If invers_selection = "" Then invers_selection = part4.Address Else invers_selection = Union(Range(invers_selection), part4).Address End If p = p - 8 Case Else: invers_selection = "" End Select Loop End Function