我希望有人可以帮我解决以下问题。我使用了3种不同的VBA编码方法(来自本网站的2种方法),所有这些方法都在同一个障碍中徘徊。
我有一个电子表格,它使用2列作为散点图的数据源。此图表中的数据点基于第3列中使用的条件格式设置。因此,在第3列中,如果值为" X",则数据点应为粉红色。否则数据点应为绿色。这工作正常。 我是怎么做到的:https://www.reddit.com/r/excel/comments/3x2cme/scatter_plot_with_color_based_on_a_third_value/ 这是我的编码:
Sub ColorCode()
Dim i As Integer
Dim MyCount As Integer
MyCount = ActiveChart.SeriesCollection(1).Points.Count * ActiveChart.SeriesCollection.Count
'MsgBox ActiveChart.SeriesCollection(1).Points.Count *
ActiveChart.SeriesCollection.Count
For i = 1 To MyCount
ActiveChart.SeriesCollection(1).Points(i).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = Range("i" & i + 1).DisplayFormat.Interior.Color
End With
Next
End Sub
但是,当我过滤源数据时,数据点的颜色会发生变化。我发现了以下几点: - 当数据源未经过滤时,第3列中的第4行数据为粉红色。这很好。 - 过滤数据源时,第3列中的第4行数据为绿色。这很好。 - 但是,此过滤行的相关数据点为粉红色,应为绿色 - 过滤后的源表中的第4行数据将始终保留原始未过滤表的第4行的条件格式。
我需要的是过滤器对数据点的颜色没有影响,但仍然隐藏过滤掉的数据点。或者换句话说,在过滤数据时,数据点将保留其过滤前上面应用的VBA代码的颜色属性。
答案 0 :(得分:0)
阵列很方便。
Sub ColorCode()
Dim i As Integer, n As Integer
Dim MyCount As Integer
Dim rngColor As Range, vRng() As Range
MyCount = ActiveChart.SeriesCollection(1).Points.Count * ActiveChart.SeriesCollection.Count
Set rngColor = Range("i2", Range("i" & Rows.Count).End(xlUp))
Set rngColor = rngColor.SpecialCells(xlCellTypeVisible)
For Each Rng In rngColor
n = n + 1
ReDim Preserve vRng(1 To n)
Set vRng(n) = Rng
Next Rng
'MsgBox ActiveChart.SeriesCollection(1).Points.Count * ActiveChart.SeriesCollection.Count
For i = 1 To MyCount
ActiveChart.SeriesCollection(1).Points(i).Select
With Selection.Format.Fill
.Visible = msoTrue
'.ForeColor.RGB = Range("i" & i + 1).DisplayFormat.Interior.Color
.ForeColor.RGB = vRng(i).DisplayFormat.Interior.Color
End With
Next
End Sub
答案 1 :(得分:0)
这有助于解决一些类似的图表格式问题:
Excel文件标签>选项>高级>图
取消选中'属性按照当前工作簿的图表数据点'