使用第 1 行合并单元格中的文本为多个图表提供标题
Give title to multiple charts with the text in the merged cells in row 1
http://bit.ly/1CG7T4c 此 link 显示了我通过 运行 下面给出的代码获得的示例数据和图表。我有动态的部门数量。
我希望每个图表都将标题作为各自的部门名称,即在每个图表数据上方的每个合并单元格中给出的名称。
请给我推荐一个相同的代码。
Option Explicit
Sub PlotSeparateChartsByMergedFirstRow()
Dim rUsed As Range, rMerged As Range, rChtData As Range
Dim rChtDat1 As Range, rChtDat2 As Range
Dim iColMerge As Long, iColData As Long
Dim cht1 As Chart, cht2 As Chart
Const iChtHeight As Double = 175
Set rUsed = ActiveSheet.UsedRange
iColMerge = 1
Do
iColMerge = iColMerge + 1
If iColMerge > rUsed.Columns.Count Then Exit Do
If rUsed.Cells(1, iColMerge).MergeCells Then
Set rMerged = rUsed.Cells(1, iColMerge).MergeArea
Set rChtData = rMerged.Resize(rUsed.Rows.Count)
' x values
Set rChtDat1 = rUsed.Columns(1)
Set rChtDat2 = rUsed.Columns(1)
' y values
For iColData = 1 To rChtData.Columns.Count - 1 Step 2
Set rChtDat1 = Union(rChtDat1, rChtData.Columns(iColData))
Set rChtDat2 = Union(rChtDat2, rChtData.Columns(iColData + 1))
Next
' charts
' 2007, 2010
Set cht1 = ActiveSheet.Shapes.AddChart(xlColumnClustered, rChtData.Left, rChtData.Height, rChtData.Width, iChtHeight).Chart
With cht1
.SetSourceData rChtDat1, xlColumns
End With
' 2007, 2010
Set cht2 = ActiveSheet.Shapes.AddChart(xlColumnClustered, rChtData.Left, rChtData.Height + iChtHeight, rChtData.Width, iChtHeight).Chart
With cht2
.SetSourceData rChtDat2, xlColumns
End With
nd If
iColMerge = iColMerge + rMerged.Columns.Count - 1
Loop
End Sub
确保图表有标题,然后link第一行中合并块的第一个单元格的标题。
With cht1
.SetSourceData rChtDat1, xlColumns
.HasTitle = True
.ChartTitle.Text = "=" & rUsed.Cells(1, iColMerge).Address(, , , True)
End With
http://bit.ly/1CG7T4c 此 link 显示了我通过 运行 下面给出的代码获得的示例数据和图表。我有动态的部门数量。
我希望每个图表都将标题作为各自的部门名称,即在每个图表数据上方的每个合并单元格中给出的名称。
请给我推荐一个相同的代码。
Option Explicit
Sub PlotSeparateChartsByMergedFirstRow()
Dim rUsed As Range, rMerged As Range, rChtData As Range
Dim rChtDat1 As Range, rChtDat2 As Range
Dim iColMerge As Long, iColData As Long
Dim cht1 As Chart, cht2 As Chart
Const iChtHeight As Double = 175
Set rUsed = ActiveSheet.UsedRange
iColMerge = 1
Do
iColMerge = iColMerge + 1
If iColMerge > rUsed.Columns.Count Then Exit Do
If rUsed.Cells(1, iColMerge).MergeCells Then
Set rMerged = rUsed.Cells(1, iColMerge).MergeArea
Set rChtData = rMerged.Resize(rUsed.Rows.Count)
' x values
Set rChtDat1 = rUsed.Columns(1)
Set rChtDat2 = rUsed.Columns(1)
' y values
For iColData = 1 To rChtData.Columns.Count - 1 Step 2
Set rChtDat1 = Union(rChtDat1, rChtData.Columns(iColData))
Set rChtDat2 = Union(rChtDat2, rChtData.Columns(iColData + 1))
Next
' charts
' 2007, 2010
Set cht1 = ActiveSheet.Shapes.AddChart(xlColumnClustered, rChtData.Left, rChtData.Height, rChtData.Width, iChtHeight).Chart
With cht1
.SetSourceData rChtDat1, xlColumns
End With
' 2007, 2010
Set cht2 = ActiveSheet.Shapes.AddChart(xlColumnClustered, rChtData.Left, rChtData.Height + iChtHeight, rChtData.Width, iChtHeight).Chart
With cht2
.SetSourceData rChtDat2, xlColumns
End With
nd If
iColMerge = iColMerge + rMerged.Columns.Count - 1
Loop
End Sub
确保图表有标题,然后link第一行中合并块的第一个单元格的标题。
With cht1
.SetSourceData rChtDat1, xlColumns
.HasTitle = True
.ChartTitle.Text = "=" & rUsed.Cells(1, iColMerge).Address(, , , True)
End With