Autor
|
Thema: Diagrammzuordnung in Masse ändern (1621 mal gelesen)
|
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 02. Nov. 2009 15:50 <-- editieren / zitieren --> Unities abgeben:
Bekomme gerade die Pimpanella aber von vorn. Es liegen vor: - auf einem Blatt 4 Kombidiagramme (Balken, Linien) mit jeweils 3 Zuordnungen zu Wertpaarreihen - auf einem anderen Blatt Tabelle mit den dazugehörigen Wertpaarreihen Solche aufwändigen, aber eigentlich simplen Diagrammblätter müssen in Masse (> 20 mal) an entsprechend andere vorhandene Datentabellen angeknüpft werden. Ich benötige eigentlich ein Massenänderungswerkzeug so wie #Bearbeiten#Ersetzen, dass die Zuordnung aller Balken/Linien zu Blatt "Name A" auf Blatt "Name B" ändert. Leider finde ich ein solches Tool nirgens. #Bearbeiten#Ersetzen klappt nämlich nur im Zellbereich, nicht aber für Diagramme. Händisch ist die Neuzuordnung aller Balken/Linien per #Diagramm#Datenquelle eine Arbeit für jemanden, der Vater und Mutter auf dem Gewissen hat - was bei mir bald der Fall sein wird Bin dankbar für jeden Rat! ------------------ Seit Pro/E Version 1 dabei, auwei... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stefga Mitglied
Beiträge: 138 Registriert: 17.05.2007 Excel97
|
erstellt am: 02. Nov. 2009 21:11 <-- editieren / zitieren --> Unities abgeben: Nur für carsten-3m
Hallo Carsten, verstehe ich richtig: In einer Excelmappe befindet sich auf Tabellenblatt1 eine Datentabelle und auf Tabellenblatt2 4 dazugehörende Diagramme. Auf Tabellenblatt3 bis <20 befinden sich wieder Datentabellen (gleicher "Größe"), zu denen Du jeweils auch die 4 Diagramme benötigst? Das Tabellenblatt2 nun <20mal zu kopieren und die Datentabelle jeweils neu an die Diagramme dranzuhängen ist Dir zu aufwendig, soweit korrekt? Wenn man nun Tabellenblatt 1 und 2 in eine neue Mappe kopiert und diese als Vorlage nimmt, d.h. mittels copy/paste den Inhalt der Datentabellen von Blatt 3 bis <20 in die Vorlage kopiert und jede Mappe unter anderem Namen speichert. Dann hättest Du <20 Mappen mit je einer Datentabelle und den dazugehörenden Diagrammen. Wenn alles zwingend in einer Mappe sein soll einfach die 2 Blätter aus jeder der <20 Mappen mittels verschieben/kopieren wieder in einer Mappe zusammenstellen? Hmm, wenns wirklich so einfach wäre, wärst du wohl längst selbst drauf gekommen. Aber ich schicke es trotzdem mal ab...
------------------ Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 03. Nov. 2009 07:32 <-- editieren / zitieren --> Unities abgeben: Nur für carsten-3m
|
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 03. Nov. 2009 09:05 <-- editieren / zitieren --> Unities abgeben: Nur für carsten-3m
Hi Carsten, schreibe die Namen aller Tabellenblätter (aus denen die Werte entnommen werden sollen) in Spalte A und die Diagrammnamen in Spalte B. Dann kannst du mit dem folgenden Code aus dem 1. Diagrammblatt alle Diagrammblätter mit den entsprechenden Tabellenzuweisungen erstellen: Code: Sub DiaKopieren() Dim strTabelle As String Dim serReihe As Object Dim inZeile As Integer For inZeile = 1 To 20 Charts(1).Copy after:=Charts(Charts.Count) With Charts(Charts.Count) .Name = Worksheets("Tabelle1").Cells(inZeile, 2) For Each serReihe In .SeriesCollection strTabelle = Left(serReihe.Formula, InStr(serReihe.Formula, "!")) strTabelle = Mid(strTabelle, InStrRev(strTabelle, ",") + 1) serReihe.Formula = Application.Substitute(serReihe.Formula, strTabelle, Worksheets("Tabelle1").Cells(inZeile, 1) & "!") Next serReihe End With Next inZeile End Sub
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 03. Nov. 2009 09:17 <-- editieren / zitieren --> Unities abgeben: Nur für carsten-3m
sorry, hatte den Beitrag falsch interpretiert - war von einem "richtigen" Diagrammblatt ausgegangen. ------------------ Bis später, Karin [Diese Nachricht wurde von Beverly am 03. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 03. Nov. 2009 09:40 <-- editieren / zitieren --> Unities abgeben:
Dank Euch allen für die Tipps! @Stefan: Standardansatz, klar, kenne ich auch. Leider aufgrund von recht komplexen (und nicht von mir erstellten) Datentabellen hier nicht möglich. @Frederik/Karin: Ich schätze die unendlichen Möglichkeiten von VBA. Leider bin ich vergleichsweise blass, was die Nutzung angeht. Mal sehen, was ich aus Euren Tipps basteln kann. Stimmt, es sind 4 Diagramme dargestellt auf einem normalen Tabellenblatt. Ich kanns ruhig verraten: Es geht um Darstellung von Kennzahlen für die gesamte Firma. Sprich, sehr unterschiedliche Datenquellen, die ich allesamt nicht groß verändern darf, dafür aber einheitliche "durchlayoutete" Darstellung im ganzen Haus. Und, da die Sache recht neu ist, gibt es immer Optimierungsschleifen. Immer mal wird mein Aufwand der Ablage rund anvertraut und ich darf von neuem starten. Da sucht man gern nach Automatismen ------------------ Seit Pro/E Version 1 dabei, auwei... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 03. Nov. 2009 09:44 <-- editieren / zitieren --> Unities abgeben: Nur für carsten-3m
Hi Carsten, eine Möglichkeit: schreibe die Tabellennamen mit den Datenbezügen in ein extra Tabellenblatt Spalte A (im Beispiel "Tabellen", Blatt kannst du hinterher wieder löschen). Dann lässt sich das Tabellenblatt mit den Diagrammen (im Beispiel "Tabelle1") mit dem folgenden Code kopieren, wobei die Bezüge der kopierten Diagramme an die aufgelisteten Tabellennamen angepasst werden. Code: Sub DiagrammeKopieren() Dim strTabelle As String Dim strAenderung As String Dim serReihe As Object Dim inDiagramm As Integer Dim inZeile As Integer For inZeile = 1 To 20 Worksheets("Tabelle1").Copy after:=Worksheets(Worksheets.Count) For inDiagramm = 1 To ActiveSheet.ChartObjects.Count With ActiveSheet.ChartObjects(inDiagramm).Chart For Each serReihe In .SeriesCollection strTabelle = Left(serReihe.Formula, InStr(serReihe.Formula, "!")) strTabelle = Mid(strTabelle, InStrRev(strTabelle, ",") + 1) serReihe.Formula = Application.Substitute(serReihe.Formula, strTabelle, Worksheets("Tabellen").Cells(inZeile, 1) & "!") Next serReihe End With Next inDiagramm Next inZeile End Sub
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 03. Nov. 2009 11:16 <-- editieren / zitieren --> Unities abgeben:
Danke Karin, super Ansatz! Klappt leider noch nicht wie gewünscht, aber ich denke, das braucht nur noch einen ganz kleinen Schubbser. Momentan passiert folgendes: In jedem Diagramm der kopierten Tabelle(n) entsteht pro Datenreihe je ein Textfeld, dessen Inhalt den Verknüpfungsstring enthält. Grundsätzlich begreife ich den Ansatz, aber dessen Bausteine sind mir teils völlig fremd. Was machen eigentlich die einzelnen Elemente? Ich denke mal laut: - Variablendeklaration - Schleife durch Datenblätter - Diagrammvorlage kopieren und einfügen hinter allem anderen - Schleife durch Diagramme (das eingefügte Blatt ist automatisch ActiveSheet?) - with-Konstrukt (pro Diagramm mach das was nun folgt) - Schleife für jedes "Ding" (serReihe), hmm, wahrscheinlich für jede grafische Darstellung einer Datenreihe - dann wird der neue Verknüpfungsstring gebaut und - per Application.Substitute irgendwie ausgetauscht Ich sehe, dass beim Bauen des Verknüpfungsstrings bestimmte Inhalte ("!" und ",") gesucht werden, richtig? Die sind im Blatt "Tabellen" derzeit nicht zu finden, lediglich simple Blattnamen, wie in Deiner Anleitung beschrieben. Möglicherweise muss ich hier was anderes eingeben. Ich werd mal erst selbst dran schrauben. Nochmals danke! ------------------ Seit Pro/E Version 1 dabei, auwei... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 03. Nov. 2009 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für carsten-3m
Hi Carsten, vom Prinzip her hast du den Code richtig interpretiert. Hier der Code noch einmal mit den betreffenden Kommentaren (die eine Variable habe ich weggelassen, wird nicht benötigt): Code: Sub DiagrammeKopieren() Dim strTabelle As String Dim serReihe As Object Dim inDiagramm As Integer Dim inZeile As Integer ' Schlife über die aufgelisteten Zeilen For inZeile = 1 To 3 ' Tabellenblatt mit den Ausgansdiagrmamen kopieren Worksheets("Tabelle1").Copy after:=Worksheets(Worksheets.Count) ' Schleife über alle Diagrammobjekte im kopierten (und damit aktiven) Tabellenblatt For inDiagramm = 1 To ActiveSheet.ChartObjects.Count ' im Diagramm des laufenden Diagrammobjektes With ActiveSheet.ChartObjects(inDiagramm).Chart ' Schleife über alle Datenreihen For Each serReihe In .SeriesCollection ' linken Teil der Datenreihenformel auf Variable schreiben strTabelle = Left(serReihe.Formula, InStr(serReihe.Formula, "!") - 1) ' daraus Teil nach dem letzten Komma entnehmen, entspricht Name des aktiven Tabellenblattes strTabelle = Mid(strTabelle, InStrRev(strTabelle, ",") + 1) ' Datenreihenformel zuweisen und Name des aktiven Tabellenblattes durch den Namen aus laufender Zeile ersetzen serReihe.Formula = Application.Substitute(serReihe.Formula, strTabelle, Worksheets("Tabellen").Cells(inZeile, 1)) Next serReihe End With Next inDiagramm Next inZeile End Sub
Ich habe mal die Beispielmappe, die ich für das Erstellen des Codes verwendet hab, angehängt - bei mir tritt der von dir beschrieben Fehler nicht auf. Übrigens: du kannst auch die beiden Zeilen mit strTabelle = ... weglassen, wenn der Name des Tabellenblattes, auf das sich die Diagramme ursprünglich beziehen, fest ist. Dann benötigst du nur diese eine Zeile in der Schleife: Code: serReihe.Formula = Application.Substitute(serReihe.Formula, "Ursprungsdaten", Worksheets("Tabellen").Cells(inZeile, 1))
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten-3m Mitglied Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)
Beiträge: 950 Registriert: 08.05.2007 Excel 2010
|
erstellt am: 03. Nov. 2009 15:17 <-- editieren / zitieren --> Unities abgeben:
Danke erneut für Deine große Mühe Karin. Deine Beispiel funktioniert tatdellos, sehr schön anzusehen. Interessanterweise war das bei meinen Daten zunächst nicht der Fall. Laufzeitfehler 1004 (Copy-Methode fehlgeschlagen) kam zunächst. Nach ein wenig ahnungslosem Suchen - Excel schien schlichtweg kein neues Blatt anfügen zu wollen - habe ich den Term
Code: after:=Worksheets(Worksheets.Count)durch after:=Worksheets("Tabellen")
ersetzt. Frag mich wieso, das Kopieren ging dann. Konnte Excel nicht bis zum letzten Blatt zählen? Rätsel über Rätsel...Leider immer noch mit besagten Textfeldern und nicht etwa korrekt zugewiesenen Diagrammlinien (und zwar erst ab dem zweiten kopierten Diagrammblatt). Ich habe dann Deine abschließend genannte Vereinfachung vorgenommen und die ganze Geschichte scheint nun zu funktionieren. Scheint desterwegen, weil ich noch etwas Arbeit leisten muss, bis die Datentabellen diagrammfähig sind. , fühl Dich mit zahllosen Ü berschüttet edit: Die Sache funktioniert und spart ordentlich Zeit. Super! ------------------ Seit Pro/E Version 1 dabei, auwei... [Diese Nachricht wurde von carsten-3m am 03. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|