Доброго времени суток. Подскажите с решением вопроса.
В диаграммах есть такой инструмент - "Отобразить линию тренда". Как нарисовать такую линию на листе - для диапазона G2:AR23, если рассматривать ячейки с единицами - как точки, с определенными координатами ?
Доброго времени суток. Подскажите с решением вопроса.
В диаграммах есть такой инструмент - "Отобразить линию тренда". Как нарисовать такую линию на листе - для диапазона G2:AR23, если рассматривать ячейки с единицами - как точки, с определенными координатами ?SergVrn
[offtop]Я только спрошу, ни на что не претендуя - это всё зачем? Какую глобальную задачу вы пытаетесь решить в программе, которая для этого явно не предназначена?
Цитата
с определенными координатами ?
по какому принципу эти координаты присваивать? Тренд всегда подразумевается линейный, или это снова путь к распознаванию образов? Почему вы принципиально не отвечаете на закономерный вопрос - зачем?[/offtop]
[offtop]Я только спрошу, ни на что не претендуя - это всё зачем? Какую глобальную задачу вы пытаетесь решить в программе, которая для этого явно не предназначена?
Цитата
с определенными координатами ?
по какому принципу эти координаты присваивать? Тренд всегда подразумевается линейный, или это снова путь к распознаванию образов? Почему вы принципиально не отвечаете на закономерный вопрос - зачем?[/offtop]buchlotnik
Сообщение отредактировал buchlotnik - Вторник, 05.12.2017, 07:42
по какому принципу эти координаты присваивать? Тренд всегда подразумевается линейный
Я в ВБА - не особо разбираюсь. Так что - это вопрос к профессионалам. Ну вот знающие люди - рекомендуют использовать - для нахождения уравнения линии можно использовать функцию в VBA - WorksheetFunction.LinE
Однако - как именно ее к этой задаче применить - мне непонятно.
по какому принципу эти координаты присваивать? Тренд всегда подразумевается линейный
Я в ВБА - не особо разбираюсь. Так что - это вопрос к профессионалам. Ну вот знающие люди - рекомендуют использовать - для нахождения уравнения линии можно использовать функцию в VBA - WorksheetFunction.LinE
Однако - как именно ее к этой задаче применить - мне непонятно.SergVrn
ах, простите - ретируюсь; тем более вы так и не ответили на главный вопрос - зачем? [p.s.]а если знающие люди отвечают на тот же вопрос - это попахивает нарушением 5.s
Цитата
Ну вот знающие люди
ах, простите - ретируюсь; тем более вы так и не ответили на главный вопрос - зачем? [p.s.]а если знающие люди отвечают на тот же вопрос - это попахивает нарушением 5.sbuchlotnik
Sub paint_line() Dim N%, i%, r%, c%, rng#(), xmin#, xmax#, sumX#, sumx2#, sumY#, sumXY#, a0#, a1# 'скока точек N = Application.WorksheetFunction.Count(Range("G2:AR23")) ReDim rng(1 To N, 1 To 2) 'сняли координаты центров ячеек i = 0 For r = 2 To 23 For c = 7 To 44 With Cells(r, c) If .Value = 1 Then i = i + 1 rng(i, 1) = .Left + .Width / 2 rng(i, 2) = .Top + .Height / 2 End If End With Next c Next r 'считаем регрессию и диапазон xmin = rng(1, 1) xmax = rng(1, 1) For i = 1 To N If rng(i, 1) < xmin Then xmin = rng(i, 1) If rng(i, 1) > xmax Then xmax = rng(i, 1) sumX = sumX + rng(i, 1) sumx2 = sumx2 + rng(i, 1) ^ 2 sumY = sumY + rng(i, 2) sumXY = sumXY + rng(i, 1) * rng(i, 2) Next a1 = (N * sumXY - sumX * sumY) / (N * sumx2 - sumX ^ 2) a0 = (sumY - a1 * sumX) / N 'рисуем ActiveSheet.Shapes.AddConnector(msoConnectorStraight, xmin, a0 + a1 * xmin, xmax, a0 + a1 * xmax).Select End Sub
[/vba]
сильно помогло?
Цитата
даже такого тренда нет
ну вот есть:
[vba]
Код
Sub paint_line() Dim N%, i%, r%, c%, rng#(), xmin#, xmax#, sumX#, sumx2#, sumY#, sumXY#, a0#, a1# 'скока точек N = Application.WorksheetFunction.Count(Range("G2:AR23")) ReDim rng(1 To N, 1 To 2) 'сняли координаты центров ячеек i = 0 For r = 2 To 23 For c = 7 To 44 With Cells(r, c) If .Value = 1 Then i = i + 1 rng(i, 1) = .Left + .Width / 2 rng(i, 2) = .Top + .Height / 2 End If End With Next c Next r 'считаем регрессию и диапазон xmin = rng(1, 1) xmax = rng(1, 1) For i = 1 To N If rng(i, 1) < xmin Then xmin = rng(i, 1) If rng(i, 1) > xmax Then xmax = rng(i, 1) sumX = sumX + rng(i, 1) sumx2 = sumx2 + rng(i, 1) ^ 2 sumY = sumY + rng(i, 2) sumXY = sumXY + rng(i, 1) * rng(i, 2) Next a1 = (N * sumXY - sumX * sumY) / (N * sumx2 - sumX ^ 2) a0 = (sumY - a1 * sumX) / N 'рисуем ActiveSheet.Shapes.AddConnector(msoConnectorStraight, xmin, a0 + a1 * xmin, xmax, a0 + a1 * xmax).Select End Sub