Нужен код VBA, чтобы построить ряд линейных данных в Excel, создать уравнения регрессии для каждой серии, а затем записать уравнения регрессии в лист Excel - PullRequest
0 голосов
/ 08 ноября 2019

У меня довольно простой код VBA, который выполняет 75% от того, что мне нужно, я просто не могу заставить последний шаг работать должным образом.

В листе Excel у меня есть два набора данных (данные X и данные Y). Данные x - это те же два значения данных для каждого отдельного случая. Затем у меня есть два столбца данных, которые составляют данные Y. Мне нужно создать точечный график Excel с целой кучей рядов данных. Ряд 1 - это два постоянных значения x с первым значением y из первого столбца и первым значением y из второго столбца. 2-я серия - это те же самые две постоянные значения x со вторым значением y из первого столбца и вторым значением y из второго столбца и так далее. Столбцы имеют около 300+ строк (следовательно, всего> 300 серий). Я понимаю, что точечный график может содержать до 256 рядов на одном графике, поэтому я не смогу разместить их все в одном графике. Не в этом дело. Я пробовал рисовать, как, скажем, 50 серий, и у меня эта часть работает нормально. Далее, поскольку все серии являются прямыми линиями, мне нужна информация о наклоне / регрессии для каждой серии, поэтому я создаю линейную линию тренда и строю уравнение на графике. У меня эта часть автоматизирована и корректно работает и в Excel. Вот где я застрял. Последний шаг - после того, как VBA создала, скажем, 50 рядов на одном графике и сгенерировала все уравнения регрессии, мне нужно, чтобы Excel взял эти уравнения и вставил их в столбец главной таблицы (где находятся данные графика). Я нашел в Google что-то, что должно было бы сделать это (захват Trendline.datalabel.text и вставка его в лист), но это не работает правильно, и я не могу понять, что я делаю неправильно. Я попробовал 20 разных вещей и все еще бью себя головой о стену. Любая помощь с последней половиной кода будет принята с благодарностью. СПАСИБО.

Sub Plot_slopes()


Dim i As Integer

Dim ChtOb As ChartObject


   Dim objTrendline As Trendline

  Dim strEquation As String


Set ChtOb = ActiveSheet.ChartObjects.Add(Left:=20, Width:=800, Top:=20, Height:=250)

ChtOb.Chart.ChartType = xlXYScatterSmoothNoMarkers
ChtOb.Activate


i = 9


For i = 9 To 59



With ActiveChart.SeriesCollection.NewSeries
    .Name = "FS" & i
    .XValues = Worksheets("summary").Range(Worksheets("summary").Cells(3, 7), Worksheets("summary").Cells(4, 7))
    .Values = Worksheets("summary").Range(Worksheets("summary").Cells(i, 13), Worksheets("summary").Cells(i, 14))
    .Trendlines.Add


     End With



With ActiveSheet.ChartObjects(1).Chart

Set objTrendline = .Trendlines(1)

With objTrendline

   .DisplayRSquared = False
    Trendlines(1).DisplayEquation = True
    strEquation = .DataLabel.Text
    Range("Q9").Offset(i, 0) = strEquation


End With

End With



    Next i




End Sub

Мне в основном нужна помощь с кодом после первого блока With и где он начинается с нового "with" ... "с activesheet.chartobjects (1) .chart" и т. Д. ), хотя у меня также возникают проблемы с частью .name в первом блоке With. Цель состоит в том, чтобы получить последний блок так, чтобы VBA записал уравнения регрессии для каждого созданного ряда в основной «сводный» рабочий лист

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