Diagramme kopieren
#1
Hallo, 

ich möchte in Excel 2010 gerne 50-60 Tabellen in Diagrammen auswerten. 
Die Tabellen sind alle auf demselben Arbeitsblatt (Tabelle 1).

Die Daten sind relativ gesehen alle am gleichen Platz, d.h., wenn es um eine Formel ginge, könnte ich diese einfach kopieren.

Geht so etwas auch mit den Diagrammen oder muss ich jede einzelne Kopie tatsächlich anpassen? 

Ich habe auch schon einen Versuch mit einem Makro unternommen, das hat aber nicht geklappt, obwohl ich "relative Aufzeichnung" gewählt hatte.

Vielen Dank im Voraus und viele Grüße, 

Rolf
Top
#2
Hallo Rolf,

lade bitte eine Beispieldatei mit 2 Tabellen und einem Chart hoch. Die Struktur der Daten muss mit dem Original übereinstimmen, vertrauliche Inhalte sollen mit "xyz" oder ähnlichem ersetzt sein.

mfg
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • rob70
Top
#3
Hallo Fennek, danke für das Interesse. Anbei die besagte Datei, beschränkt auf zwei Beispiele. Ein nutzloser Makroversuch ist auch noch mit gespeichert. Ich hoffe, das ist kein Problem, sonst speichere ich die Datei noch einmal ohne.

VG, Rolf


Angehängte Dateien
.xlsm   Beispiel.xlsm (Größe: 59,26 KB / Downloads: 8)
Top
#4
Hallo Rolf,

zuerst ein paar Verständnisfragen:

- in Tabelle 1: wo stehen die Zahlen für  MfT?
- es gibt "nur" 2 Tabellen mit vielen Blöcken untereinander?

mfg

(vor morgen werde ich -vermutlich- keine Zeit finden)
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • rob70
Top
#5
Hallo Fennek, 

die Zahlen für MTF (danke, ich werde den Fehler meinerseits "MFT" ausbessern) stehen in den Spalten 2, 4, 6... der Tabelle. Als Hintergrundinformation: Es geht um die Beurteilung der Güte von Fotoobjektiven: Bei jeder Blende 1.4 - 2 - 2.8 - ... werden zwei Messungen in verschiedenen Bereichen des Kamera-Sensors gemacht. In der 1. Spalte stehen die Messwerte zur Blende f/1.4 für die Auflösungsmessung, in der zweiten Spalte auch noch zur Blende f/1.4 die der MTF50 Messung. Danach geht es entsprechend weiter. 
Der Grund, warum ich die Tabelle so "ungeschickt" vorgehe, ist dass ich die ganzen Messungen von Hand eintragen muss und zwar aus einer Auswertung sowohl für Spalte 1 als auch 2. 
Für das Diagramm ist's unpraktisch und würde sich durch das Kopieren in eine andere Tabelle natürlich verbessern lassen. Wenn allerdings das Ganze durch ein Makro auch klappt wäre das wieder überflüssig.
Ich empfinde es übrigens als ziemlichen Mangel an Excel, dass man die Diagramme nicht einfach auf neue Tabellen übertragen kann (so ähnlich wie z.B. Formatierungen) oder dass ich die Tabelle samt Diagramm kopieren kann und dann die Bezüge gleich für die Kopie passen (oder habe ich das bisher einfach alles übersehen bzw. nicht gefunden?).

Weiterhin danke für die Hilfe und viele Grüße, 

Rolf
Top
#6
Hallo,

wenn ich ein gutes Gedächtnis hätte, wäre ich weitergegangen. Ich konnte mich erinnern, so etwas schon einmal gemacht zu haben, aber nicht wie kompliziert das ist.

Der Ansatz:

Einen Beispiel-Chart mit allen Formatierungen zu erstellen, dieses Muster zu kopieren und den Daten-Range zu wechseln.

Hier ein erster Code:


Code:
Const Vorlage = "Chart 41"

Sub T1()
Dim Cht As ChartObject
Dim Vorlage_Chart As ChartObject
Dim WS As Worksheet: Set WS = ActiveSheet
Dim Ser As Series
'Dim Poi As Point
Dim Ar(6, 2) As Variant

WS.ChartObjects(Vorlage).Copy
WS.Paste
Set Vorlage_Chart = WS.ChartObjects(WS.ChartObjects.Count)

Set Cht = WS.ChartObjects("Chart 8") '<<<< anpassen >>>>>>>>>>

With Cht.Chart
For Each Ser In .SeriesCollection
   s = s + 1
   Ar(s, 1) = Ser.Name
   Ar(s, 2) = Replace(Ser.Formula, "$4", "$5") '<<<< anpassen >>>>>>>>>>>
Next Ser
For i = 1 To .SeriesCollection.Count
   .SeriesCollection(i).Formula = Ar(i, 2)
Next i
End With
End Sub


Das Auslesen der relevanten Zeilen ist eher einfach, das Ersetzen dürfte noch etwas Arbeit sein.

