从更新的结果生成柱形图

Generate column chart from updated results

下面的代码,根据今天的日期(A列已经手动写好日期)找到合适的行,在同一行插入数据。我需要将最后一个结果(今天的日期)添加到名为 "charts".

的不同 sheet 上的柱形图中
Sub Worksheets_Summary()
Dim OldSheet As Worksheet
Dim NewSheet As Worksheet
Dim Cell As Range
Dim ColNum As Integer
Dim RwNum As Long
Dim book As Workbook
Set book = ThisWorkbook
Set NewSheet = book.Worksheets("Summary")
RwNum = NewSheet.Columns(1).Find(Date).Row
ColNum = 1
For Each OldSheet In book.Worksheets
    If OldSheet.Name <> "Summary" Then
        ColNum = ColNum + 1

        NewSheet.Cells(1, ColNum).Formula _
    = "=HYPERLINK(""#""&CELL(""address"",'" & OldSheet.Name & "'!A1)," _
         & """" & OldSheet.Name & """)"


        NewSheet.Cells(RwNum, ColNum).Value = OldSheet.Range("B11").Value
    End If
Next OldSheet

NewSheet.UsedRange.Columns.AutoFit

End Sub

注意:图表中仅显示新结果。

这是代码运行后的总结工作sheet: Summary sheet

这是Dashboard的工作sheet代码有运行之后: Dashboard Sheet

好的,看看这是否适合你:

Sub Worksheets_Summary()
    Dim OldSheet As Worksheet
    Dim NewSheet As Worksheet
    Dim Cell As Range
    Dim ColNum As Integer
    Dim RwNum As Long
    Dim book As Workbook

    Dim MyChart As Chart
    Dim MyRange As Range
    Dim Range1 As Range
    Dim Range2 As Range
    Dim chartSheet As Worksheet


    Set book = ThisWorkbook
    Set NewSheet = book.Worksheets("Summary")
    RwNum = NewSheet.Columns(1).Find(Date).Row
    ColNum = 1
    For Each OldSheet In book.Worksheets
        If OldSheet.Name <> "Summary" Then
        ColNum = ColNum + 1

        NewSheet.Cells(1, ColNum).Formula _
         = "=HYPERLINK(""#""&CELL(""address"",'" & OldSheet.Name & "'!A1)," _
         & """" & OldSheet.Name & """)"


        NewSheet.Cells(RwNum, ColNum).Value = OldSheet.Range("B11").Value
        End If
    Next OldSheet

    NewSheet.UsedRange.Columns.AutoFit


    Set chartSheet = book.Worksheets("charts")

    Set MyChart = chartSheet.Shapes.AddChart(xlColumnClustered).Chart 'This is similar to the way I saw it done on the link I included.
        'You could use activesheet instead of chartsheet.

    Set Range1 = NewSheet.Range("A1:D1") ' Get Header from Summary Sheet
    Set Range2 = NewSheet.Range("A" & RwNum & ":D" & RwNum) ' Get most recent data row from Summary Sheet
    Set MyRange = Union(Range1, Range2)



    MyChart.SetSourceData source:=MyRange 'Use MyRange for the chart.

    MyChart.SeriesCollection(1).Name = Range("A" & 2).Value 'Get the date and use it as the chart title.


End Sub

我假设您已经有一个名为 "charts" 的 sheet,所以我没有创建一个。我还假设只有 Sheet 摘要中的最新行被复制到图表 sheet,并且现有数据被覆盖。

我还假设您开始使用的代码已经在更新摘要 sheet。

我用它来学习如何使用 VBA 创建图表:[https://www.mrexcel.com/forum/excel-questions/650547-create-column-chart-through-vba-automatically.html]

想要一种非VBA 的方法,一旦设置好就永远不必弄乱它?

我们将使用一些名称(也称为命名范围)来引用数据。

我假设您绘制的数据 sheet 是 "Summary"。

转到“公式”选项卡,定义名称。在名称中,输入Labels;对于范围,保留工作簿;在引用中,输入 =Summary!$B:$E。单击 Enter。

Return 定义名称。在名称中,输入Name;在引用中,输入 =OFFSET(Summary!$A,COUNT(Summary!$A:$A),0)。此 returns A1 下面的行数与 A 列中的值一样多的单元格。

Return 最后一次定义名称。在名称中,输入Values;在引用中,输入 =OFFSET(Labels,COUNT(Summary!$A:$A),0)。这个 returns 范围是我们上面命名的 Labels 范围下方的行数,与 A 列中的值数相同。

现在 select 摘要!A1:D2 并在摘要 sheet 上插入一个柱形图。该图表显示第一个日期的值。 Select 列并查看级数公式。它应该这样说:

=SERIES(Summary!$A,Summary!$B:$D,Summary!$B:$D,1)

编辑此公式以读取

=SERIES(Summary!Name,Summary!Labels,Summary!Values,1)

Excel 接受您的更改。由于名称的范围是工作簿,Excel 将级数公式更改为:

=SERIES(Book1.xlsm!Name,Book1.xlsm!Labels,Book1.xlsm!Values,1)

(或您的工作簿的名称)。