Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Achsen vertauschen

Achsen vertauschen
05.06.2007 11:12:38
Ulf
Hallo,
ich habe eine Menge x-y-Diagramme, welche jeweils eine Menge Datenreihen (y_1 bis y_n) als Funktion einer Wertereihe (x) darstellen. Ich möchte die Diagramme nun ohne etwas an den zugrundeliegenden Tabellen zu ändern (keine neuen Spalten einfügen/Spalten verschieben/Transponieren) senkrecht stellen, also quasi X-Werte und Y-Werte für jede Datenreihe miteinander vertauschen. Dieses geht natürlich manuell (mit viel copy&paste) was bei der Anzahl aber extrem zeitaufwendig wäre. Wie kann ich so etwas automatisieren?
Gruß
Brix
PS: Ich möchte auch keine zweite Achse hinzufügen oder Zeilen und Spalten vertauschen!

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Achsen vertauschen
05.06.2007 11:48:00
Beverly
Hi Brix,
schau mal auf meine HP, da findest du auf der Seite "Diagramme m. VBA" das Beispiel Achsentausch. Da ich deinen Tabellenaufbau nicht kenne, weiß ich leider nicht, wie und ob du das Beispiel an deine Bedingungen anpassen kannst. Wenn du Fragen hast, melde dich, dann versuchen wir, gemeinsam etwas daraus zu machen.
________________________________________

AW: Achsen vertauschen
05.06.2007 13:08:00
bst
Auch Hallo,
wenn es sich um einige wenige Werte handelt sollte sowas funktionieren:
(Wenn man ein Array zuweist benutzt Excel die Formel =Series() in welcher die Werte des Arrays aufgezählt werden und die Länge einer Formel ist leider beschränkt)

Sub SwapAxes()
Dim co As ChartObject, s As Series, ar As Variant
For Each co In ActiveSheet.ChartObjects
With co.Chart
For Each s In .SeriesCollection
ar = s.Values
s.Values = s.XValues
s.XValues = ar
Next
End With
Next
End Sub


Dieses sollte immer funktionieren, fordert aber etwas (viel?) Vorarbeit. Du mußt für jede Datenreihe zwei Namen definieren: x_i_j und y_i_j wobei i hierbei die Nummer des ChartObjektes ist und j die Nummer der SeriesCollection. Für ein Diagramm mit zwei Datenreihen brauchst Du also die Namen x_1_1, y_1_1, x_1_2 und y_1_2.


Sub SwapAxesNames()
Static bSwapped As Boolean
Dim i As Integer, j As Integer, rngX As Range, rngY As Range
For i = 1 To ActiveSheet.ChartObjects.Count
With ActiveSheet.ChartObjects(i).Chart
bSwapped = Not bSwapped
For j = 1 To .SeriesCollection.Count
Set rngX = Range("x_" & i & "_" & j)
Set rngY = Range("y_" & i & "_" & j)
.SeriesCollection(j).Values = IIf(bSwapped, rngX, rngY)
.SeriesCollection(j).XValues = IIf(bSwapped, rngY, rngX)
Next
End With
Next
End Sub


cu, Bernd

Anzeige
AW: Achsen vertauschen
05.06.2007 13:23:32
ingUR
Hallo, Ulf,
aller guten Dinge scheinen drei zu sein, daher hier mein Vorschlag eines Standardmoduls, das ebenfalls alle Datenreihen eines jeden eingebetteten Charts in dem aktiven Tabellenblatt um die 45°-Achse spiegelt:
Option Explicit

Sub VertauscheXYAchsenImPunktDiagramm()
Dim chtObj As ChartObject, chtChart As Chart, sc As Series
Dim pos0 As Integer, pos1 As Integer
Dim strF As String, strT1 As String, strT2 As String, strT3 As String
For Each chtObj In ActiveSheet.ChartObjects
Set chtChart = chtObj.Chart
With chtChart
For Each sc In .SeriesCollection
strF = sc.Formula
pos0 = InStr(strF, ",")
strT1 = Left(strF, pos0 - 1)
pos1 = InStr(pos0 + 1, strF, ",")
strT2 = Mid(strF, pos0 + 1, pos1 - pos0 - 1)
pos0 = pos1
pos1 = InStr(pos0 + 1, strF, ",")
strT3 = Mid(strF, pos0 + 1, pos1 - pos0 - 1)
strF = strT1 & "," & strT3 & "," & strT2 & Right(strF, Len(strF) - pos1 + 1)
sc.Formula = strF
Next sc
End With
Next chtObj
Set chtObj = Nothing
End Sub


Gruß,
Uwe

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige