Excel更新图macros的数据范围

基本上我有一个大的电子表格,其中有大量的数据,现在在每个月底我做一个graphics,其中包含去年的所有数据。

例如:5月底,我的旧图显示了2013年4月30日至2014年4月30日的所有数据。 运行macros后将包含从05-31-2013至2014年5月31日的数据。

我使用数据的date,可用性和10d MAV列以及我的标签的列标题

图形数据

现在我正在寻找一个基本上更新数据的macros,每当我运行macros来匹配我的例子在第一部分的post。
还有一些可以简化我的工作,因为我有大约36个图表,我必须每个月手动更新一次,通常需要一段时间才能更新所有这些图表,当然如果我不得不让其他人更新,如果有更简单的方法来完成这个工作,而不是手动更新所有内容,那将会非常有帮助。

下面的VBA将为您完成任务。 有三个独立的子目录:

  • removeSeries清除现有的图表
  • populateChart将一系列图表添加到图表中
  • testing显示上述两个函数的工作方式(假设date在列A中,而列B和C中的值)

sub populateChart需要一些可能需要解释的参数:

  • StartDate:格式为#MM / DD / YYYY#
  • EndDate:格式为#MM / DD / YYYY#
  • DateRange:放置date数组的工作表上的范围
  • ValueRange:放置数组值的工作表上的范围
  • 图表:一个图表对象
  • series_index:如果您添加了多个系列,则第一个使用1,第二个使用2个。
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 

我认为,而不是使用macros,你可以尝试应用filter的数据。 根据我的经验,Excel在自动更新图表中使用的数据时非常好,当您更改在filter中所做的select时。 因此,例如,从五月到六月移动时,您可以从“date”列中取消select“五月”,然后select六月(如果date格式正确,则Excel应为您提供年份和月份的层次结构列表)。