464 Aufrufe
Gefragt in Tabellenkalkulation von
Hi Leute

Versuche aus Tabelle1 mit Select Case Range("A5").Value
einen Wert in Tabelle2 mit
For Each rgZelle In Range(Cells(1, 1), Cells(2, ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column)) in Zeile 1 und 2 zu suchen jetzt möchte ich noch gerne das Zeile 10 eingefärbt wird aber es geht irgenwie nicht.

Also z.B wenn aus Tabelle1 zahl 5 in
Tabelle 2 in Zeile 1 oder 2 gefunden wird dann Zeile 10 einfärben.
Kann mir da jemand behilflich sein

8 Antworten

0 Punkte
Beantwortet von
Hallo swede19,

Prüfe ob Tabelle2 beim Ausführen des Makros das Aktive Tabellenblatt ist. Wenn nicht, musst du vor jedem Range- und Cells-Objekt noch das Tabellenblatt mitgeben und außerdem ActiveSheet durch Sheets("Tabelle2") ersetzen.

Ich würde hierfür jedoch die ExcelFunktion Zählenwenn verwenden. Die läuft schneller als wenn du jede Zelle einzeln abprüfst.

Als Code würde das dann in etwa so aussehen:
Suchwert = Sheets("Tabelle1").Range("A5").Value
Set SuchBereich = Sheets("Tabelle2").Range(Sheets("Tabelle2").Cells(1, 1), _
Sheets("Tabelle2").Cells(2, Sheets("Tabelle2").UsedRange.SpecialCells(xlCellTypeLastCell).Column))

Anzahl = Application.WorksheetFunction.CountIf(SuchBereich, Suchwert)

If Anzahl > 0 Then Sheets("Tabelle2").Rows("10:10").Interior.ColorIndex = 5

____________________________________________________________________


oder du machst das ganz ohne Makro über die Bedingte Formatierung.
Dazu markierst du Zeile 10 in Tabelle 2 und definierst zunächst einen Namen im Namensmanager. Als Namensbezug gibst du die Formel =zählenwenn($1:$2;Tabelle1!$A$5)>0 ein. Im Formelbereich der Bedingten Formatierung gibst du dann nur noch den Namen (z.B. =WertVorhanden) ein und wählst dein Format.

Gruß Mr. K.
0 Punkte
Beantwortet von
Super gleich 2 Lösungsansätze
Bedanke mich recht herzlich
0 Punkte
Beantwortet von
Hi Leute

Ich häng mich hier mal an möchte keine neues Thema machen
suche genau so eine Lösung nur wie kann man wenn die ZAHL gefunden
wurde Zeile 10 farbig markieren aber nur in der Spalte wo die Zahl ist
und nicht wie hier die gesamte Zeile.
Was muss man da ändern?

Als Code würde das dann in etwa so aussehen:
Suchwert = Sheets("Tabelle1").Range("A5").Value
Set SuchBereich = Sheets("Tabelle2").Range(Sheets("Tabelle2").Cells(1, 1), _
Sheets("Tabelle2").Cells(2,
Sheets("Tabelle2").UsedRange.SpecialCells(xlCellTypeLastCell).Column))

Anzahl = Application.WorksheetFunction.CountIf(SuchBereich, Suchwert)

If Anzahl > 0 Then Sheets("Tabelle2").Rows("10:10").Interior.ColorIndex = 5
0 Punkte
Beantwortet von
Hallo Esteban,

für eine makrofreie Lösung müsste mann die Formel für die Bedingte
Formatierung in Zelle A10 wie folgt ändern:
=ODER(A1=Tabelle1!$A$5;A2=Tabelle1!$A$5)
Dann mit dem PinselSymbol das Format auf die anderen Zellen in Zeile 10
übertragen.

Ab Excel 2010 ist der genannte Umweg über die Namensdefinition übrigens
nicht mehr notwendig.

_________________________________________________________


Für eine Lösung mit Makro müsste man z.B. den Code der Ausgangsfrage
verwenden und jede Zelle einzeln durchsuchen. Etwas was ich mit meiner
Antwort vermeiden wollte. Dann könnte man in die Schleife eine Abfrage wie
If rgZelle.value = Sheets("Tabelle1").range("A5").value then
Sheets("Tabelle2").cells(10, rgZelle.Column).Interior.colorindex=5
End If
einbauen.

Um die Prüfung jeder einzelnen Zelle zu vermeiden kann man natürlich auch
die Such-Funktion von Excel verwenden, welche erheblich schneller durchläuft.
Hier ausnahmsweise mal ein fast Copy und Paste Code aus der Excel-Hilfe
da dieser schon so gut wie perfekt ist:
With Sheets("Tabelle2").Range("A1", Cells(2, Sheets("Tabelle2") _
.UsedRange.Column + Sheets("Tabelle2").UsedRange.Columns.Count - 1))
Set c = .Find(Sheets("Tabelle1").Range("A5").Value, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Sheets("Tabelle2").Cells(10, c.Column).Interior.ColorIndex = 8
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Gruß Mr. K.
0 Punkte
Beantwortet von
Mist, jetzt bin ich selber in die Falle getappt. So ist die erste Zeile des Codes richtig:

With Sheets("Tabelle2").Range("A1", Sheets("Tabelle2").Cells(2, Sheets("Tabelle2") _
.UsedRange.Column + Sheets("Tabelle2").UsedRange.Columns.Count - 1))
0 Punkte
Beantwortet von
Man kann das Zeilenmonstrum natürlich auch verkürzen indem man das Tabellenblatt zuvor selektiert:

Sheets("Tabelle2").Select
With Range("A1", Cells(2, ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1))
0 Punkte
Beantwortet von
Hi xlKing

Dies Abfrage verstehe ich nicht ganz (bin kein Excel Spezi)

If rgZelle.value = Sheets("Tabelle1").range("A5").value then
Sheets("Tabelle2").cells(10, rgZelle.Column).Interior.colorindex=5
End If
aber egal das andere Makro funktioniert 1A

Vielen Dank
0 Punkte
Beantwortet von
Hallo Esteban,

Auch wenn das andere Makro eindeutig besser ist, hier die Erklärung der Abfrage für ein besseres Verständis.

In der Ausgangsfrage wurde ein Codeschnippsel genannt das da lautet:
For Each rgZelle In Range(...)
Das ist der Beginn einer sog. Schleife der im angegebenen Bereich (Range) jede Zelle einmal anspringt. im Bereich A5:B6 wären das z.B. die 4 Zellen A5, B5, A6, B6
Jede dieser 4 Zellen wird beim Anspringen vorübergehend an die Variable rgZelle übergeben, welche somit sämtliche Eigenschaften des entsprechenden Range-Objekts übernimmt.

wenn nun also der Wert der entsprechenden Zelle dem Wert im Blatt Tabelle1 Zelle A5 entspricht, wird im Tabellenblatt2 in der Zelle mit den Koordinaten Zeile 10, Spalte = Spalte der abgeprüften Zelle, die Hintergrundfarbe gesetzt.

Dazu muss die Abfrage irgendwo zwischen den Codezeilen For Each und Next stehen.

Vielleicht hilft dir die Info ja weiter, falls du vorhast, dich näher mit VBA zu beschäftigen.

Viele Grüße
Mr. K.
...