Создание линейного графика с переменными барами ошибок - PullRequest
1 голос
/ 13 июля 2011

Я пытаюсь автоматически сгенерировать линейную диаграмму, используя VBA и Excel, где каждая точка данных имеет различный размер панели ошибок. (Я хотел бы использовать мой переход к Python / matplotlib, но я связан по деловым причинам)

Я попытался записать макрос, чтобы увидеть, как это сделать, но код был такой:

Range("C2:C8").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("'Sheet1'!$C$2:$C$8")
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SeriesCollection(1).XValues = "='Sheet1'!$B$2:$B$8"
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(1).HasErrorBars = True
ActiveSheet.ChartObjects("Chart 2").Activate
ActiveChart.SeriesCollection(1).ErrorBars.Select
ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:=xlBoth, _
    Type:=xlCustom, Amount:=0
ActiveSheet.ChartObjects("Chart 2").Activate
ActiveChart.SeriesCollection(1).ErrorBars.Select

Но это не слишком полезно - значение суммы равно нулю! Итак, я попытался изменить это и поместить в подпрограмму, чтобы динамический диапазон диапазона ошибок был следующим:

Sub ErrorLine(sheetName As String, row1 As Integer, _
row2 As Integer, xcol As Integer, ycol As Integer, errCol As Integer)

Dim strErrorY As String
strErrorY = "=" & sheetName & "!" & _
    Range(Cells(row1, errCol), Cells(row2, errCol)).Address()

Sheets(sheetName).Activate
Sheets(sheetName).Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(Cells(row1, ycol), Cells(row2, ycol))
ActiveChart.ChartType = xlLineMarkers

With ActiveChart.SeriesCollection(1)
    .XValues = Range(Cells(row1, xcol), Cells(row2, xcol))
    .HasErrorBars = True
    .ErrorBars.Select
    .ErrorBar Direction:=xlY, Include:=xlBoth, _
        Type:=xlCustom, Amount:=strErrorY, MinusValues:= _
        strErrorY
End With
End Sub

Но это просто дает мне линейный график, без ошибок. Может кто-нибудь мне помочь? Помощь оценена.

1 Ответ

1 голос
/ 13 июля 2011

.ErrorBar не похоже на адреса в стиле A1, что возвращает метод .Address.Ему нравятся адреса в стиле RC.

Мой совет таков: забудьте, что объединение строк создает адреса ячеек.Это грязно, и это боль!

Просто поставьте сами диапазоны.

Dim rngAmount As Range
Set rngAmount = _
    Worksheets(sheetName).Range(Cells(row1, errCol), Cells(row2, errCol))

, а затем

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