AW: Zähler und Grafik, zeilenweise Aktualisierung?
28.05.2007 20:36:00
ingUR
Hallo, Born,
geahnt habe ich schon, dass das Ganze wohl auf mehr als nur auf Frage-Beantwortung hinausläuft, als ich in meiner ersten antwort schrieb: «Dein Aufgabenkatalog ist ja reichhaltug [...]. Jedoch geht das Erstellen einer solchen Anwendung, von Null begonnrn, über die Beantwortung von Fragen zu EXCEL m.E. weit hinaus,».
Da wäre es schon vielleicht motivierend zu wissen, wozu Du die Lösung benötigst, denn ohne Eigenleistung, nur "für'n Appel und 'ner Birne", wird wohl eine Lösung nicht zu erstellen sein.
Da wäre es auch schön zu erfahren, wie die bisherigen Hinweise weiterverarbeitet und weiterentwicklet werden konnten, denn nur diese Rückmeldung zeigt doch,worauf man bei weiteren antworten achten muß.
Natürlich könnte man Deine Aufgabe her nehmen und an ihr exemplarische Bereiche aus der Programmierung mit VBA-EXCEL lehren, doch dafür sind Schulungen wohl besser geeignet als ein Forum.
Diese Anmerkungen von meiner Seite nur deswegen, da ich trotz Nachfrage (Anwendung von Namensbereichen, Steuerelement Schiebebalken) bisher noch keine Anwort dazu von Deiner Seite bekommen habe und auch bisher aus Deinen Vorstellungen nicht wirklich ableiten kann, wie Deinen Kenntnisstand nun ist, wie und was erklärt werden sollte.
Die Besonderheit, dass nun Leerzeilen in der Datenreihe zu berücksichtigen sind, ist ein Aspekt, der auch im Vorfeld der Aufgabenstellung zu benennen ist (NB.: ausdrücklich hast Du in Deinem ersten Beitrag darauf verwiesen, dass die Liste der Spalte B ohne Leerzeilen ist - , denn so mancher Ansatz könnte gleich verändert aufgebaut werden. Was nun jedoch wohl ärgelich ist, ist, das Christians komplexen wie genialen Formeln in einem VBA-Programm nicht mehr erforderlich sind, unabhängig davon, dass Dein Wunsch, den Werteblock in Spalte E und F an der aktiven Zelle der Spalte A zu verankern, eine erneute überarbeitet erforderlich werden ließe.
Bezüglich dieser letztgenannten Teilaufgabe und der Positionierung eines Diagramms greifen die Anmerkungen des vorletzten Absatzes. Da Deine Angabe "VBA nein" war, kann Dir wohl heute nur die fertige Lösung etwas bringen; doch es ist wohl leicht einzusehen, dass dieses so nicht ohne Deine Zu- und Weiterarbeit funktioniert.
Hast Du den VBA-Code Dir angeschaut? Kann ich mir die Besprechnung der groben Gliederung des VBA-Editors ersparen, oder sind die verschiedenen Modularten nicht bekannt? Kannst Du Dir die Mappe, Tabellen, Zelle und Bereiche als Objekte der EXCEL-Anwendung vorstellen, die ihrerseits jede für sich über Methoden und/oder Eigenschaften verfügen?
Na, gut, wagen wir eine Start und schauen, was daraus wird (ggf. bitte Kontag über die Seite www.markt-daten.de mit mir aufnehmen, falls sich diese Plattform für die "Schulung" nicht eignet.
Die Einbindung eines Standard-Moduls im Codefenster des VBA-Editors dürfte ohne besondere Probleme gelingen ( vom Tabellenfenster mit [Alt}[F11] im Projekt zur Arbeitsmappe ein Modul einfügen und mit [F7] das Codefenster öffnen, wenn es noch nict geöffnet ist.Dort hinein ist folgender Programmcode einzufügen:
Option Explicit
Sub SequenceCount()
Dim maxR As Long, r As Long, anz As Long, rngC As Range
Dim K1 As String, anzK1 As Long, iK1 As Long
Dim K2 As String, anzK2 As Long, iK2 As Long
Dim sumK As Long, prevK As Long, i As Long
K1 = "Äpfel": iK1 = 1
K2 = "Birnen": iK2 = 1
maxR = Cells(Rows.Count, 1).End(xlUp).Row
r = Cells(1, "H")
Range("E2:G" & maxR).ClearContents
ReDim seqK1(r) As Long, seqK2(r) As Long
For Each rngC In Range("B2:B" & r)
If rngC.Value = K1 Then
If prevK = -1 And seqK2(iK2) > 0 Then iK2 = iK2 + 1
seqK1(iK1) = seqK1(iK1) + 1 'anzK1
sumK = sumK + 1
Cells(rngC.Row, "G") = sumK
prevK = 1
ElseIf rngC.Value = K2 Then
If prevK = 1 And seqK1(iK1) > 0 Then iK1 = iK1 + 1
seqK2(iK2) = seqK2(iK2) + 1
sumK = sumK - 1
Cells(rngC.Row, "G") = sumK
prevK = -1
End If
Next rngC
If seqK1(1) > 0 Then
If seqK1(iK1) = 0 Then iK1 = iK1 - 1
For i = iK1 - 1 To 0 Step -1
Cells(r - i, "E") = seqK1(iK1 - i)
Next i
End If
If seqK2(iK2 - 1) > 0 Then
If seqK2(iK2) = 0 Then iK2 = iK2 - 1
For i = iK2 - 1 To 0 Step -1
Cells(r - i, "F") = seqK2(iK2 - i)
Next i
End If
End Sub
Erneutes Betätigen der Tastenkombination [Alt][F11] führt in die Arbeitsmappe zurück. Hier legst Du bitte eine neue Tabelle an, in der Du nur die Spalten A und B der bisherigen Arbeitstabelle kopierst, so dass im weiteren Verlauf der Übung, Christians Formeln nicht zerstört werden.
Eine weitere Vorarbeit für diesen ersten Bearbeitungsstand der, dass du in die Zelle H1 z.B. den Wert 13 einschreibst. Dieser Wert bezeichet die Zeilennummer, die später als aktive Zeile erkannt werden soll.
Diese so eingerichtete Tabellenblatt ist nun das Aktive und Du kannst mit [Alt][F8] das Makromenü aufrufen. Hier wählst Du den "Makro"-Namen, der dem VBA-Programm gegeben wurde und läßt diese Rountine ausführen.
Das Ergebnis sollte die wie gewollt gefüllten Spalten E2:G13 sein, wobei zu beachten ist, das die Spalten C und D nicht mehr benötigt werden. Je nach zulässigem Eintrag in Zelle H1, werden die Zeilen der Spalte E bis G gefüllt.
Was im einzelnen passiert, kannst Du verfolgen, wenn du beim Aufruf des Makros die "Schritt-"Ausfühung anwählst. Das VBA-Editorfenter öffnet sich und mit der Taste [F8] wird erreicht, dass die momentan gelb unterlegte Zeile abgearbeitet wird. Weitere Möglichkeiten während der Schrittweisen Ausführung findest Du im VBA-Menu "Debuggen". Insbeonder ist noch der Hinweis wichtig, dass Du durch Anfahren einzelner Variablen oder Ausdrücke (Formeln) ein Infofenster erhältst, das den momentanen Wert der Variablen bze. des ausdrucks anzeigt. Aber auch das "Lokal-Fenster" aus dem Menüpunkt ""Ansichten" zeigtden Wertestand der deklarierten Variablen
Es wir Dir schnell möglich sein, die Ergebniswerte nicht in den Spalten E bis G sonder in die Spalten C bis E, da diese ja nicht mehr benötigt werden.
Mit diesem ersten Schriitt bist Du kurz davor, auch den Graphen und die Position eines Diagramms in Abhängikeit von der aktiven Zelle zu gestalten.Jedoch dazu fehlen ein paar grundlegende Dinge, die wir noch nicht besprochen haben, so dass du ohne geeignete Vorlage diesen Versuch noch nicht starten solltest.
Nun hoffe ich das der Test nicht das Forumsformat sprengt und die ganze Arbeit verschwindet.
Gruß,
Uwe