Excel VBA: Как вы форматируете диаграммы в Excel с новыми данными? - PullRequest
1 голос
/ 23 августа 2010

Я пытаюсь создать макрос, который форматирует диаграмму в Excel 2003, где данные изменяются. По сути, у меня всегда есть 20 значений X и Y; однако значения зависят от данных (я делаю графики цен акций, которые будут меняться в зависимости от того, какие акции я анализирую). Я пытаюсь заставить мою ось Y пересекать ось X со значением в ячейке B8; есть ли вообще сделать это с помощью макроса? Потому что я не могу связать, где оси пересекаются с клеткой. Также я хочу изменить минимум оси на ячейку B8. Также я хочу, чтобы макрос настраивал корзину так, чтобы она выглядела логически автоматически, в зависимости от данных, которые я там ввел (т. Е. Логических интервалов).

Тип диаграммы здесь - это график рассеяния, где описание: «Разброс с точками данных, соединенными линиями без маркеров». Большое спасибо.

Ответы [ 3 ]

1 голос
/ 23 августа 2010

Я не думаю, что возможно динамически связать значение перехвата с ячейкой - это просто основано на том факте, что пользовательский интерфейс для выбора значения перехвата требует явного значения, а не позволяет вамчтобы выбрать ячейку.

В VBA, однако, как только вы прочитали нужное значение из ячейки, выполните

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

(с именем вашего графика)

0 голосов
/ 04 сентября 2010

", чтобы настроить тележку так, чтобы она выглядела логически автоматически в зависимости от данных, которые я там ввел (т. Е. Логических интервалов)."

Это очень весело. Вот функция 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

Наслаждайтесь.

0 голосов
/ 23 августа 2010

Это примерно то, что вам нужно (нет времени для тестирования и получения точных данных):

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

Возможно, вам также придется установить

ActiveChart.Axes(xlCategory).Crosses = xlAxisCrossesCustom

и немного поэкспериментируйте, использовать ли значение или категорию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...