Den Code vom der Beispiel-Datei ins Original zu übertragen, ist nicht trivial, da xl die Chart-Nr. hochzählt.

mfg

(das doppelte Auslesen mit "For Each" und "for i = 1 to" war leider nicht zu umgehen)

(mal sehen, ob ich morgen noch Lust für dieses Thema habe)
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • rob70
Top
#7
Hi, 

will auch meinen Senf dazu geben.

Vor Jahren hab Powerpoints erstellen dürfen mit über 100 Seiten und so Diagrammen monatlich.
Jeder kann sich die Arbeit vorstellen.

Ich hatte in Excel nur ein Diagramm, dessen Daten ich aus 60 Tabellenblättern per Indirekt ausgelsen habe
Von diesem Diagramm habe ich ein Bild gemacht und in Powerpoint reingeschoben. Dann die Quelle verändert, nächstes Bild.
So haben alle Diagramme die genau gleich Größe, nur die Werte ändern sich.
Hier sieht es ähnlich aus.
Und die Arbeit ist nur einmal von Nöten zum formatieren, danach kann man sich komplett auf die Daten konzentrieren.
 
Excel kann das seit 2007 mit 'als Bild kopieren', davor in früheren Excelversionen musstest du in den Tiefen nach dem Kamerasymbol suchen bzw es gleich mit vba machen
Der Vorteil vom Bild in Powerpoint is eine kleinere Dateigröße, als wenn du die Exceldatei 100x einbindest
Blush
und es manipuliert auch niemand dran rum an den werten.

Nur mal so als Idee
Die Beispiel.xlsm ist nicht wirklich übersichtlich zum anguggen bzw. anderen Leuten zu zeigen^^

@Fennek
Zitat:Den Code vom der Beispiel-Datei ins Original zu übertragen, ist nicht trivial, da xl die Chart-Nr. hochzählt.
Excel zählt die Shape-Nummer hoch.
Alles was nicht in die Tabellen passt, Pfeile, Bilder, Textboxen oder Diagramme sind ein shape und können mit VBA von einer Form in die andere gebracht werden (teilweise) und jedes dieser Shapes bekommt eine ID, die sich in der Reihenfolge des Anlegens hochzählt.

Mit VBA lassen sich diese Shapes auch ausblenden, dann sind sie nicht sichtbar, aber immer noch vorhanden. Keine Ahnung, zu was das gut sein soll. Aber, je mehr shapes in einer Datei enthalten sind, desto langsamer wird die Datei zum bearbeiten. Auch da weiß ich den Grund nicht, aber es ist wichtig zu wissen…

Darum rate ich ab von der Diagrammkopiererei
[-] Folgende(r) 1 Nutzer sagt Danke an Wastl für diesen Beitrag:
  • rob70
Top
#8
(18.12.2017, 19:29)Fennek schrieb: Hallo,

wenn ich ein gutes Gedächtnis hätte, wäre ich weitergegangen. Ich konnte mich erinnern, so etwas schon einmal gemacht zu haben, aber nicht wie kompliziert das ist.

Der Ansatz:

Einen Beispiel-Chart mit allen Formatierungen zu erstellen, dieses Muster zu kopieren und den Daten-Range zu wechseln.

Hier ein erster Code:


Code:
Const Vorlage = "Chart 41"

Sub T1()
Dim Cht As ChartObject
Dim Vorlage_Chart As ChartObject
Dim WS As Worksheet: Set WS = ActiveSheet
Dim Ser As Series
'Dim Poi As Point
Dim Ar(6, 2) As Variant

WS.ChartObjects(Vorlage).Copy
WS.Paste
Set Vorlage_Chart = WS.ChartObjects(WS.ChartObjects.Count)

Set Cht = WS.ChartObjects("Chart 8") '<<<< anpassen >>>>>>>>>>

With Cht.Chart
For Each Ser In .SeriesCollection
   s = s + 1
   Ar(s, 1) = Ser.Name
   Ar(s, 2) = Replace(Ser.Formula, "$4", "$5") '<<<< anpassen >>>>>>>>>>>
Next Ser
For i = 1 To .SeriesCollection.Count
   .SeriesCollection(i).Formula = Ar(i, 2)
Next i
End With
End Sub


Das Auslesen der relevanten Zeilen ist eher einfach, das Ersetzen dürfte noch etwas Arbeit sein.

Den Code vom der Beispiel-Datei ins Original zu übertragen, ist nicht trivial, da xl die Chart-Nr. hochzählt.

mfg

(das doppelte Auslesen mit "For Each" und "for i = 1 to" war leider nicht zu umgehen)

(mal sehen, ob ich morgen noch Lust für dieses Thema habe)

Danke schon einmal für das viele Hirnschmalz, was hier hinein geflossen ist. Aber auch, wenn ich den Code weitgehend lesen kann, fehlt mir doch die Übung als dass ich glaube, ihn zum Laufen zu bringen. Wenn ich es richtig verstehe, ist daran noch mehr zu tun (außer das Musterchart auszuwählen).

