PDA

Vollständige Version anzeigen : bestimmte Zellen füllen


SeNf
03.05.2009, 09:21
Guten Morgen,
so noch ein kleines aber sicher nicht unlösbares problem :-)
in der angehängten tabelle suche ich die "8" in der reihe "2" mit:
Set rngDatFind = Rows(2).Find(8, LookIn:=xlValues)
begrenze das suchfeld
For lngCounter = 2 To 6
jetzt möchte ich den letzten eintrag "G" suchen und danach wenn kein "E" in der reihe ist und die zelle keine farbe hat, alle zellen bis zur reihe mit der "8" füllen mit "U"

teil ansatz dazu:
If Cells(lngCounter, rngDatFind.Row).Interior.ColorIndex = xlNone Then
Cells(lngCounter, rngDatFind.Row).Value = "U"
End If
irgendwelche ideen?
Gruß
Steffen

hary
03.05.2009, 18:04
Hi Steffen
meinst Du so? Mit der Farbe nicht eingebaut, da ich nicht weiss ob die Farbe mit bedingter Formatierung reinkomt,dann wird's schwierig.
Anhang als Anfang
Gruss Hary

SeNf
03.05.2009, 22:15
servus Hary,
ja das sieht sehr gut aus so wollte ich das, eigentlich arbeite ich nur mit den farben damit ich die zellen frei beschreiben kann aber das funtioniert schon mir hat nur noch der code für die freien raum zwischen gesuchter zahl und letzter zelle gefehlt, danke!
was aber noch ein problem werden könnte wäre wenn das "E" vor einem "G" steht aslo G.G.G.E.G
G für geplant E für beendet U steht für überschritten die zahlen wären die kalenderwochen... also zustand beendet vor dem geplanten ende...
wer eine idee hat, raus damit :-)
Gruß
Steffen

hary
04.05.2009, 06:26
Moin Steffen
so?
siehe Anhang
Gruss Hary

SeNf
04.05.2009, 10:17
Hi Hary,
hier noch die erste lösung komplett mit farben. ich habe allerdings ein problem wenn ich mit interior.colorindex arbeite
leider poste ich das thema jetzt 2x deshalb hier der link zum anderen thema:
Link (http://www.ms-office-forum.net/forum/showthread.php?t=250155&page=2)
dein 2ter ansatz sieht gut aus :-) muß den code mal umschreiben...

eine frage noch für was die sub a() in modul 2?
danke und gruß Steffen

SeNf
04.05.2009, 10:20
Hi Hary,
hier noch die erste lösung komplett mit farben. ich habe allerdings ein problem wenn ich mit interior.colorindex arbeite
leider poste ich das thema jetzt 2x deshalb hier der link zum anderen thema:
Link (http://www.ms-office-forum.net/forum/showthread.php?t=250155&page=2)
dein 2ter ansatz sieht gut aus :-) muß den code mal umschreiben...

eine frage noch: für was die sub a() in modul 2?

danke und gruß
Steffen

SeNf
04.05.2009, 12:41
so jetzt habe ich in meiner tabelle folgenden code:
Option Explicit
Sub Test2()
Dim fFree As Long
Dim KW As Double
Dim t&
Dim rngDatFind
Dim lngCounter
Dim bCounter As Long
'_____________________erste freie reihe suchen in Spalte SP_NR
fFree = Rows.Count
If Range("SP_NR").Cells(fFree).Value = "" Then
fFree = Range("SP_NR").Cells(fFree).End(xlUp).Row
End If
'_____________________Berechnt die aktuelle KW
t = DateSerial(Year(Date + (KW - Weekday(Date)) Mod 7 - 3), 1, 1)
KW = (Date - t - 3 + (Weekday(t) + 1) Mod 7) \ 7 + 1
'_____________________

'__________nach datum suchen in reihe 4
Set rngDatFind = Rows(4).Find(KW, LookIn:=xlValues)
'__________begrenzen des suchfeldes
For lngCounter = 7 To fFree

