以下代码根据今天的日期(日期已在A列中手动编写)找到合适的行,并将数据插入同一行。我需要将最后一个结果(今天' s日期)添加到名为" charts"的其他工作表的柱形图中。
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
注意:图表中仅显示新结果。
这是代码运行后的摘要工作表: Summary sheet
这是代码运行后的仪表板工作表: Dashboard Sheet
答案 0 :(得分: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
我以为你已经有了一张名为&#34; chart&#34;的表,所以我没有创建一张。我还假设只将Sheet Summary中最新的行复制到图表工作表中,并且现有数据已被覆盖。
我还假设您开始使用的代码已经在更新摘要表。
我用它来了解如何使用VBA创建图表:[https://www.mrexcel.com/forum/excel-questions/650547-create-column-chart-through-vba-automatically.html]
答案 1 :(得分:0)
想要一种非VBA方法,一旦你设置了它,你就永远不会弄乱它吗?
我们将使用一些名称(也称为命名范围)来引用数据。
我认为包含您正在绘制的数据的工作表是&#34;摘要&#34;。
转到“公式”选项卡,“定义名称”。在名称中,输入Labels
;适用范围,保留工作簿;在“参考”中,输入=Summary!$B$1:$E$1
。单击Enter。
返回定义名称。在名称中,输入Name
;在“参考”中,输入=OFFSET(Summary!$A$1,COUNT(Summary!$A:$A),0)
。这将返回A1下方的行数与A1中的值一样多的单元格。
最后一次返回定义名称。在名称中,输入Values
;在“参考”中,输入=OFFSET(Labels,COUNT(Summary!$A:$A),0)
。这将返回范围,该范围是我们在上面命名的Labels
范围之下的多个行,作为A列中值的数量。
现在选择Summary!A1:D2并在摘要表上插入柱形图。该图表显示了第一个日期的值。选择列并查看系列公式。它应该这样说:
=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)
(或者您工作簿的名称)。