【问题标题】:Excel VBA: How do you format Charts in Excel with New Data?Excel VBA:如何使用新数据格式化 Excel 中的图表?
【发布时间】:2010-08-23 17:09:51
【问题描述】:

我正在尝试制作一个宏来格式化 Excel 2003 中数据发生变化的图表。基本上,我始终有 20 个 X 值和 Y 值;但是,这些值是特定于数据的(我正在制作股票价格图表,该图表将根据我正在分析的股票而变化)。我试图让我的 Y 轴在单元格 B8 中的值处穿过 X 轴;反正有没有用宏来做到这一点?因为我无法将轴交叉的位置链接到单元格。另外,我也想将轴最小值更改为单元格 B8。此外,我希望宏根据我放入其中的数据(即逻辑间隔)自动调整购物车以使其看起来合乎逻辑。

这里的图表类型是散点图,其中描述是:“数据点由无标记的线连接的散点图”。非常感谢。

【问题讨论】:

    标签: vba excel charts


    【解决方案1】:

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

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

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

    (带有您的图表名称)

    【讨论】:

      【解决方案2】:

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

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

      您可能还需要设置

      ActiveChart.Axes(xlCategory).Crosses = xlAxisCrossesCustom
      

      并尝试使用 Value 或 Category。

      【讨论】:

        【解决方案3】:

        “根据我输入的数据(即逻辑间隔)自动调整购物车以使其看起来合乎逻辑。”

        那个很有趣。这是一个 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
        

        享受吧。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-26
          • 1970-01-01
          • 2011-04-19
          • 1970-01-01
          相关资源
          最近更新 更多