Makro für Registerwechsel
Hallo,
zuerst einen schönen guten Morgen an alle in diesem Forum.
Ich bekomme jede Woche eine Exceldatei mit Prüfstandsergebnissen. Diese Ergebnisse möchte ich in einer Häufigkeitstabelle darstellen.
Habe mir ein Register "Diagramm" angelegt in dem ich mir per aufgezeichnetem Makro die Häufigkeitsverteilung anzeigen lasse sowie den Min, Mittel bzw. den Max-Wert . Bsp. 2.Gang Schub.
Mein Problem besteht nun, wie kann ich mir die Ergebnisse der anderen Wochen anzeigen lassen.
Mein Gedanke geht im Moment dahin, ob man per Makro eine Abfrage bekommt, welche Woche ich dargestellt haben möchte, und dann diese Daten dann in ein Auswerteregister reinkopiert werden.
Diese könnten dann im Register Diagramm dann dargestellt werden.
Nun habe ich zum besseren Verständnis eine abgespeckte Beispiel Datei hochgeladen.
Hier der Link:
http://www.uploadagent.de/files/1171787120/Wochenabfrage.xls
Klasseneinteilung: 50 fest.
wöchentliche Zeileneinträge bis ca. Zeile 2000 ausreichend.
Super wäre auch noch wenn man in dem Häufikeitsdiagramm einen Grenzwert der je nach Gang unterschiedlich sein kann darstellen könnte ohne eine Linie einzeichnen zu müssen.
Für einen Lösungsvorschlag DANKE im voraus.
Reiner
Antwort schreiben
Antwort 1 von Beverly vom 18.02.2019, 10:43 Options
Hi Reiner,
schau dir mal auf meiner HP
Beverly's Excel-Inn , Seite "Diagramme" das Beispiel "Dynamisches Diagramm_2" an, welches eine Formellösung darstellt. Das Beispiel ist zwar für eine Säulendiagramm erstellt, funktionert aber vom Prinzip her genauso auch bei anderen Diagrammtypen.
Auf der Seite "Diagramme m. VBA" findest du außerdem das Beispiel
Datenbereich auslesen und das Beispiel
Datenbereich übernehmen .
Vielleicht kannst du ja eins davon an deine Bedingungen anpassen. Falls du Fragen dazu hast oder sie nicht so richtig auf dein Problem anwendbar sind - frage ruhig zurück.
Für die Darstellung der Linie: mir ist nicht ganz klar, woraus sich der Wert dafür ergibt. Aber vielleicht hilft dir schon dieser Tipp: erstelle eine neue Datenreihe aus 2 Wertepaaren - X-Wert=Grenzwert / Y-wert=0 und X-Wert=Grenzwert / Y-Wert=Maximum deiner Y-Achse. Dieser Reihe ordnest du den Diagrammtyp Punkt(XY) zu.
Bis später,
Karin
Antwort 2 von nobody48 vom 18.02.2019, 11:02 Options
Hallo Karin,
Danke für Deine schnelle Antwort.
Werde mich gleich heute mittag an Deinen Lösungsvorschlag ranmachen.
PS: Auf Deiner HP war ich ich schon oft, ist bei mir in den den Favoriten abgespeichert.
" Einfach Spitze "
Danke und noch einen schönen Sonntag
Reiner
Antwort 3 von nobody48 vom 18.02.2019, 13:38 Options
Hallo Karin,
habe mir Deine Beispieldateien downgeloadet.
Leider bin ich im Moment völlig von der Rolle.
Ich habe keinen Plan,wie ich Deinen Lösungsvorschlag umsetzen könnte.
Aber aufgeben ist so schnell nicht drin.
Gruß aus Osterburken
Reiner
Antwort 4 von nobody48 vom 20.02.2019, 10:13 Options
Hallo an alle,
habe gestern den ganzen Nachmittag probiert und probiert, leider ohne richtigen Erfolg .
Mit dem Lösungsvorschlag von Karin mit dem dynamischen Diagramm bin ich am weitesten gekommen. Nur ein wechsel in eine andere Kalenderwoche bekomme ich einfach nicht hin.
Geht dies überhaupt per Makro ??
Gruß Reiner
Antwort 5 von Beverly vom 20.02.2019, 10:48 Options
Hi Reiner,
es geht (fast) alles mit VBA.
Sub erster_Gang()
Dim chDiagramm As Chart
Dim strTabelle As String
Dim inTabellen As Integer
strTabelle = InputBox("Bitte Tabellename eingeben")
Application.ScreenUpdating = False
For inTabellen = 1 To ThisWorkbook.Sheets.Count
If Worksheets(inTabellen).Name = strTabelle Then Exit For
If inTabellen = ThisWorkbook.Sheets.Count And Sheets(inTabellen).Name <> strTabelle Then
MsgBox "Diese tabelle gibt es nicht"
Exit Sub
End If
Next inTabellen
Set chDiagramm = Worksheets("Diagramm").ChartObjects(1).Chart
With chDiagramm
.SetSourceData Source:=Sheets(strTabelle).Range("Q3:Q52"), PlotBy:= _
xlColumns
End With
' Windows("Schub Wochenabfrage P3 für 217 CAS.xls").Activate
Range("I5:J6").FormulaR1C1 = "='" & strTabelle & "'!R[50]C[8]"
Range("L5:M6").FormulaR1C1 = "='" & strTabelle & "'!R[53]C[5]"
Range("O5:P6").FormulaR1C1 = "='" & strTabelle & "'!R[56]C[2]"
Range("J9:O10").FormulaR1C1 = "='" & strTabelle & "'!R[-8]C[7]"
Application.ScreenUpdating = True
End Sub
Falls sich der Code nicht auf eine andere Arbeitsmappe als die mit dem Code beziehen soll, musst du ThisWorkbook durch ActiveWorkbook ersetzen. Ws die von mir auskommentierte Codezeile machen soll, kann ich nicht testen.
Bis später,
Karin
PS: in VBA kann zu 99% auf Select/Activate verzichtet werden.
Antwort 6 von nobody48 vom 20.02.2019, 12:23 Options
Hallo Karin,
vielen Dank für Deine Hilfe. Dein Makro mit der Tabellenabfrage passt schon. Nur habe ich mir vorgestellt, das nach der Wochenabfrage in dem gewünschten Register die Spalten A bis M und bis Zeile 2000 die Einträge in ein Auswerteregister kopiert werden. Dadurch müsste ich nicht in jede einzelne Kalenderwoche die Formeln hinterlegen.
Bsp.
Ich möchte KW 05-07 anschauen, starte dein Makro,
gebe 05-07 ein, jetzt sollten die Daten aus KW 05-07 in Auswerteregister kopiert werden ( hier sind auch die Formeln hinterlegt) , danach könnten die einzelnen Gänge im Register Diagramm betrachtet werden.
Tausend Dank im voraus
Reiner
Antwort 7 von Beverly vom 20.02.2019, 13:15 Options
Hi Reiner,
also irgendwie verstehe ich nicht, wozu das Ganze gut sein soll - wozu die Werte in eine gesonderte Tabelle kopieren, wenn es ausreicht, den Datenbereich des Diagramms an den Bereich der betreffenden Ausgangstabelle anzupassen? Das ist in meinen Augen "von hinten durch die linke Brust ins rechte Auge".
Das Kopieren lässt sich mit dem Makrorecorder aufzeichnen. Wie du die Tabelle auswählst, dazu kannst du den Teil der Abfrage aus meinem letzten Code nehmen. Den ganzen Teil mit der Zuweisung des Datenbereichs für das Diagramm weglassen und an diese Stelle den Kopierteil.
Bis später,
Karin
Antwort 8 von nobody48 vom 20.02.2019, 16:45 Options
Hallo Karin,
ich verstehe Dich, was ich nicht erwähnt habe ist, daß ich mir mit per HTML eine Qualitätsplattform gebastelt habe. In dieser Plattform wollte ich die Häufigkeitsverteilungen im Register Diagramm Wochenweise durchnavigieren.
Werde versuchen mit dem Makrorecorder weiterzukommen.
Für Deine Bemühungen trotzdem Danke
Reiner
Antwort 9 von Beverly vom 20.02.2019, 17:00 Options
Hi Reiner,
weshalb muss man das Gesamtproblem Stückchenweise offenbaren? Dann hätten wir uns den gesamten Thread sparen können.
Wenn dein Datenbereich immer in A1 beginnt, dann kannst du mit diesem Code den benutzen Bereich der aktiven Tabelle kopieren
ActiveSheet.UsedRange.Copy Worksheets("Auswerteregister").Range("A1")
Bis später,
Karin
Antwort 10 von Nobody48 vom 20.02.2019, 18:07 Options
Hallo Karin,
bitte um Entschuldigung !!
Ich habe mich aber schon seit mehreren Tagen, nach Arbeitsende in diese Datei verbohrt. Da ich nur Makros mit dem Recorder erstellen kann, war mir nicht bewußt, daß mein Problem einfacher zu lösen ist. Weiter habe ich nicht daran gedacht die HTML Plattform zu erwähnen.
Als Excel Oberflächenanwender war ich schon oft auf Deiner HP und auch auf den Links-Seiten.
Hier versuche ich mir immer wieder neue Kentnisse anzueignen. Was Ihr alles an Lösungen parat habt ist absolute Spitze.
Ich sitze manchmal Tage an für Euch einfachsten Dateien, nur um mir bei der täglichen Arbeit einbischen Erleichterung zu schaffen. Viele Aktionen führe ich manuell aus.
Sorry !!
Reiner
Antwort 11 von Beverly vom 20.02.2019, 20:23 Options
Hi Reiner,
ist schon OK - beim nächsten Mal weißt du Bescheid. Je genauer die Beschreibung des Problems, desto besser und einfacher für die Helfer.
Was die Lösungen betrifft, die wir "parat" haben: im Lauf der Zeit sammeln sich viele Beispiele an, die man immer wieder verwenden und anpassen kann, aber sehr häufig ist es auch so, dass man für den gegebenen Fall etwas völlig Neues machen muss. Die meisten dieser Codes sind in mühevoller Kleinarbeit entstanden und manchmal könnte man vor Verzweiflung in den Schreibtisch beißen, wenn etwas nicht so funktioniert wie man sich das denkt, obwohl es doch logischerweise eigentlich funktionieren müsste... Du siehst also, auch den Fortgeschritten (ich zähle mich gewiss nicht zu den Profis) fällt nicht alles einfach in den Schoß.
Also nichts für ungut.. Nur wer nichts tut kann auch keine Fehler machen. ;-)))
Bis später,
Karin
Antwort 12 von nobody48 vom 25.02.2019, 18:34 Options
Hallo an alle in diesem Forum,
leider komme ich mit den Lösungsvorschlägen von Karin alias "Beverly" nicht richtig weiter. (liegt aber an mir)
Habe hier noch einmal eine leicht abgeänderte Datei hochgeladen. Wie oben schon beschrieben möchte ich aus einer HTML Plattform diese Excel Datei steuern.
Was mir fehlt ist das kopieren der einzelnen Wochen ins Register Auswertung per Makro.
Ich glaube beim anschauen der Demo Datei ist einiges selbst sprechend.
Link: http://www.netupload.de/detail.php?img=ad521de24b2e528e01053087a8201b77.xls
Für Eure Hilfe Danke im voraus
Reiner
Antwort 13 von Beverly vom 25.02.2019, 19:19 Options
Hi Reiner,
Sub kopieren()
ActiveSheet.Range("A2:M14").Copy Worksheets("Auswertung").Range("A2")
End Sub
Bis später,
Karin
Antwort 14 von nobody48 vom 25.02.2019, 20:13 Options
Hallo Karin,
habe deinen Code kopiert sieht im Moment so aus:
Sub erster_Gang()
Dim chDiagramm As Chart
Dim strTabelle As String
Dim inTabellen As Integer
strTabelle = InputBox("Bitte Tabellename eingeben")
Application.ScreenUpdating = False
For inTabellen = 1 To ThisWorkbook.Sheets.Count
If Worksheets(inTabellen).Name = strTabelle Then Exit For
If inTabellen = ThisWorkbook.Sheets.Count And Sheets(inTabellen).Name <> strTabelle Then
MsgBox "Diese tabelle gibt es nicht"
Exit Sub
End If
ActiveSheet.Range("A2:M14").Copy Worksheets("Auswertung").Range("A2")
End Sub.
Nun bekomme ich Fehlermeldung !
Fehler beim kompilieren usw.
Ich habe versucht aus Deinen oben genannten Vorschlägen Makro hinzubekommen, bin leider nicht in der Lage
Was mache ich falsch????
Gruß Reiner
Antwort 15 von Beverly vom 25.02.2019, 21:31 Options
Hi Reiner,
ganz einfach: du hast nur einen Teil des Codes kopiert - es fehlt der Abschluss der For...Next Schleife.
Versuche es mit diesem Code
Sub erster_Gang()
Dim chDiagramm As Chart
Dim strTabelle As String
Dim inTabellen As Integer
strTabelle = InputBox("Bitte Tabellename eingeben")
Application.ScreenUpdating = False
For inTabellen = 1 To ThisWorkbook.Sheets.Count
If Worksheets(inTabellen).Name = strTabelle Then Exit For
If inTabellen = ThisWorkbook.Sheets.Count And Sheets(inTabellen).Name <> strTabelle Then
MsgBox "Diese Tabelle gibt es nicht"
Exit Sub
End If
Next inTabellen
Worksheets(strTabelle).Range("A2:M14").Copy Worksheets("Auswertung").Range("A2")
Set chDiagramm = Worksheets("Diagramm").ChartObjects(1).Chart
chDiagramm.SetSourceData Source:=Sheets("Auswertung").Range("R3:R52"), PlotBy:=xlColumns
Range("I5:J6").FormulaR1C1 = "='" & strTabelle & "'!R[50]C[8]"
Range("L5:M6").FormulaR1C1 = "='" & strTabelle & "'!R[53]C[5]"
Range("O5:P6").FormulaR1C1 = "='" & strTabelle & "'!R[56]C[2]"
Range("J9:O10").FormulaR1C1 = "='" & strTabelle & "'!R[-8]C[7]"
Application.ScreenUpdating = True
End Sub
Bis später,
Karin
Antwort 16 von nobody48 vom 26.02.2019, 06:49 Options
Hallo Karin,
bin gerade am testen, sieht super aus.
Tausend Dank
Reiner