А я вот окончательно запутался, если сначала предполагалось найти точку перегиба, т.е. кривая в этой точке и окрестностях должна быть почти прямая, с минимальной "кривизной"
Цитата
Arteeck написал #3: Может быть здесь стоит искать точку с минимальным радиусом кривизы
Но "с минимальным радиусом" это же наоборот - крутой поворот плоской кривой - радиус кривизны (число) обратен кривизне (числу). Arteeck, определяйтесь - "на пляж или в горы ?"
Позанудствовал, нашёл ещё ссылку на вывод формулы радиуса (удивляла степень 3/2) https://mnk.mpei.ru/PDF/Lecmatem11.html Принцип понял, но разобрался только когда сам расписал выкладки на бумажке, в прикреплённом мои изыскания
Arteeck, ну, по формуле tutochkin (# и с производными полинома всё получается: радиус кривизны максимален (а кривизна минимальна) - ближе к концу кривой.
Arteeck, нет у вашего графика (явно) точки перегиба - вторая производная полинома нигде в нуль не обращается, и первая не имеет экстремумов (признаки т.п. функции). Перепроверил дифференцируя конечными разностями.
Цитата
написал: Может быть здесь стоит искать точку с минимальным радиусом кривизы
Ой, лишнее (скопипастил). В процедуре События_рабочего_листа ссылка на Этот_лист не нужна Set wsPivot = ThisWorkbook.Worksheets("сводная")
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objAxis As Axis
'
Set objAxis = Charts("Диаграмма1").Axes(xlCategory)
If Not Intersect(Target, Range("B14")) Is Nothing Then
objAxis.MinimumScale = Range("B14").Value
End If
If Not Intersect(Target, Range("B16")) Is Nothing Then
objAxis.MaximumScale = Range("B16").Value
End If
End Sub
Option Explicit
Option Base 1
Sub Test1()
Dim Rng As Range
Dim T1(), T2(), X, Y, H
Dim XColl As New Collection, YColl As New Collection
Dim RCnt As Long, N As Long, M As Long, J As Long, K As Long, L As Long
'
Set Rng = [B5]
'
H = Rng.Value
Set Rng = Rng.CurrentRegion
RCnt = Rng.Rows.Count - 1
T1 = Rng.Offset(1).Resize(RCnt, 3).Value
ReDim Xs(RCnt), Ys(RCnt)
On Error Resume Next
For K = 1 To RCnt
XColl.Add T1(K, 1), CStr(T1(K, 1))
YColl.Add T1(K, 2), CStr(T1(K, 2))
Next
On Error GoTo 0
N = XColl.Count
M = YColl.Count
ReDim T2(N + 1, M + 1)
T2(1, 1) = H
For Each X In XColl
L = L + 1: T2(L + 1, 1) = X
J = 0
For Each Y In YColl
J = J + 1: T2(1, J + 1) = Y
For K = 1 To RCnt
If T1(K, 1) = X And T1(K, 2) = Y Then
T2(L + 1, J + 1) = T1(K, 3): Exit For
End If
Next
Next
Next
'
Set Rng = [W12]
'
With Rng.CurrentRegion
.ClearContents
.Resize(N + 1, M + 1).Value = T2
End With
End Sub
Евгений Смирнов #1 написал: поясню цель. Необходимо заменить элемент коллекции без изменения структуры коллекции (порядка в коллекции)
На чистом VBA, по принципу: шило_на_мыло, мыло_на_шило:
Код
Sub ReplaceItem(Key As String, NewItem, Coll As Collection)
Const TempKey As String = "TempKey.KeyTemp.TempKey"
With Coll
.Add NewItem, TempKey, Key
.Remove Key
.Add NewItem, Key, TempKey
.Remove TempKey
End With
End Sub
Sub Test123()
Dim Coll As New Collection
With Coll
.Add "Item1", "Key1"
.Add "Item2", "Key2"
.Add "Item3", "Key3"
'
Debug.Print "-----------"
Debug.Print .Item("Key1")
Debug.Print .Item("Key2")
Debug.Print .Item("Key3")
'
ReplaceItem "Key2", "Item100", Coll
'
Debug.Print "-----------"
Debug.Print .Item("Key1")
Debug.Print .Item("Key2")
Debug.Print .Item("Key3")
End With
End Sub
WaleryN #28 написал: а можно создавать новые листы письма без заголовка?
Можно - просто копированием (сняв защиту листа (она без пароля)) и подчистив.
Шапка и "валенки" (где 'подпись') заполняются в ячейках на листе, а центр бланка - в тексбоксе, нажав на одну из кнопок (2 шт.) или хоткеем Ctrl + Enter, закрывается текстбокс крестиком или Enter. Плюс - текстбокс заполняется шустро. Минус - нельзя сделать встаку/удаление в середине тексбоксовой строки (как в VB-массивах - можно только наращивать или укорачивать хвост (причём только последний)).
Пока сделано только для "входящих" бланков. А, защита листа - чтобы Tab'ами переходить на нужные ячейки-поля.
WaleryN, тогда уж уточните: что такое "листы письма без заголовка" ? без заполненых полей (полужирный шрифт) ? (а лучше, ещё раз скинте файл с экземпляром/ми этого пустого бланка/ков) Входящие и Исходящие в одной книге или в разных ? В книге будут листы только с такими бланками ?
Выбор формулы расчета в зависимости от двух критериях, При нахождении определенных критериев в соседних столбцах подставлять определенную формулу из списка
p_vah, если Ваши формулы для типов работ верны, то после алгебраических пробразований, увидим что они зависят от затрат этапа, и НЕ зависят от продолжительности (точнее - продолжительность выносится за скобки). Обозначим Затраты1 - C1, Затраты2 - C2 (и т.д.), а продолжительность буквой P: T1 = C1*P + C3/C2 - C4*P; T3--> T1 = (C1* + C4/C2 - C4)*P T2 = C1*P + C5/C2 - C4*P; T5--> T2 = (C1* + C1/C2 - C4)*P T3 = C4*P; T3 = C4*P T4 = C4*P - C5; T5--> T4 = (C4 - C1)*P T5 = C1*P; T5 = C1*P Следовательно, таблицу T/P можно локализовать, например на листе 'Ish', а потом значения T/P умножить на P на листе 'Rab'.
Ещё (если нет 365-го Офиса) динамический выпадающий_список - уникальных из столбца умной_таблицы, можно сделать с помощью сводной_таблицы (см. столбец A на листе 'for list'). Минус этого способа - лишнее телодвижение: после добавления строк в основную таблицу, нужно нажать кнопку 'Обновить'.