Excel 2000 - Daten aus Diagramm herausl[e|ö]sen

  • #1
M

MasterQ

Bekanntes Mitglied
Themenersteller
Dabei seit
06.03.2006
Beiträge
139
Reaktionspunkte
0
Hallo,

ich habe hier eine Excel-Datei, deren Inhalt aus einen einzelnen Diagramm besteht. Es exisitiert keine Tabelle. Unter Datenquelle ist ein externer Link auf eine andere Excel-Datei eingetragen, die mir nicht vorliegt.

Öffne ich die Datei, wird wie üblich gefragt, ob die angezeigten Daten mit den Inhalten der anderen Datei aktualisiert werden sollen. Ich muss auf nein klicken, denn die Datei liegt mir ja nicht vor. Das Diagramm wird vollständig angezeigt und wenn ich auswähle, dass die Daten auch als Labels angezeigt werden sollen, dann tut's.

Nur, wie kriege ich die im Diagramm angezeigten und intern vorliegenden Daten wieder in eine Tabelle? Ich müsste die Daten weiter verarbeiten habe aber so nur Zugang zur grafischen Darstellung. Ich brauch die Daten in einer Tabelle!

Wie krieg ich sowas hin?

Gruß

MQ
 
  • #2
MasterQ schrieb:
Wie krieg ich sowas hin?

Meines Wissens gar nicht. Ich lasse mich aber gern aufklären, falls jemand dazu doch eine Lösung hat. ;)
 
  • #3
Trispac schrieb:
MasterQ schrieb:
Wie krieg ich sowas hin?

Meines Wissens gar nicht. Ich lasse mich aber gern aufklären, falls jemand dazu doch eine Lösung hat. ;)

Also was mit Sicherheit gehen muss, ist sich das Fileformat von Excel reinpfeiffen und sich ein kleines Progrämmle schreiben.

Ist mir aber zu aufwendig. ;)

Anderes denkbares Szenario ist der Export über eine modernere Excelversion in die offenen Officeformate und dann den Zugriff. Ich habe aber keine solchen Möglichkeiten.

Schade, dass die einfache Kopierpaste nicht geht.

Aber vielleicht geht es auch über ein VB-Script o.ä. ? VB kann ich aber auch nicht!

Bin für alle Hinweise bzw. fertigen Lösungen dankbar!

MQ
 
  • #4
Ich gebe Dir Recht, dass sich die Daten irgendwo im Hintergrund verstecken müssen. Aber Fakt ist leider, dass man daran mit normalen Bordmitteln offensichtlich nicht herankommt. Bin mal gespannt, ob jemand noch eine Idee dazu hat.

Gruss, Trispac
 
  • #5
Hallo MasterQ,

dann probier mal das nachfolgende Makro aus.

Gruß Matjes :)
Code:
Option Explicit

'*** Aus einem aktiven Diagramm, zu dem die Werte nicht mehr vorhanden sind,
'*** die Werte auslesen und in einer neuen Tabelle sichtbar/bearbeitbar machen
'*** !!! Diagramm muß bei Aufruf des Makros aktive sein !!!
'*** Ausgabe erfolgt immer 2-spaltig für x und y Wert.
'*** Über der y-Spalte wird der Spaltenname ausgegeben
'***
'*** Ein Datum bzw. Urhzeit wird als double-Zahl, so wie sie in der Series-Collection
'*** enthalten ist ausgegeben. Die Spalte muß im Nachgang von Hand als Datum bzw. Uhrzeit
'*** formatiert werden


Sub DiagrammWerteAuslesen()

 Dim sh As Object, ws As Worksheet, ch As Chart
 Dim lAnzSeriesCollection As Long
 Dim lZeile As Long, lSpalte As Long, x As Long
 Dim SeriesWert As Variant

 Set sh = ActiveSheet

 If Not PruefeAktivesBlattIstDiagramm(sh) Then Exit Sub
 Call ProtokollblattEinfuegen(sh, ws)
 Set ch = sh
 lAnzSeriesCollection = ch.SeriesCollection.Count
 lSpalte = 0
 For x = 1 To lAnzSeriesCollection
  lSpalte = lSpalte + 1
  lZeile = 1
  For Each SeriesWert In ch.SeriesCollection(x).XValues
   lZeile = lZeile + 1
   ws.Cells(lZeile, lSpalte).Value = SeriesWert
  Next
 ->*** y-Werte
  lSpalte = lSpalte + 1
  lZeile = 1
  ws.Cells(lZeile, lSpalte).Value = ch.SeriesCollection(x).Name
  ws.Cells(lZeile, lSpalte).Font.Bold = True
  For Each SeriesWert In ch.SeriesCollection(x).Values
   lZeile = lZeile + 1
   ws.Cells(lZeile, lSpalte).Value = SeriesWert
  Next
 Next
 
