PDA

Vollständige Version anzeigen : Füllstandsanzeige Verlauf


phobos
10.04.2012, 10:14
Hi!

Folgende Problemstellung:
im Anhang seht ihr einen Screenshot eines Tabellenblattes.
Die Zellen lassen sich per Doppelklick füllen oder leeren.

Dies soll Füllstände von 13 Feldern simulieren. Das heist jede Stunde misst jemand die 13 Felder, klickt sich dann durch die Tabelle markiert dabei die Zellen.

Nun benötige ich eine Art Verlauf der letzten 3 Messungen. Um zu sehen wie die Entwicklung der einzelnen Felder ist. Abnehmend, zunehmen oder stagnierend.

Das ganz will ich so einfach wie möglich gestalten.

Hat jemand nee Idee oder einen Ansatz wie man den Verlauf darstellen kann?

EarlFred
10.04.2012, 10:22
*gelöscht*

Hasso
10.04.2012, 12:04
Hallo Mario,

ich habe dir da mal was gebastelt.

Die Werte müsstest du eventuell noch an deine Verhältnisse anpassen.

In die Tabelle1, in der die Messwerte eingegeben werden, habe ich folgende Prozedur eingefügt:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect([messwerte], Target) Is Nothing Then
If Target.Column < 12 Then
Range(Cells(1, Target.Column), Cells(4, Target.Column)).Interior.Color = xlColorIndexNone
Range(Cells(Target.Row, Target.Column), Cells(6, Target.Column)).Interior.Color = RGB(255, 255, 0)
Else
Range(Cells(1, Target.Column), Cells(4, Target.Column)).Interior.Color = xlColorIndexNone
Range(Cells(Target.Row, Target.Column), Cells(4, Target.Column)).Interior.Color = RGB(255, 255, 0)
End If
ActiveSheet.Cells(10, Target.Column).Value = ActiveSheet.Cells(9, Target.Column).Value
ActiveSheet.Cells(9, Target.Column).Value = ActiveSheet.Cells(8, Target.Column).Value
ActiveSheet.Cells(8, Target.Column).Value = Target.Row
End If
Cancel = True
End Sub
Beispielmappe anbei.

phobos
10.04.2012, 12:16
Servus Hasso!

Na das ist doch schon mal ein Ansatz. bzw. eine Lösung;)

Wie könnte man das ganze grafisch darstellen?
Irgendwas farbliches. Damit man nicht erst vergleichen muss, sondern auf einen Blick erkennen wie es sich entwickelt hat.

Mit nem Chart? Oder was könnte man noch machen?

Wobei die Ziffern schon sehr einfach sind. Aber Farben oder Bilder kann man schneller erfassen und verstehen.

Hasso
10.04.2012, 13:23
Hallo Phobos,

Das einfachste wäre ein Diagramm.

aktualisierte Mappe anbei (meine Zahlen sind natürlich nicht realistisch, deshalb die wirren Verläufe).

Wenn du Excel 2010 hast (ich habe hier leider nur 2007), kannst du auch mit Sparklines arbeiten, das sind Minidiagramme, die du unter jedem Messwert einfügen kannst. Findest du in der Menüleiste Einfügen.

Bedingte Formatierung wäre auch eine Möglichkeit. Ich hab noch mal eine aktualisierte Mappe hochgeladen.

phobos
10.04.2012, 13:42
Hmh, Sparklines?? nicht gefunden. Hab 2010er.

Ich passe grad deinen Vorschlag an. mit Gruppierten Säulen sieht es ganz gut aus.
Ich will nicht nach jedem Doppelklick in eine Zelle den Wert haben, sondern erst alles anpassen und dann einen button klicken. Dazu hab ich mir gedacht ich lass mir die eingeräbten Zellen zählen.

Problem:
Meine Zellen aus dem ersten Post sind gruppierte Zellen. Heist also eine "Zelle" besteht aus 12 einzelnen Zellen.

Mit dem Code wollte ich die Zellen die Gelb (6) haben zählen.
sub CB_cklick()
Dim anzahl As Long
Dim Zelle As Range
anzahl = 0
For Each Zelle In Range("E6:BA23")
If Zelle.Interior.ColorIndex = 6 Then
anzahl = anzahl + 1
End If
Next Zelle
end sub

Leider wird hier wesentlich mehr gezählt.
In denm Fall sind es 29.

Anbei mal ein Ausschnitt aus der Tabelle.

Hasso
10.04.2012, 14:11
Hallo Mario,

Meine Zellen aus dem ersten Post sind gruppierte Zellen. Heist also eine "Zelle" besteht aus 12 einzelnen Zellen.

Dann musst du doch nur die Anzahl durch 12 teilen - oder?

Aber warum nimmst du nicht jeweils eine Zelle und machst die entsprechend breit und hoch? Verbundene Zellen führen erfahrungsgemäß immer wieder zu Problemen!

Vielleicht kannst du ja auch mal deine Originaldatei hochladen.

Wo du die Sparklines findest, siehst du auf der beigefügten Grafik.

phobos
10.04.2012, 14:33
SParklines gefunden. Seh ich zum ersten mal. Is eventuell interessant.

Aber warum nimmst du nicht jeweils eine Zelle und machst die entsprechend breit und hoch? Verbundene Zellen führen erfahrungsgemäß immer wieder zu Problemen!

Ja. Ich hab mir mal vor einiger zeit angewöhnt die Zellen genauso breit wie hoch zu machen.
Grund ist das beim "Bau" einer Tabelle immer wieder mal Zellen eingefügt werden. Da ist es von Vorteil wie ich finde.

