Tabellenkalkulation
Von: Hanno (abgemeldet), 14.7.2011 06:05 Uhr
Hallo,

wie kann ich mit .find nach einer Zelle in einer bestimmten Füllfarbe suchen? Eigentlich klappts so:

Application.FindFormat.Clear
Application.FindFormat.Interior.Color = 65535
Set Suchung = Range(Cells(1, 1), Cells(1, 230)).Find(what:="*", _
     after:=Cells(1, 1), LookIn:=xlValues, LookAt:=xlPart, _
     searchdirection:=xlNext, searchformat:=True)


Aber:

1)
Die von mir zuvor eingefärbte Zelle wurde nicht gefunden. Erst als ich die Zelle noch einmal in derselben Farbe eingefärbt hatte, hat's geklappt. Warum? Ist die Suche vom Alter der Färbung abhängig? Wie kann ich zuverlässig die erste (und auch mit einem anderen .find die letzte) Zelle in einer bestimmten Füllfarbe finden?

2)
Wie kann ich auch die erste Zelle einer Zeile finden, wenn sie gefärbt ist? Leider sucht .find ja immer erst eine Zelle später, und Cells(1, 0) darf man ja nicht eingeben.

3)
Die oben geschriebene .find-Sache funktioniert nur mit dem after:= ... Warum? Sollte es nicht wenigstens standardmäßig ab der ersten notierten Zelle suchen? Wenn ich mit what:="Hallo" suche, klappts ja auch ohne after:=. Warum ist es ausgerechnet bei der Wildcard+Format-Suche nötig?

4)
Dieses after ist überhaupt seltsam. In manchen Hilfetexten steht, daß man mit after:=LastCell den Interpreter dazu veranlassen könnte, von hinten beginnend zu suchen und dann mit (searcdirection:=xlNext) dem Anfang des definierten Bereichs weiterzumachen, was Problem 2) abhelfen würde. Wenn ich aber LastCell als Parameter eingebe, erhalte ich eine Fehlermeldung. Ist der Parameter in den aktuellen Versionen entfernt worden? (Ich habe Office 2010)

Vielen Dank schon mal für Eure Hilfe
Hanno



  1. Antwort von Reinhard 0
    zu 2/4
    Hallo Hanno, 2)
    Wie kann ich auch die erste Zelle einer Zeile finden, wenn sie
    gefärbt ist? Leider sucht .find ja immer erst eine Zelle
    später, und Cells(1, 0) darf man ja nicht eingeben.
    probier anstatt
    Set S = ActiveSheet.Range("A1:A10000").Find(100)
    dieses:
    Set S = ActiveSheet.Range("A1,A1:A10000").Find(100) Ist der Parameter in den aktuellen Versionen
    entfernt worden? (Ich habe Office 2010)
    Ich habe kein XL 2010

    Gruß
    Reinhard
    • Antwort von Anonym (abgemeldet) 0
      Re: Suche nach erster Zelle in bestimmter Farbe
      Hallo, Hanno. Wie kann ich zuverlässig die erste (und auch
      mit einem anderen .find die letzte) Zelle in einer bestimmten
      Füllfarbe finden?
      Zuverlässig mit einer Schleife, aber ob Dir das gefällt?

      Private Sub FarbeFinden()
        For s = 1 To 230
          If Cells(1, s).Interior.ColorIndex <> xlNone Then
            MsgBox Cells(1, s).Address
        Next
      End Sub
      2)
      Wie kann ich auch die erste Zelle einer Zeile finden, wenn sie
      gefärbt ist? Leider sucht .find ja immer erst eine Zelle
      später, und Cells(1, 0) darf man ja nicht eingeben.
      Würde durch die Schleife erledigt. Wenn ich aber LastCell als Parameter eingebe, erhalte ich eine
      Fehlermeldung. Ist der Parameter in den aktuellen Versionen
      entfernt worden? (Ich habe Office 2010)
      Ist mit LastCell das hier gemeint?

      Tabelle1.UsedRange.SpecialCells(xlCellTypeLastCell)

      Falls nicht, ist LastCell möglicherweise eine Variable, die nur sinnbildlich hier so genannt wurde. Weiterhelfen könnte Dir da vielleicht

      Tabelle1.Range(Cells(1, 230).Address).End(xlToLeft).Address

      Das würde Dir die Adresse der letzten Zelle in Zeile 1 zurückgeben, die einen Wert beinhaltet.


      Möglich wäre auch das Folgende Schema, allerdings ist UsedRange mit erheblicher Vorsicht zu genießen:

      Cells(1, Tabelle1.UsedRange.Column + Tabelle1.UsedRange.Columns.Count - 1).Address

      Beispiel: Nehmen wir an, Du willst aus dem Bereich A1:J1 mit der obigen Formel die letze eingefärbte Zelle in Zeile 1 finden. Das funktioniert nur, wenn Du wirklich nur in diesem Bereich jemals etwas gemacht hast. Hast Du z.B in Zelle M17 irgendwann einmal einen Rahmen gesetzt, dann ist UsedRange A1:M17 und der bleibt gespeichert, es sei denn, es werden alle jemals veränderten Zellen gelöscht.

      VG
      Carsten