Minimum u Maximum einfärben
hallo,
vllt kann mir hier jemand helfen?
Aus dem Bereich B151:B170 möchte ich gerne das Minimum bzw Maximum suchen, das Minimum möchte ich dann rot einfärben(fett) das Maximum blau(fett).
danke
MfG
seebaer
*Threadedit* 11:39:06
Admininfo: Führ bitte einen Thread nicht fort indem du Weitere eröffnest, und vermeide Mehrfachanfragen. Die Datenbank und User werden es dir danken. Siehe FAQ 2.
Antwort schreiben
Antwort 1 von coros vom 19.12.2019, 09:19 Options
Hallo seebaer,
das geht über die bedingte Formatierung. Eine Anleitung dazu findest Du auf
meiner HP in der
Rubrik Anleitungen und dort dann in der
Anleitungsnummer 5 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
Die Formel für die bedingte Fortmatierung für Minimum lautet
=B151=MIN($B$151:$B$170)und für Maximum
=B151=MAX($B$151:$B$170)Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von seebaer_1 vom 19.12.2019, 09:25 Options
hallo oliver,
vielen dank für deine Antwort
ich möchte das Problem allerdings mit einem VBA code lösen, kannst du da auch helfen?
deine Homepage ist übrigens echt super, war ich schon mal drauf.
danke
MfG
seebaer
Antwort 3 von coros vom 19.12.2019, 09:34 Options
Hallo seebaer,
solltest Du besser das nächste mal dazu schreiben, wenn Du explizit eine VBA-Lösung wünscht.
Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.[b]Option Explicit
Sub Min_Max()
Dim rngBereich As Range
For Each rngBereich In Range("B151:B170")
If rngBereich = Application.WorksheetFunction.Min(Range("B151:B170")) Then
With Range(rngBereich.Address)
.Font.ColorIndex = 3
.Font.Bold = True
End With
End If
If rngBereich = Application.WorksheetFunction.Max(Range("B151:B170")) Then
With Range(rngBereich.Address)
.Font.ColorIndex = 5
.Font.Bold = True
End With
End If
Next
End Sub[/b]
Ich hoffe, Du hast das so gemeint. Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von seebaer_1 vom 19.12.2019, 09:42 Options
hallo oliver,
hey super genau so hab ich das gemeint, eine frage hätte ich da noch, muss ich da nicht irgendwo noch rein schreiben auf welches tabellenblatt es sich bezieht also auf "Übersicht-Sektionen"? oder steht das wo und ich sehe es nicht?
und zu den bed. Formatierungen noch:
wo müssten in deiner anleitung dann die obig genannten formeln stehen (rein interesse halber, falls ich sowas mal brauche)
danke,
MfG
seebaer
Antwort 5 von coros vom 19.12.2019, 09:49 Options
Hallo Seebaer,
solltest Du das nächste mal auch gleich zu Anfang angeben, wenn es sich um ein bestimmtes Tabellenblatt handelt. Schreibe in dem Makro überall wo eine Range-Anweisung steht den Text
Sheets("Übersicht-Sektionen").
davor. Dann wirkt das Makro nur im Tabellenblatt "Übersicht-Sektionen".
Die Formeln gehören in die Bedingungen der bedingten Formatierung und dort in die Leerzeile neben "Formel ist". Steht aber alles in der ANleitung auf meiner HP.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 6 von seebaer_1 vom 19.12.2019, 10:12 Options
hallo oliver,
okay werd ich machen, sorry.
ich hätte noch zwei ergänzungsfragen.
kann man das makro so modifizieren, dass keine zahl eingefärbt bzw fett gemacht wird wenn alle werte gleich groß sind, das makro färbt da dann alles blau(fett)? also dann sollen alle werte schwarz(nicht fett) sein.
kann man das makro so modifizieren, dass wenn alle werte gleich groß sind, außer einer, dieser dann eben rot bzw blau(fett) gemacht wird und die anderen werte bleiben also Schwarz(nicht fett)?
kann man meine beiden fragen irgendwie zusammen packen, dh B151:B170 entsprechen ja im diagramm datenreihe 1:20, dass wenn zB 152 das Min ist, soll die zweite datenreihe rot als Flächenfarbe bekommen, und wenn B155 das Max ist soll die 5te datenreihe blau werden?
danke
MfG
seebaer
Antwort 7 von seebaer_1 vom 19.12.2019, 10:23 Options
hallo oliver,
so ganz funktionierts doch noch nicht, denn wenn ich in dem bereich B151:B170 werte ändere werden zwar wieder "neu" die minima u maxima bestimmt aber die "alten" bleiben so eingefärbt(falls sie nicht mehr das max bzw min sind bleiben sie trotzdem blau bzw rot) sie sollten dann jedoch wieder schwarz werden.
sorry.
Danke
MfG
seebaer
Antwort 8 von coros vom 19.12.2019, 10:26 Options
Hallo seebaer,
nachfolgendes Makro sollte Dir immer nur einen Min- bzw. Maxwert einfärben.
Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.[b]Option Explicit
Sub Min_Max()
Dim rngBereich As Range
Dim iZählerMin As Integer
Dim iZählerMax As Integer
With Sheets("Übersicht-Sektionen").Range("B151:B170")
.Font.ColorIndex = 0
.Font.Bold = False
End With
For Each rngBereich In Sheets("Übersicht-Sektionen").Range("B151:B170")
If rngBereich = Application.WorksheetFunction.Min(Sheets("Übersicht-Sektionen").Range("B151:B170")) Then
iZählerMin = iZählerMin + 1
If iZählerMin > 1 Then GoTo weiter_max
With Range(rngBereich.Address)
.Font.ColorIndex = 3
.Font.Bold = True
End With
End If
weiter_max:
If rngBereich = Application.WorksheetFunction.Max(Sheets("Übersicht-Sektionen").Range("B151:B170")) Then
iZählerMax = iZählerMax + 1
If iZählerMax > 1 Then GoTo weiter_min
With Sheets("Übersicht-Sektionen").Range(rngBereich.Address)
.Font.ColorIndex = 5
.Font.Bold = True
End With
End If
weiter_min:
Next
End Sub[/b]
Den 2. Teil Deiner Frage habe ich leider noch nicht ganz verstanden.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 9 von seebaer_1 vom 19.12.2019, 10:34 Options
hallo oliver,
das funktioniert nun fast, dh es wird wirklich nur ein min bzw max markiert so wie gewünscht, aber wenn zB in jeder Zelle 0 steht und in zelle B154 steht 5 dann soll die 5 blau werden und alle anderen schwarz bleiben da es kein eindeutiges min gibt, das gleiche gilt für max, dh wenn überall 100 steht, aber in B155 steht 5 dann soll die 5 rot markiert werden und alles andere schwarz bleiben.
die zweite frage? das mit den diagramm? ja das hängt alles zusammen, diese frage die du hier so aufwändig beantwortest soll die werte aus einer Tabelle(B151:B170) markieren, dazu gibt es ein eingebettetes diagr das auf diese werte zugreift. die maximale bzw minimale datenreihe sollen dann rot bzw blau markiert werden, damit man sieht woher diese werte der datenreihe stammen(also aus der tabelle).
danke
MfG
seebaer
Antwort 10 von coros vom 19.12.2019, 10:58 Options
HAllo seebaer,
wie bitte soll das gehen. Wenn überall eine 100 steht und nur in einer Zelle eine 5, ist mit Sicherheit nicht die 5 der höchste Wert, sondern die 100. Wo ist da der Sinn. Bitte erst mal um Erklärung, bevor ich mir dahingehend weitere Gedanken mache.
Nachfolgend ein Makro, dass DIr die Datenreihen eines Diagramms färbt.
Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.[b]Option Explicit
Sub Min_Max()
Dim rngBereich As Range
Dim iZählerMin As Integer
Dim iZählerMax As Integer
Dim iZählerDiagramm As Integer
Dim Diagramm As Series
ActiveSheet.ChartObjects("Diagramm 2").Activate
Set Diagramm = ActiveChart.SeriesCollection(1)
ActiveChart.SeriesCollection(1).Interior.ColorIndex = 1
With Sheets("Übersicht-Sektionen").Range("B151:B170")
.Font.ColorIndex = 0
.Font.Bold = False
End With
For Each rngBereich In Sheets("Übersicht-Sektionen").Range("B151:B170")
iZählerDiagramm = iZählerDiagramm + 1
If rngBereich = Application.WorksheetFunction.Min(Sheets("Übersicht-Sektionen").Range("B151:B170")) Then
iZählerMin = iZählerMin + 1
If iZählerMin < 1 Then
With Range(rngBereich.Address)
.Font.ColorIndex = 5
.Font.Bold = True
End With
End If
Diagramm.Points(iZählerDiagramm).Interior.ColorIndex = 5
End If
If rngBereich = Application.WorksheetFunction.Max(Sheets("Übersicht-Sektionen").Range("B151:B170")) Then
iZählerMax = iZählerMax + 1
If iZählerMax < 1 Then
With Sheets("Übersicht-Sektionen").Range(rngBereich.Address)
.Font.ColorIndex = 3
.Font.Bold = True
End With
End If
Diagramm.Points(iZählerDiagramm).Interior.ColorIndex = 3
End If
Next
End Sub[/b]
In der Zeile
[b]ActiveSheet.ChartObjects("Diagramm 2").Activate[/b]
musst Du den Namen Deines Diagramms eintragen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 11 von seebaer_1 vom 19.12.2019, 11:06 Options
hallo oliver,
ließ dir bitte AW9 nochmal genau durch da steht nämlich 5 rot einfärben (rot entspricht minimum)
hoffe dass ist klar, und drüber steht 5 blau einfärben, das sind alle anderen werte aber 0 und nicht 100, ok?
danke
MfG
seebaer
Antwort 12 von seebaer_1 vom 19.12.2019, 11:15 Options
hallo oliver,
dein makro aus AW10 ist super, markiert das so wie ich wollte, aber die datenquelle meines diagramms(B151:B170) ändert sich.
ich habe eine select Case verzweigung, und je nachdem ob case 1 ... bis Case 10 zutrifft ändert sich der datenbereich in den diagrammen, muss ich da dann dein makro in jedes "Case" schreiben und den datenbereich (B151:B170) dementsprechend ändern oder?
danke
MfG
seebaer
ps: wenn du mir jetzt noch das "kleine" obige Problem beheben kannst bist du echt wahnsinn wenn man das mal sagen darf. also danke dir
Antwort 13 von coros vom 19.12.2019, 11:30 Options
Hallo seebaer,
also langsam komm ich mir hier etwas doof vor. Warum schreibst Du nicht von Anfang an die Infos zu Deiner Datei. Am Besten wäre, wenn Du die Datei z.B. bei
www.netupload.de hochladen und den Link, den Du dann erhälst, hier posten könntest.
Denn in AW12 kommst Du nun mit der Info rüber, dass der Bereich nicht fest ist, sondern durch einen anderen VBA-Code geändert wird. Was soll das? Lade bitte Deine Datei unter dem oben angegebenen Link hoch, damit ich das an Deiner Datei sehen kann, da ich ehrlich gesagt keine Lust habe, mir eine Datei zu erstellen, die Deiner annähernd änlich ist, und die ich dann ständig nach Deinen Infos ändern muss. Du hast die Datei bereits, stelle uns diese bitte zur Verfügung.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 14 von seebaer_1 vom 19.12.2019, 11:33 Options
hallo oliver,
ABER:
hier tritt das selbe problem auf wie beim Färben der werte.
dh habe ich lauter gleich große säulen (entspricht lauter gleich großen werten) und eine größere säule (entspricht einem größeren wert) soll nur der große wert blau gemacht werden der rest schwarz
analog: nur ein kleiner wert und lauter gleich große größere werte bzw säulen dann soll nur der kleine rot gemacht werden und der rest schwarz?
danke
MfG
seebaer
Antwort 15 von seebaer_1 vom 19.12.2019, 11:39 Options
hallo oliver,
AW 12 hat sich bereits erledigt, hab ich selber ausprobiert und es hat soweit funktioniert außer das was in AW14 steht und dazu brauchst du dei datei nicht, die würde dir hier nichts helfen, da es nur darum geht, dass wenn es kein eindeutiges max oder min gibt dieses auch nicht ersichtlich sein soll also schwarz sein soll, ist das verständlich?
danke
MfG
seebaer
Antwort 16 von coros vom 19.12.2019, 12:01 Options
Hallo seebaer,
das mit Säulen ist kein Problem, da muss nur der Befehl "End If", der vor der Zeile zum Färben der Diagrammbalken steht unter diese Zeile verschoben werden.
Allerdings fällt mir im Moment nichts richtiges ein, wenn es mehrere Wert gibt, die den Wert 0 haben, ein. Denn wenn es mehrer Zellen mit dem Wert 0 gibt, ist das nun mal der Minimumwert. Besteht die Möglichkeit, dass man anstelle dem Wert 0 die Zelle leer läst?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 17 von seebaer_1 vom 19.12.2019, 12:09 Options
hallo oliver,
nein das geht auf keinen fall, "0" war ja nur ein beispiel, die warscheinlichkeit dass genau o wo stehen wird existiert nicht.
das ist eben das problem es ist dann zwar ein minimum aber kein eindeutiges? vllt kann das VBA auch gar nicht?
kannst du mir deinen tipp aus den ersten zeilen posten?
danke
MfG
seebaer
Antwort 18 von coros vom 19.12.2019, 12:20 Options
Hallo seebaer,
das hat nichts mit VBA zu tun. In dem obigen Makro kommt die Tabellenblattfunktion "=MIN()" und "=MAX()" zum Einsatz, nur halt als WorksheetFunction-Eigenschaft. Dort wird das Gleiche erreicht, als wenn ich in eine Zelle besagte Formeln eintrage. Wenn also in einer oder mehreren Zellen der Wert 0 steht, ist das dass Minimum, bzw. bei 100 das Maximum. Wie man das umgehen könnte fällt mir im Moment nichts gescheites ein. Mal sehen, eventuell kommt mir ja noch eine Erleuchtung.
Mit Deinem Zusatz
Zitat:
kannst du mir deinen tipp aus den ersten zeilen posten
kann ich leider nichts anfangen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 19 von coros vom 19.12.2019, 12:31 Options
Hallo seebaer,
nachfolgendes Makro sollte das machen, was Du Dir vorstellst. Wert 0 und 100 werden ignoriert.
Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.[b]Option Explicit
Sub Min_Max()
Dim rngBereich As Range
Dim iZählerMin As Integer
Dim iZählerMax As Integer
Dim iZählerDiagramm As Integer
Dim Diagramm As Series
Dim arrayMin As String
Dim arrayMax As String
ActiveSheet.ChartObjects("Diagramm 2").Activate
Set Diagramm = ActiveChart.SeriesCollection(1)
ActiveChart.SeriesCollection(1).Interior.ColorIndex = 1
With Sheets("Übersicht-Sektionen").Range("B151:B170")
.Font.ColorIndex = 0
.Font.Bold = False
End With
For Each rngBereich In Sheets("Übersicht-Sektionen").Range("B151:B170")
If rngBereich > 0 Then
If arrayMin = "" Then
arrayMin = rngBereich.Address
Else
arrayMin = arrayMin & "," & rngBereich.Address
End If
End If
If rngBereich < 100 Then
If arrayMax = "" Then
arrayMax = rngBereich.Address
Else
arrayMax = arrayMax & "," & rngBereich.Address
End If
End If
Next
For Each rngBereich In Sheets("Übersicht-Sektionen").Range("B151:B170")
iZählerDiagramm = iZählerDiagramm + 1
If rngBereich > 0 Then
If rngBereich = Application.WorksheetFunction.Min(Sheets("Übersicht-Sektionen").Range(arrayMin)) Then
iZählerMin = iZählerMin + 1
If iZählerMin > 1 Then GoTo weiter_max
With Range(rngBereich.Address)
.Font.ColorIndex = 3
.Font.Bold = True
End With
weiter_max:
Diagramm.Points(iZählerDiagramm).Interior.ColorIndex = 3
End If
End If
If rngBereich = Application.WorksheetFunction.Max(Sheets("Übersicht-Sektionen").Range(arrayMax)) _
And rngBereich < 100 Then
iZählerMax = iZählerMax + 1
If iZählerMax > 1 Then GoTo weiter_min
With Sheets("Übersicht-Sektionen").Range(rngBereich.Address)
.Font.ColorIndex = 5
.Font.Bold = True
End With
weiter_min:
Diagramm.Points(iZählerDiagramm).Interior.ColorIndex = 5
End If
Next
End Sub
[/b]
Ich hoffe, so hast Du das gemeint? Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 20 von seebaer_1 vom 19.12.2019, 12:58 Options
hallo oliver,
danke dafür, aber ich galube da hast du mich falsch verstanden.
es kommt ein laufzeitfehler, ich glaube das ist der fall da du dich ebi deinem makro auf die werte <100 und >0 beschränkst, oder das machst du doch?
ABER: bei mir kann ein beliebiger wert in den zellen stehen das mit der "0" und der "100" war nur ein beispiel, ich weiß nicht wie groß oder klein die werte in meinen zellen sind?
zu deiner frage aus AW18:
ich meine deinen vorschlag wie ich das mit dem "end if" machen soll, aber ich glaube das führt auch nicht zum ziel.
hab ich deine idee jetzt komplett über den haufen geworfen indem ich dir nun sage dass das alles nur beispielwerte sind?
hast du noch eine idee?
danke
MfG
seebaer