Aber geteilt durch 12 geht natürlich auch. bzw. hier geteilt durch 3. Nur waren irgendwo noch zellen anders gefärbt vermute ich denn ich han das Blatt mal komplett Farbfrei gemacht und dann nochmal die Zellen eingefärbt und gezählt. Dann gings.

Du hast ja das Zählen so gelöst das jedesmal wenn ich eine Zelle klicke gezählt wird.
Wie stelle ich das an das erst gezählt wird nachdem alle Zellen anklickt und zum Schluss einen Button gedrückt wurde.

Deinen Code
...
ActiveSheet.Cells(10, Target.Column).Value = ActiveSheet.Cells(9, Target.Column).Value
ActiveSheet.Cells(9, Target.Column).Value = ActiveSheet.Cells(8, Target.Column).Value
ActiveSheet.Cells(8, Target.Column).Value = Target.Row
....
muss irgendwie in diesem angepasst werden.
Sub CBspeichern_click()
Dim anzahl As Long
Dim Zelle As Range
anzahl = 0
For Each Zelle In Range("E6:ba23, bc6:bp17")
If Zelle.Interior.ColorIndex = 6 Then
anzahl = anzahl + 1
End If
Next Zelle

ganzes File will ich nicht unbedingt hochladen. Sind schon zuviele Infos drin.

Aber wenn es gar net anders geht mach ich ne abgespeckte version. Muss nur nochmal bescheid sagen.

Hasso
10.04.2012, 15:00
Hallo Mario,

Du hast ja das Zählen so gelöst das jedesmal wenn ich eine Zelle klicke gezählt wird.
Wie stelle ich das an das erst gezählt wird nachdem alle Zellen anklickt und zum Schluss einen Button gedrückt wurde.
Ich hab das Zählen mal auf einen Button gelegt:
Option Explicit

Private Sub CommandButton1_Click()
Dim zelle As Range
ActiveSheet.Range("B9:N9").Copy Destination:=ActiveSheet.Range("B10:N10")
ActiveSheet.Range("B8:N8").Copy Destination:=ActiveSheet.Range("B9:N9")
ActiveSheet.Range("B8:N8").Clear
For Each zelle In [messwerte]
If zelle.Interior.Color = RGB(255, 255, 0) Then
ActiveSheet.Cells(8, zelle.Column).Value = ActiveSheet.Cells(8, zelle.Column).Value + 1
End If
Next
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect([messwerte], Target) Is Nothing Then
If Target.Column < 12 Then
Range(Cells(1, Target.Column), Cells(4, Target.Column)).Interior.Color = xlColorIndexNone
Range(Cells(Target.Row, Target.Column), Cells(6, Target.Column)).Interior.Color = RGB(255, 255, 0)
Else
Range(Cells(1, Target.Column), Cells(4, Target.Column)).Interior.Color = xlColorIndexNone
Range(Cells(Target.Row, Target.Column), Cells(4, Target.Column)).Interior.Color = RGB(255, 255, 0)
End If
End If
Cancel = True
End Sub


Beispielmappe wie üblich anbei.

phobos
10.04.2012, 15:09
bei mir sieht die intersec-Zeile so aus
If Not Intersect(target, Range("E6:ba23, e25:bp25 ,bc6:bp17")) Is Nothing Then

bei dir so
If Not Application.Intersect([messwerte], Target) Is Nothing Then

wo ist da der Unterschied?

Denn in deinem Code taucht nochmal [messwerte] auf. Muss ich irgendwie anpassen

Hasso
10.04.2012, 15:31
Hallo Mario,

mit messwerte habe ich den Bereich benannt, in dem deine Messwertfelder liegen. Klick mal auf den kleinen Pfeil im Namenfeld über A1 und wähle messwerte aus - dann wird der entsprechende Bereich markiert.

Ich arbeite in Excel häufig mit benannten Bereichen, da diese die Formeln bzw. den Code oft einfacher und lesbarer machen.

Bei den letzten/vorletzten/vorvorletzten Messungen hatte ich auch Namen vergeben, diese aber in meinem Code nicht benutzt, da ich das vergessen hatte.

Der Button-Code würde unter Verwendung der Namen dann lauten:
Private Sub CommandButton1_Click()
Dim zelle As Range
[vlm].Copy Destination:=[vvlm] 'kopiert die vorletzte Messung in die vorvorletzte
[lm].Copy Destination:=[vlm] 'kopiert die letzte Messung in die vorletzte
[lm].Clear 'löscht die Werte der letzten Messung
For Each zelle In [messwerte]
If zelle.Interior.Color = RGB(255, 255, 0) Then
ActiveSheet.Cells(8, zelle.Column).Value = ActiveSheet.Cells(8, zelle.Column).Value + 1
End If
Next
End Sub

phobos
10.04.2012, 15:42
Achso!

Ich hab das ja mit Range gemacht.

Dann könnte ich also [messwerte] durch Range ersetzen

Aber die Variante mit den Namen für Bereiche werd ich auch mal testen.

Danke Dir Hasso! Hast mir sehr weitergeholfen.:)

Hasso
10.04.2012, 15:54
Dann könnte ich also [messwerte] durch Range ersetzen
Genau! Die Namen stehen für ein Range, ich finde es nur übersichtlicher, damit zu arbeiten.

Du kannst den Namen auch im VBA-Code vergeben:
Range("H20:K21").Name= "willi"
und dann im weiteren Code, wenn du mit diesem Range arbeitest immer [willi] schreiben, also statt
Range("H20:K21").interior.Color = RGB(255, 255, 0)

[willi].interior.Color = RGB(255, 255, 0)