基本上我有一个包含大量数据的大型电子表格,现在每个月末我都会制作一个包含去年所有数据的图形。
例如:这是5月底,所以我的旧图表显示了从2013年4月30日到2014年3月30日的所有数据。在运行宏之后,它将包含从2013年5月5日至2014年5月5日的数据。
我使用数据的日期,可用性和10d MAV列以及标签的列标题
现在我正在寻找一个宏,它基本上会在每次运行宏时更新数据范围,以匹配帖子第一部分中的示例。
或者可以简化我工作的东西,因为我有大约36个图表,我必须每个月手动更新,通常需要很长时间才能让所有这些更新,当然如果我不得不让其他人用更少的excel知识来更新它,如果有一种更简单的方法来实现这一点,那么手动更新所有内容将会非常有用。
答案 0 :(得分:1)
下面的VBA将为您完成任务。有三个独立的潜艇:
sub populateChart需要许多可能需要解释的参数:
Sub removeSeries(Chart As Chart)
For Each s In Chart.SeriesCollection
s.Delete
Next s
End Sub
Sub populateChart(StartDate As Date, EndDate As Date, DateRange As Range, ValueRange As Range, Chart As Chart, series_index As Integer)
Dim first_row As Integer
Dim last_row As Integer
Dim ws_name As String
'find first row
For Each c In DateRange.Rows
If DateValue(c.Value) >= StartDate Then
first_row = c.Row
Exit For
End If
Next c
'find last row
For Each c In DateRange.Rows
If DateValue(c.Value) = EndDate Then
last_row = c.Row
Exit For
ElseIf DateValue(c.Value) > EndDate Then
last_row = c.Row - 1
Exit For
End If
Next c
'get name of worksheet
ws_name = Chart.Parent.Parent.Name
'add series and axis labels to chart
Chart.SeriesCollection.NewSeries
Chart.SeriesCollection(series_index).Values = "=" & ws_name & "!" & ValueRange.Rows(first_row & ":" & last_row).Address
Chart.SeriesCollection(series_index).XValues = "=" & ws_name & "!" & DateRange.Rows(first_row & ":" & last_row).Address
End Sub
Sub test()
removeSeries ActiveSheet.ChartObjects("Chart 1").Chart
populateChart #4/1/2014#, #4/30/2014#, ActiveSheet.Range("A2:A" & ActiveSheet.Range("A1").End(xlDown).Row), _
ActiveSheet.Range("B2:B" & ActiveSheet.Range("B1").End(xlDown).Row), ActiveSheet.ChartObjects("Chart 1").Chart, 1
populateChart #4/1/2014#, #4/30/2014#, ActiveSheet.Range("A2:A" & ActiveSheet.Range("A1").End(xlDown).Row), _
ActiveSheet.Range("C2:C" & ActiveSheet.Range("C1").End(xlDown).Row), ActiveSheet.ChartObjects("Chart 1").Chart, 2
End Sub
答案 1 :(得分:0)
我认为您可以尝试对数据应用过滤器,而不是使用宏。根据我的经验,当您更改过滤器中的选择时,Excel非常适合自动更新图表中使用的数据。因此,例如,当从5月移动到6月时,您将从“日期”列中取消选择“月”,然后选择“6月”(如果日期格式正确,Excel应该为您提供年份的分层列表,然后是月份。)