Mir würde im Prinzip auch schon viel weniger reichen:

Es würde mir genügen, wenn ich z.B. die Zelle mit dem Titel (der einzelnen kleinen, zu einem Objektiv gehörigen Tabelle, z.B. "Auto Revuenon 1.4/50 MC") aktiviere und dann das Makro für die Anpassung von einem einzelnen Diagramm starte. Von dort aus sind immer alle relativen Bezüge gleich und damit müssten doch eigentlich die Zellen schnell ausgelesen und entsprechend dem Diagramm untergeschoben werden können, oder?

Dabei wäre es mir auch egal, ob ich vorher das Diagramm schon kopiert habe und das Makro nur noch darauf zugreift oder ob das Makro auch das Diagramm noch kopiert. 

Es scheint mir für den Zweck fast zu aufwendig, Code zu bekommen, der gleich die ganze Tabelle in einem Rutsch richtig formatiert (nehme ich aber natürlich auch gerne).

Vielleicht geht's so ja besser.

VG, Rolf
Top
#9
(18.12.2017, 19:44)Wastl schrieb: [...] Von diesem Diagramm habe ich ein Bild gemacht und in Powerpoint reingeschoben. Dann die Quelle verändert, nächstes Bild.
So haben alle Diagramme die genau gleich Größe, nur die Werte ändern sich.
Hier sieht es ähnlich aus.
Und die Arbeit ist nur einmal von Nöten zum formatieren, danach kann man sich komplett auf die Daten konzentrieren.
 
Excel kann das seit 2007 mit 'als Bild kopieren', davor in früheren Excelversionen musstest du in den Tiefen nach dem Kamerasymbol suchen bzw es gleich mit vba machen
Der Vorteil vom Bild in Powerpoint is eine kleinere Dateigröße, als wenn du die Exceldatei 100x einbindest
Blush
und es manipuliert auch niemand dran rum an den werten.

Nur mal so als Idee
Die Beispiel.xlsm ist nicht wirklich übersichtlich zum anguggen bzw. anderen Leuten zu zeigen^^
Die Ergebnisse werde ich in eine Webseite einbinden. Vermutlich arbeite ich dann einfach mit Screenshots. Trotzdem möchte ich auch später noch in der Lage sein, die Tabelle zu ergänzen oder evtl. anders zu formatieren. 

Wenn die Idee von Fennek nichts wird, denke ich drüber nach. Ich habe das schon richtig verstanden, dass ich sozusagen für jede Tabelle eine eigene Datei machen, in der ich die Daten entsprechend ändere. Später muss ich dann in PowerPoint nur eine neue Quell-Datei angeben und schon wird's entsprechend angepasst und dann neu gespeichert, oder?

VG, Rolf
Top
#10
Hallo,

hier ist der Code der in Tabelle 1 beliebig viele Charts anlegt.


Code:
Const Vorlage = "Chart 41"
Sub alle_Blocks()
Dim Ar As Range
For Each Ar In Columns(1).SpecialCells(2).Areas
   If Ar.Cells(1).Row > 10 Then
       T1 (Ar.Cells(1).Row)
   End If
Next Ar
End Sub

Sub T1(ByVal r As Integer)
Dim Cht As ChartObject
Dim Vorlage_Chart As ChartObject
Dim WS As Worksheet: Set WS = ActiveSheet
Dim Ser As Series
Dim Ar(6, 2) As Variant

WS.ChartObjects(Vorlage).Copy
WS.Paste

Set Cht = WS.ChartObjects(WS.ChartObjects.Count)
Cht.Activate
With ActiveChart
  .ChartTitle.Text = Cells(r, 1)
End With
With Cht
   .Top = Cells(r, "T").Top
   .Left = Cells(r, "T").Left
End With
With Cht.Chart
For Each Ser In .SeriesCollection
   s = s + 1
   Ar(s, 1) = Ser.Name
   If InStr(1, Ser.Formula, "Center") > 0 Then Ar(s, 2) = Replace(Ser.Formula, "$4", "$" & r + 1)
   If InStr(1, Ser.Formula, "Thirds") > 0 Then Ar(s, 2) = Replace(Ser.Formula, "$4", "$" & r + 6)
   If InStr(1, Ser.Formula, "Corner") > 0 Then Ar(s, 2) = Replace(Ser.Formula, "$4", "$" & r + 11)
Next Ser
For i = 1 To .SeriesCollection.Count
   .SeriesCollection(i).Formula = Ar(i, 2)
Next i
End With
Set Cht = Nothing
End Sub


Die Sub "alle_Blocks" wird gestartet und ruft dann die Erstellung, Plazierung und Anpassen der Daten auf.

mfg

(mit kleinen Äderungen, insbesondere dem Beispilechart, sollte es auh in Tabelle 2 laufen)

Es ist möglich mit einem weiteren Makro die Charts in Bilder zu wandeln und nach PP zu exportieren, bzw zu speichern
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • rob70
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste