0

下面的代码,根据今天的日期(日期已经手动写在A列中)找到合适的行,并在同一行插入数据。我需要将最后一个结果(今天的日期)添加到名为“图表”的不同工作表上的柱形图中。

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

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

这是代码运行后的摘要工作表: 摘要表

这是代码运行后的仪表板工作表: 仪表板表

4

2 回答 2

0

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

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

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

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

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

于 2018-01-26T19:25:15.917 回答
0

想要一个非 VBA 方法,一旦你设置了它,你就永远不必弄乱它了吗?

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

我假设您正在绘制的数据表是“摘要”。

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

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

最后一次返回定义名称。在名称中,输入Values;在引用到中,输入=OFFSET(Labels,COUNT(Summary!$A:$A),0)。这将返回Labels我们上面命名的范围以下的行数,作为 A 列中值的数量。

现在选择 Summary!A1:D2 并在 Summary 表上插入一个柱形图。该图表显示了第一个日期的值。选择列并查看系列公式。它应该这样说:

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

编辑此公式以阅读

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

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

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

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

于 2018-01-27T02:36:57.020 回答