Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Diagrammzuordnung in Masse ändern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Diagrammzuordnung in Masse ändern (1621 mal gelesen)
carsten-3m
Mitglied
Dipl.-Ing. Mbau (Produktmanagement, Patent- und Normwesen)


Sehen Sie sich das Profil von carsten-3m an!   Senden Sie eine Private Message an carsten-3m  Schreiben Sie einen Gästebucheintrag für carsten-3m

Beiträge: 950
Registriert: 08.05.2007

Excel 2010

erstellt am: 02. Nov. 2009 15:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 02. Nov. 2009 21:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für carsten-3m 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für carsten-3m 10 Unities + Antwort hilfreich

Guten Morgen,

Möglichkeit 1: Auf Beverly warten ;-).

Möglichkeit 2: Macro-Recorder. Ein Häppchen

Code:
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SetSourceData source:=Sheets("BLATT_B").Range("B329:E340")
zeichnet xls07 auf. Verhältnis Aufwand / Nutzen?

Möglichkeit 3: Google - und ein vielversprechender Treffer

------------------
DIN1055.de  |  Lastannahmen für Anwender NEU: Foren zu DIN 1055

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 03. Nov. 2009 09:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für carsten-3m 10 Unities + Antwort hilfreich

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)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 03. Nov. 2009 09:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für carsten-3m 10 Unities + Antwort hilfreich

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)


Sehen Sie sich das Profil von carsten-3m an!   Senden Sie eine Private Message an carsten-3m  Schreiben Sie einen Gästebucheintrag für carsten-3m

Beiträge: 950
Registriert: 08.05.2007

Excel 2010

erstellt am: 03. Nov. 2009 09:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 03. Nov. 2009 09:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für carsten-3m 10 Unities + Antwort hilfreich

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)


Sehen Sie sich das Profil von carsten-3m an!   Senden Sie eine Private Message an carsten-3m  Schreiben Sie einen Gästebucheintrag für carsten-3m

Beiträge: 950
Registriert: 08.05.2007

Excel 2010

erstellt am: 03. Nov. 2009 11:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 03. Nov. 2009 13:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für carsten-3m 10 Unities + Antwort hilfreich


diagramme_kopieren.zip

 
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)


Sehen Sie sich das Profil von carsten-3m an!   Senden Sie eine Private Message an carsten-3m  Schreiben Sie einen Gästebucheintrag für carsten-3m

Beiträge: 950
Registriert: 08.05.2007

Excel 2010

erstellt am: 03. Nov. 2009 15:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz