Ich habe mehrere Diagramme in einer Arbeitsmappe (eine pro Arbeitsblatt), die die letzten drei Wochen der Daten melden. Die Quelldaten sind nicht zusammenhängende Spalten in einer ListObject-Tabelle. Jede Woche, wenn die Tabellen mit einer neuen Datenwoche (zusätzliche Zeile) aktualisiert werden, möchte ich, dass die Diagramme aktualisiert werden.VBA: Update Diagramm zu den letzten drei Perioden von Daten
Dies ist ähnlich wie this post, aber ich aktualisiere den Serienbereich, anstatt eine weitere Serie hinzuzufügen.
Hier einige Beispieldaten:
A B C D E F
Start End Green Yellow Red Total
------- ------- ------- ------- ------- -------
1/1/16 1/7/16 10 10 10 30
1/8/16 1/14/16 12 12 12 36
1/15/16 1/21/16 12 20 18 50
1/22/16 1/28/16 30 10 50 45
Das Diagramm wie dieses erste aussehen:
Danach würde es so gerne: (Mißachtung Farbdifferenz)
Irgendwelche Vorschläge auf dem einfachsten Weg, dies zu tun?
Die Serie Formeln am Ende wie folgt aussehen:
=SERIES(Project!$A$2,Project!$C$1:$E$1,Project!$C$2:$E$2,1)
=SERIES(Project!$A$3,Project!$C$1:$E$1,Project!$C$3:$E$3,2)
=SERIES(Project!$A$4,Project!$C$1:$E$1,Project!$C$4:$E$4,3)
Ich denke in Series durch jede Serie von iterieren, die verschiedenen comma separated values Parsen aus, und die Aktualisierung des Bereichs. Etwas wie dieses:
set clnSeries = activechart.seriescollection
dim strSeriesTemp as string 'Placeholder for previous series formula
For i = clnSeries.count to 1 step -1
if strSeriesTemp = "" then
strSeriesTemp = clnSeries(i).formula
arrSeries = split(clnSeries(i).formula, ",")
for i = lbound(arrSeries) to ubound(arrSeries)
select case i
'Move legend label one row down
case 1: strFormula = arrSeries(i).offset(1,0).address
'Leave series labels the same
case 2: strFormula = strFormula & arrSeries(i)
'Move series values one row down
case 3: strFormula = strFormula & arrSeries(i).offset(1,0).address
'Set series index
case 4: strFormula = strFormula & i
end select
strFormula = "=SERIES(" & strFormula & ")"
else
clnSeries(i).formula = strFormula
end if
next i
Dank @Alexis, ist dies hilfreich. Ich verwende ListObject-Tabellen, und jedes Blatt hat Daten, die unter den jeweiligen Tabellen vorhanden sind, so dass die Suche nach einem Maximalwert einer ganzen Spalte für mich unpraktisch ist. Ich versuche, Ihren Code zu ändern, um den maximalen Wert aus der Tabelle auszuwählen.Eine weitere Herausforderung ist, dass ich ungefähr 10 Blätter habe, wo dies getan werden muss, so dass ich effektiv ungefähr 30 benannte Bereiche erstellen muss, aber bisher scheint dies einfacher als das Schreiben von VBA-Code. – MJA
Sie sollten einfach in der Lage sein, $ B: $ B zu ersetzen, unabhängig davon, in welchem Bereich Sie suchen möchten. –
Meine Formeln sehen komplizierter aus: = OFFSET (tblMCC, MATCH (MAX (tblMCC [Start]), tblMCC [Start], 1) -3, MATCH ("Grün", tblMCC [#Headers], 0), 3 , 1) Und wenn ich versuche, den benannten Bereich in VBA zu erstellen, wird es immer abgelehnt. – MJA