bCounter = Cells(lngCounter, Columns.Count).End(xlToLeft).Column + 1

If Cells(lngCounter, bCounter - 1).Interior.ColorIndex = 37 Then
Range(Cells(lngCounter, bCounter), Cells(lngCounter, rngDatFind.Column)).Interior.ColorIndex = 46
End If
If Application.CountIf(Range("A" & lngCounter, Cells(lngCounter, bCounter - 1)), "E") > 0 Then
Range(Cells(lngCounter, bCounter), Cells(lngCounter, rngDatFind.Column)).Interior.ColorIndex = xlNone
End If
Next

End Sub

jetzt füllt es mir die zellen zwischen der aktuellen KW und dem letzten blauen feld aber nur wenn ein "G" drinsteht und die zelle blau ist??? ich habe doch nur .Interior.ColorIndex = 37 als bedingung? oder nicht???
alleine blau und alleine "G" funkt auch nicht...

am verzweifeln (zumindest bald :p )
Steffen

hary
04.05.2009, 15:21
Hi
Sub a() war zu Testzwecken,kann weg. Das andere muss ich mir noch anschauen, bin ausser Haus.
Gruss hary

BoskoBiati
04.05.2009, 16:03
Hallo Steffen,

es ist manchmal sehr hilfreich, den Code mittels eines Haltepunktes zu stoppen und schrittweise abzuarbeiten. Debug.print hilft auch noch. Dann sieht man z.B.
dass in Zeile 11 der Wert für bcount = 2 ist, will heißen, da Du nach der letzten belegten Zelle abfragst ist das in Zeile 11 die 1.Spalte. Die blau gefärbten Zellen befinden sich dahinter und werden so nicht erfasst.
Ich würde die ganze Formel so umbauen, dass die letzte relevante Spalte abgefragt wird, ob die Zelle blau oder sonstwie gefärbt ist und dann den Rest einfärben.

hary
04.05.2009, 18:24
Moin moin
Als ich den Com ausgemacht habe fiel's mir ein, wie mein Vorgaeger schrieb.
das Problem liegt hier
<pre>
bCounter = Cells(lngCounter, Columns.Count).End(xlToLeft).Column + 1
</pre>
Es wird immer die erte leere/bzw im Code nach der letzten beschriebenen Zelle gefragt.
Da musst Du Dir was anderes einfallen lassen.
Gruss hary

SeNf
05.05.2009, 13:34
Hat jemand eine idee, wie ich nach der letzten eingefärbten zelle in einer reihe suchen kann (rückwärts)
der vcode oben fuktioniert wie gesagt nur wenn text in der zelle ist...
Gruß

jinx
05.05.2009, 16:26
Moin, Steffen,

wurde nicht ab Office/Excel2002 die Möglichkeit der erweiterten Suche eingeführt (also nicht nur nach Text, sondern auch nach Schriftart, Farbe etc.)? Wenn das nicht hilft, eine Schleife für jede Zeile "quälen": von der letzten Zelle der Überschriftenreihe an rückwärts bis zum Text oder dem Auftreten des Kriteriums...

SeNf
07.05.2009, 08:26
Hallo jinx,
volgende zeile in meinem code sucht ja die letzte beschriebene zelle, wie schreibe ich die um auf interior.colorindex?

bCounter = Cells(lngCounter, Columns.Count).End(xlToLeft).Column + 1

Gruß
Steffen

chris-kaiser
07.05.2009, 08:50
hiho

wie schreibe ich die um auf interior.colorindex?


geht nicht!!!


du könntest jede Zeile mit einer Schleife von hinten nach vorne durchlaufen und abfragen ob eine Farbe in der Zelle ist.

falls du EINE Farbe wählen würdest, könnte auch so ein Code genommen werden.

