Mehrere Zeilen in Excel VBA ausblenden

Mehrere Zeilen in Excel VBA ausblenden

Ich versuche, alle Zeilen mit dem Wert „xx“ in Spalte A auszublenden und die Zeilen mit „a“ in Spalte A nicht auszublenden. Der Bereich reicht von A8:A556. Dieses Makro muss durch eine Änderung in Zelle C4 ausgelöst werden.

Irgendeine Idee, warum es nicht funktioniert? Hier ist der aktuelle Versuch:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(True, True) = "$C$4" Then

    If Range("A8:A555").Value = "xx" Then
        Rows("8:555").EntireRow.Hidden = True
    ElseIf Range("A8:A555").Value = "a" Then
        Rows("8:555").EntireRow.Hidden = False

     End If
   End If

End Sub

Danke!

BEARBEITEN:

Hallo Fixer1234, hier sind die Einzelheiten:

  • Wenn das Makro korrekt funktioniert, dürfen die beiden Namen „xx“ und „a“ nicht zusammen vorkommen.
  • Nur "xx" Zeilen dürfen ausgeblendet werden
  • „xx“-Werte dürfen nicht mit Werten kombiniert werden, die nicht ausgeblendet werden können.
  • „a“-Werte dürfen nicht mit Werten kombiniert werden, die ausgeblendet werden müssen.
  • es gibt andere Zeilen, die weder „xx“ noch „a“ enthalten und nicht ausgeblendet werden müssen (sollte ich diesen Spalten ein „a“ hinzufügen oder das IfElse vollständig entfernen?).
  • Die Zeile „xx“ enthält andere Formeln. Ein leeres Ergebnis der Formel bedeutet, dass die Zeile ausgeblendet werden muss.
  • „a“-Zeilen haben die gleiche Formel, erzeugen aber ein Ergebnis und dürfen nicht ausgeblendet werden.

Laufzeitfehler '13': Typenkonflikt und dann geht der Debug zum ersten If Range("A8:A555").Value = "xx" Then

Antwort1

Sie können nicht alle Werte in einem Bereich mit testen Range("A8:A555").Value = "xx". Es wird ein Typkonfliktfehler ausgegeben.

Sie müssen jede Zelle im Bereich durchlaufen und einzeln prüfen, ob sie Value„xx“ entspricht.

Um die Ausführung des Codes zu beschleunigen, verbergen Sie Zeilen nicht gleich, wenn Sie sie erkennen, sondern erstellen Sie eine RangeListe mit Rangeszu verbergenden Zeilen und verbergen Sie sie dann alle auf einmal.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range
Dim RangeToHide As Range

    'Test if Target is C4
    If Not Intersect(Target, [C4]) Is Nothing Then
        'Loop through each cell in range and test if it's "xx"
        For Each cel In Range("A8:A555")
            If cel = "xx" Then
                If RangeToHide Is Nothing Then
                    'Initialise RangeToHide because Union requires at least 2 ranges
                    Set RangeToHide = cel
                Else
                    'Add cel to RangeToHide
                    Set RangeToHide = Union(RangeToHide, cel)
                End If
            End If
        Next
        RangeToHide.EntireRow.Hidden = True
    End If
End Sub

Antwort2

Verwenden Sie diesen VBA-Code als Standardmodul. Er hilft Ihnen, alle Zeilen auszublenden, die entweder XXoder xxin der Spalte enthalten A.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(True, True) = "$C$4" Then

Dim i As Integer
  Application.ScreenUpdating = False



    For i = 8 To 255

    If Sheets("Sheet1").Range("A" & i).Value = "XX" Or Sheets("Sheet1").Range("A" & i).Value = "xx" Then
    Rows(i & ":" & i).EntireRow.Hidden = True
    End If


    Next i
    End If

    Application.ScreenUpdating = True


End Sub

Achtung

Sie müssen keinen Code verwenden, um Zeilen mit aoder sichtbar zu machen A, da diese bereits sichtbar sind. Und vor allem verbirgt der verwendete Code bestimmte Zeilen in der Spalte A.

Antwort3

Wie verstecke ich einzelne Zeilen?
Ich denke, das ist so:

Private Sub CheckBox1_Click()
If CheckBox1 = False Then
    [15:15].EntireRow.Hidden = True
    [3:3].EntireRow.Hidden = True
Else
    [15:15].EntireRow.Hidden = False
    [3:3].EntireRow.Hidden = False
End If

Freundliche Grüße
Mattias

verwandte Informationen