У меня есть код VBA, который генерирует два количества данных. Этот анализ повторяется, чтобы генерировать больше данных в тех же столбцах, но для разных условий и помещает эти данные ниже результата первой итерации. Как получить код для генерации XY Scatter с плавными линиями рядом с каждым блоком данных? Моя попытка ниже, но я столкнулся с тремя проблемами: 1) Он генерирует только один график до того, как отладка остановит макрос, 2) он генерирует барьер, а не разброс 3) Как получить каждый граф, который генерируется для масштабирования рядом с данными, которые он рисует, так что я получаю столбец графов?Автоматическое распознавание диапазона данных при построении графика Excel VBA
Sub TestExample()
Dim NoIteration As Integer
Dim Iteration As Integer
NoIteration = Range("N26").Value
Dim YieldIteration As Integer
Dim NoOfJumps As Long
Dim minyield As Long
Dim maxyield As Long
Dim jump As Long
NoOfJumps = Range("Q24").Value
minyield = Range("Q25").Value
maxyield = Range("Q26").Value
jump = Range("Q27").Value
Dim xaxis As Range
Dim yaxis As Range
Dim c As Chart
Dim Sh As String
Sh = ActiveSheet.Name
Range("M29:T1000").Select
Selection.Clear
For jump = 0 To NoOfJumps
For Iteration = 0 To NoIteration
'Print Intervals
Range("M30").Offset(NoIteration + Iteration + 4, 0).Value = Range("V19").Value * Iteration
'Solve weights for minimum Spot SD for each given interval
SolverReset
SolverOk SetCell:="$T$18", MaxMinVal:=2, ValueOf:="0", ByChange:="$O$20:$R$20"
SolverAdd CellRef:="$T$17", Relation:=2, FormulaText:=Range("M30").Offset(NoIteration + Iteration + 4, 0).Value
SolverAdd CellRef:="$T$20", Relation:=2, FormulaText:=1
SolverAdd CellRef:="$T$7", Relation:=1, FormulaText:=minyield + jump 'State min required yield
SolverAdd CellRef:="$T$7", Relation:=3, FormulaText:=maxyield + jump 'State max required yield
SolverAdd CellRef:="$O$20:$R$20", Relation:=3, FormulaText:="0"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
'Print Income Return, SD
Range("N30").Offset(Iteration + jump * 50, 0).Value = Range("T7").Value
Range("O30").Offset(Iteration + jump * 50, 0).Value = Range("T8").Value
'Print Spot Return, SD
Range("N30").Offset(NoIteration + Iteration + 4 + jump * 50, 0).Value = Range("T17").Value
Range("O30").Offset(NoIteration + Iteration + 4 + jump * 50, 0).Value = Range("T18").Value
'Print Total Return, SD
Range("N30").Offset(NoIteration * 2 + Iteration + 8 + jump * 50, 0).Value = Range("AC17").Value
Range("O30").Offset(NoIteration * 2 + Iteration + 8 + jump * 50, 0).Value = Range("AC18").Value
Next Iteration
Set yaxis = Range(Range("N30").Offset(Iteration + jump * 50, 0), Range("N30").End(xlDown))
Set xaxis = Range(Range("O30").Offset(Iteration + jump * 50, 0), Range("$O30").End(xlDown))
Set c = ActiveWorkbook.Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:=Sh
'Set c = c.Location(Where:=xlLocationAsObject, Name:="Sheet1")
With c
.ChartType = xlXYScatterLines
' set other chart properties
End With
Dim s As Series
Set s = c.SeriesCollection.NewSeries
With s
.Values = yaxis
.XValues = xaxis
End With
Next jump
End Sub
Это то, что мне было нужно, но существенной проблемой, с которой я столкнулся, был поиск данных для построения графика. Поскольку исходный код печатает блоки данных, разделенных пробелом, он должен был получить код, который просматривает каждый блок и намечает график рядом с ним, поскольку первый код проходит через цикл. Одна из проблем, которые возникают у меня, заключается в том, что если я вставляю код ниже в приведенный выше код, он отлично работает. Однако, если я «позвоню», это не так. Идея почему. Поскольку приведенный ниже код является лишь частью более крупного кода (который отображает несколько графиков), вызов будет полезен. – Mary
Итак, значит ли это, что проблема решена ?? –
Да, спасибо. Я поставил решение ниже, см. Раздел srs.Xvalues / srs.Values. Однако непонятно, почему он не работает под Call. – Mary