Sub rot()
Dim FoundInterior As Object
'
'
Application.FindFormat.Interior.ColorIndex = 3 'das wäre Rot
Set FoundInterior = Rows(lngcounter).Find(What:="", SearchDirection:=xlPrevious, SearchFormat:=True)
If Not FoundInterior Is Nothing Then
bCounter = FoundInterior.Column + 1
End If
End Sub

SeNf
07.05.2009, 15:05
Hallo Chris,
mir ist nicht ganz klar wie ich deinen code in meine abfrage einbauen muß, soll, kann...

ich möchte dann die zellen die zwischen den letzten blauen und der spalte 21 sind rot färben, also der aktuellen KW (19) und die reihen 11,13,15,16,17

und ich könnte dann doch mehrere schleifen durchlaufen und verschiedene farben so abfragen, und immer dann füllen oder eben nicht (wenn eine der zellen eine bestimmte farbe hat)?

Gruß
Steffen

chris-kaiser
08.05.2009, 09:05
Hallo Steffen

mir ist nicht ganz klar wie ich deinen code in meine abfrage einbauen muß

Ich auch nicht!,

mein Code war die Antwort auf

volgende zeile in meinem code sucht ja die letzte beschriebene zelle, wie schreibe ich die um auf interior.colorindex?

bCounter = Cells(lngCounter, Columns.Count).End(xlToLeft).Column + 1

der Code den ich geschrieben habe würde für einen bestimmten Bereich einfach die letzte rote Zelle finden........

würde ein anderer Index genommen werden eben eine andere Farbe.

Mir ist auch nicht klar für was das gut sein soll!?
zuerst waren es welche Buchstaben, dann mit Farbe, irgendwas noch mit Kalenderwoche, aber du wirst schon wissen was mit der Tabelle ereicht werden sollte. ;)

SeNf
08.05.2009, 11:21
Hallo Chris,
ok jetzt habe ich zumindest deinen code verstanden :-)

die anforderung ist einfach das ich einen jahresplan in wochenunterteilung habe mit den zuständen: geplant (farbe blau) gestartet (farbe grün) und beendet (farbe dunkelgrün) jetzt lese ich noch die aktuelle woche aus und möchte einfach die felder die zwischen geplant und heute sind rot füllen als zustand überschritten. eventuell noch die abfrage ob überhaupt gestartet (grün) oder schon beendet (dunkelgrün) dann kein rot für überschritten...
hintergrund des ganzen ist das ich einen projektplaner wollte der in den einzelnen zellen frei beschreibbar ist und der zustand über farben erkennbar ist...
Gruß
Steffen

chris-kaiser
08.05.2009, 12:06
Hallo Steffen

Ok, jetzt habe ich es auch verstanden.
nur bin ich bis Di. mal wieder offline

vielleicht könnte das eine Alternative sein?
http://www.online-excel.de/excel/singsel.php?f=158

Ist auch Schritt für Schritt erklärt.

p.s bin auch in Diensten von PM unterwegs, nur verwende ich persönlich für die Projektverfolgung MS-Project, ist einfach zu bedienen und wenn ich versuchen würde alle Abhängigkeiten in Excel (AE,AA, usw) nachzubauen, dauert mir das einfach zu lange.

hary
08.05.2009, 13:23
Hi Steffen
schau's Dir jetzt mal an(Makro ausfuehren). Alles was Neu ist ist als neu kommentiert. Hilft's weiter?
Gruss Hary

BoskoBiati
08.05.2009, 14:13
Hallo zusammen,

man könnte auch von vorne nach hinten suchen, ob die Zelle i+1 anders gefärbt ist als Zelle i und dann einfärben.
s. Bsp.

hary
08.05.2009, 14:47
Hi Edgar
So hab ich's auch probiert. Es happert aber an lngCounter. Zeile 18 wird nicht mehr angesprochen(ueberprueft). Deshalb die variable i hinzugefuegt,die die Spalte I unterhalb der Eintraege noch ueberprueft.
Gruss hary

BoskoBiati
08.05.2009, 18:28
Hallo hary,

ich bin einfach davon ausgegangen, dass diese blaue Zelle in Zeile 18 nicht sein sollte, da in A18 keine Woche eingetragen ist und eine Eintragung ohne Wochenzuordnung macht für mich keinen Sinn.

SeNf
12.05.2009, 11:39
servus zusammen,
noch zur vereinfachung des ganzen, (oder auch nicht... je nach dem...)
die buchstaben waren nur beispielhaft eingetragen ich wollte dann einfach anstelle .value, .interior.colorindex nehmen, aber was ich jetzt gesehen habe dient das nicht der vereinfachung weil ihr die suchfunktion über den text gemacht habt und das sich nicht ohne weiteres auf die farbe übertagen lässt.
wo ich auch hänge ist diese code zeile:
loA = Cells(4, Columns.Count).End(xlToLeft).Column
die frage war nach der letzten beschriebenen spalte, das ganze geht nachher von 1 bis 52 (die kalenderwochen) die ich über folgenden code berechne:
t = DateSerial(Year(Date + (KW - Weekday(Date)) Mod 7 - 3), 1, 1)
KW = (Date - t - 3 + (Weekday(t) + 1) Mod 7) \ 7 + 1
dort habe ich dann die aktuelle kalenderwoche und möchte bis dorthin den roten balken nach "blau" haben quasi als überschritten bis heute...
die aktuelle kalenderwoche finde ich so:
Set rngDatFind = Rows(4).Find(KW, LookIn:=xlValues
jetzt fehlt mir der "ersatz" für .End(xlToLeft)

aber danke fürs dranbleiben und die guten vorschläge in richtungen in die ich nicht gedacht habe!!!
Gruß
Steffen

SeNf
12.05.2009, 11:45
@ Chris...
oh ja MS Projekt wär auch mein traum gewesen... :-)
geht aber leider nicht, (dickkopp vom chef)
dein beispiel link ist nicht schlecht nur hab ich schon viele andere funktionen in die komplette tabelle eingebaut, hätte man aber ohne weiteres darauf aufbauen können.... merci, wird mir irgendwann mal viel zeit sparen :-)
Gruß
Steffen

BoskoBiati
12.05.2009, 12:24
Hallo Steffen,

zum Einen suchen wir nicht nur nach Text, sondern auch nach der Farbe. Wenn Du z.B. die Zeilen 11 und 17 betrachtest, da gibt es nur Farbe und der Rest der Zeile wird gefüllt.
Zum anderen, wieviel Wochen in der Zeile 4 stehen ist egal, mit der Zeile
loA = Cells(4, Columns.Count).End(xlToLeft).Column
sucht er die letzte gefüllte Spalte in Zeile4!

SeNf
12.05.2009, 14:29
Hallo Edgar,
das ist ja genau das problem :-)
die aktuelle KW begrenzt mir das suchfeld der spalten, nicht das ende der beschriftung in spalte 4...
das in dem code nicht nur text gesucht wird hab ich gesehen, aber das erschwert das ganze, ich brauch eben nur die farbe.
Gruß
Steffen

BoskoBiati
12.05.2009, 15:30
Hallo Steffen,

dann schmeiß doch die Zeilen, in denen Text gesucht wird, raus. Das ist doch getrennt. und in den Zeilen, die für die Färbung zuständig sind, änderst Du loA in KW. z.B.
Range(Cells(lngCounter, i + 1), Cells(lngCounter, KW)).Interior.ColorIndex = 46

SeNf
13.05.2009, 15:12
Mahlzeit,
so erst einmal thanks @ all!!! denen, die sich mit meinem problem auseinandergesetzt haben :)
ich habe versucht in der angehängten excel tabelle die lösung ein bisschen zu beschreiben, wer weiß wem es einmal hilft!
nochmal danke... und bis zum nächsten problem :p
Gruß
Steffen