Frage von Phila86, 51

Wie fügt man mittels Kontrollkästchen, in nur sichtbaren Zeilen einen Wert ein?

Hallo Gemeinde,

ich habe eine Auswertung mit Werkzeugen. Die Werkzeuge werden nach bestimmten Kriterien gefiltert und möchte mittels Kontrollkästchen in den nur sichtbaren Zeilen den Wert "a" stehen haben.

(Der Wert "a" ist im Marlet Font und gibt mir ein Häkchen wieder, welches mir später den Druckbereich festlegen soll)

Wie in der Bearbeitungszeile zu sehen, ist da eine einfache Formel die so auch in der Makroaufzeichnung hinterlegt ist: "Wenn das Kästchen aktiv ist, so setze in allen Zeilen den Wert "a", wenn sich daneben eine Werkzeugnummer befindet." Nur ist die Funktion nutzlos wenn ich gefilterte Werte haben möchte.

Der Code bisher:

Sub Makro2()
'
' Makro2 Makro
'
    Range("A13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    Range("A13").Select
    ActiveCell.FormulaR1C1 = "=IF(AND(R11C1,[@Betriebsmittel]>1),""a"","""")"
    Range("A13").Select
    Selection.AutoFill Destination:=Range("Tab_Auswertung[alle aus-wählen]")
    Range("Tab_Auswertung[alle aus-wählen]").Select
    Range("A13").Select


End Sub

Aus Foren und diversen Internetseiten habe ich nur wenig in Erfahrung bringen können, aber hier zwei Details die ich gefunden habe:

  • ausgeblendete Zeilen haben die Zeilenhöhe 0, sodass Zeilen die größer 0 sind, angesprochen werden könnten.

oder mit

  • .SpecialCells(xlCellTypeVisible)

Ich habe nur leider keine Ahnung wie ich nun das Makro zusammen setzen müsste um diese Befehle zu berücksichtigen.

Für eure Lösungsvorschläge wäre ich sehr dankbar.

Expertenantwort
von Ninombre, Community-Experte für Excel, 32

Alternativ zur Zeilenhöhe kann man auch die Sichtbarkeit abfragen, das sollte meiner Meinung nach auch beim Filter funktionieren.

Wenn Du die Spalte A für einen ganzen Bereich abprüfen willst, ist eine Schleife notwendig, die nacheinander die Zeilen prüft und ggf. in Spalte A das a setzt:

Sub haken()
For i = 2 To 20 'damit würden Zeile 2 bis 20 geprüft -> anpassen!
If Rows(i).Hidden = False Then
Cells(i, 1).Value = "a"
Cells(i, 1).Font.Name = "marlett" 'die Zeile kann wegfallen, wenn die Spalte mit der richtigen Schriftart formatiert ist
End If
Next
End Sub
Kommentar von Phila86 ,

Ja das funktioniert, nur leider brauch er ziemlich lange.
1500 Zeilen in 18 sek.

Gibt's da eine schnellere Variante?

Kommentar von Ninombre ,

Stell die Schrift für Spalte A vorher auf Marlett und lösch diese Zeile mit cells(i,1).font im Code. Ich denke, dass bringt schon einiges.

Kommentar von Phila86 ,

Leider nicht.

Naja dann muss ich schauen inwieweit das für die Praxis notwendig ist.
Ich glaube nicht das ich 1000 Zeilen ausdrucken möchte. Lass es im Höchstfall 150 sein.
Ist dann nur blöd wenn man vorher drauf klickt und keinen Filter gesetzt hat.

Besten Dank schon mal bis hierhin :)

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten