Excel VBA:如何使用新数据格式化Excel中的图表?

时间:2010-08-23 17:09:51

标签: excel vba excel-vba charts

我正在尝试制作一个宏,用于格式化Excel 2003中数据更改的图表。基本上,我总是有20 X值和Y值;但是,这些数据是特定于数据的(我正在根据我正在分析的库存来改变股票价格图表)。我试图使我的Y轴与单元格B8中的值交叉X轴;无论如何用宏来做这个吗?因为我无法链接轴与单元格交叉的位置。另外,我想将轴最小值更改为单元格B8。此外,我希望宏根据我放在那里的数据(即逻辑间隔)自动调整购物车。(

此处的图表类型是散点图,其中的描述是:“由没有标记的线连接的数据点散布”。非常感谢你。

3 个答案:

答案 0 :(得分:1)

我认为动态将拦截值链接到单元格是不可能的 - 这只是基于用于选择拦截值的UI需要显式值,而不是允许你要选择一个单元格。

但是,在VBA中,一旦从单元格中读取了所需的值,请执行

ActiveSheet.ChartObjects("Chart 1").Axes(xlValue).CrossesAt = value

(使用您的图表名称)

答案 1 :(得分:0)

这大约是您所需要的(没有时间来测试并准确了解详细信息):

ActiveChart.Axes(xlValue).CrossesAt = Range("B8").value

您可能还需要设置

ActiveChart.Axes(xlCategory).Crosses = xlAxisCrossesCustom

并使用Value或Category来玩一点。

答案 2 :(得分:0)

“根据我放入的数据(即逻辑间隔)调整购物车自动显示逻辑。”

那个很有趣。这是一个VBA函数,它可以很好地计算滴答之间的相当间隔。

Public Function prettyVal( _
    xMin As Double, _
    xMax As Double, _
    minBins As Integer) _
    As Double
'' returns an aesthetic interval size to _
    use for a plot axis or histogram bin. _
    marc@smpro.ca 2010-09-01

    Dim pretties
    pretties = Array(1, 2, 5, 10)
    Dim maxBin As Double ''maximum size of bin
    Dim xScale As Double  ''scale factor

    With WorksheetFunction
    maxBin = (xMax - xMin) / minBins
    xScale = 10 ^ Int(.Log10(maxBin))
    prettyVal = xScale * .Lookup(maxBin / xScale, pretties)
    End With
End Function

您需要在工作表中使用它。使用最小值和最大值的地板和天花板以及相当重要的值。这使他们也很漂亮。工作表中的内容如下:

minimum plot value   minVal     120     
maximum plot value   maxVal     980     
minimum num of bins  minBins     10     
pretty bin size      binsize     50   =prettyVal(minVal,maxVal,minBins)
low axis value       minEdge    100   =FLOOR(minVal,binsize)
high axis value      maxEdge   1000   =CEILING(maxVal,binsize)
number of bins       numBins     18   =(maxEdge-minEdge)/binsize

享受。