AUFRAEUMEN:
 Set sh = Nothing: Set ws = Nothing: Set ch = Nothing
End Sub
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Function PruefeAktivesBlattIstDiagramm(sh As Object) As Boolean
 If sh.Type <> 4 Then MsgBox Aktives Blatt ist kein Diagramm.: Exit Function
 PruefeAktivesBlattIstDiagramm = True
End Function
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Function ProtokollblattEinfuegen(sh As Object, ws As Worksheet)
->Blatt für Werte nach dem Diagramm einfügen
 Set ws = sh.Parent.Worksheets.Add(After:=sh)
 ws.Name = DiagrammWerte_ & Format(Now(), yyyymmdd_hhnnss)
End Function
 
  • #6
Also wenn das funzt bin ich schwer beeindruckt, Matjes! :1
 
  • #7
Matjes schrieb:
Hallo MasterQ,

dann probier mal das nachfolgende Makro aus.

Gruß Matjes :)

Funzt (fast) prima. Es meckert zwar, dass kein Diagramm ausgewählt sei, Aktives Blatt ist kein Diagramm. obwohl es eines ist, doch durch auskommentieren der Abfrage läuft die Routine durch und liefert auch die (korrekten) Werte. mml

Danke

MQ
 
  • #8
Hallo MasterQ,

ich hab das Makro so modifiziert, das es prüft, ob ein Diagramm selektiert/aktiviert ist. Dabei ist es jetzt egal, ob das Diagramm eingebettet ist oder ein Diagrammblatt. Die Daten des selektierten Charts werden ausgegeben. So kann man auf einem Blatt mit mehreren eingebetteten Diagrammen eines selektieren.

Gruß Matjes :)
Code:
Option Explicit

'*** Aus einem aktiven Diagramm, zu dem die Werte nicht mehr vorhanden sind,
'*** die Werte auslesen und in einer neuen Tabelle sichtbar/bearbeitbar machen
'*** !!! Diagramm muß bei Aufruf des Makros aktive sein !!!
'*** Ausgabe erfolgt immer 2-spaltig für x und y Wert.
'*** Über der y-Spalte wird der Spaltenname ausgegeben
'***
'*** Ein Datum bzw. Urhzeit wird als double-Zahl, so wie sie in der Series-Collection
'*** enthalten ist ausgegeben. Die Spalte muß im Nachgang von Hand als Datum bzw. Uhrzeit
'*** formatiert werden


Sub DiagrammWerteAuslesen()

 Dim sh As Object, ws As Worksheet, ch As Chart
 Dim lAnzSeriesCollection As Long
 Dim lZeile As Long, lSpalte As Long, x As Long
 Dim SeriesWert As Variant

 Set sh = ActiveSheet

 If Not PruefeAktivesDiagramm(ch) Then Exit Sub
 Call ProtokollblattEinfuegen(sh, ws)
 lAnzSeriesCollection = ch.SeriesCollection.Count
 lSpalte = 0
 For x = 1 To lAnzSeriesCollection
  lSpalte = lSpalte + 1
  lZeile = 1
  For Each SeriesWert In ch.SeriesCollection(x).XValues
   lZeile = lZeile + 1
   ws.Cells(lZeile, lSpalte).Value = SeriesWert
  Next
 ->*** y-Werte
  lSpalte = lSpalte + 1
  lZeile = 1
  ws.Cells(lZeile, lSpalte).Value = ch.SeriesCollection(x).Name
  ws.Cells(lZeile, lSpalte).Font.Bold = True
  For Each SeriesWert In ch.SeriesCollection(x).Values
   lZeile = lZeile + 1
   ws.Cells(lZeile, lSpalte).Value = SeriesWert
  Next
 Next
 
AUFRAEUMEN:
 Set sh = Nothing: Set ws = Nothing: Set ch = Nothing
End Sub
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Function PruefeAktivesDiagramm(ch As Chart) As Boolean
 Set ch = Nothing
 Set ch = ActiveChart
 If ch Is Nothing Then MsgBox Kein Diagramm aktiviert/selektiert.: Exit Function
 PruefeAktivesDiagramm = True
End Function
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Function ProtokollblattEinfuegen(sh As Object, ws As Worksheet)
->Blatt für Werte nach dem Diagramm einfügen
 Set ws = sh.Parent.Worksheets.Add(After:=sh)
 ws.Name = DiagrammWerte_ & Format(Now(), yyyymmdd_hhnnss)
End Function
 
Thema:

Excel 2000 - Daten aus Diagramm herausl[e|ö]sen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.493
Neuestes Mitglied
Flensburg45
Oben