Проблема следующая: Написана своя формула, формула рабочая, вставляю ее в ячейку, выбираю аргументы - получаю нужное значение. Протягиваю формулу на столбец вниз, у меня также протягивается значение из первой строки, если же я например захожу во вторую строку в ячейку с этой формулой, все пересчитывается согласно формуле.
В настройках формулы пересчитываются автоматически, проверял
Добрый день!
Проблема следующая: Написана своя формула, формула рабочая, вставляю ее в ячейку, выбираю аргументы - получаю нужное значение. Протягиваю формулу на столбец вниз, у меня также протягивается значение из первой строки, если же я например захожу во вторую строку в ячейку с этой формулой, все пересчитывается согласно формуле.
В настройках формулы пересчитываются автоматически, проверялFomichev
Если имеется в виду пользовательская функция, попробуйте в начало кода дописать Application.Volatile
Добавил, не сработало приложил файл, лист "ИТ" смотреть столбец AF, определяющие столбцы AG и P
В данном файле: например ячейка AF41 = 21.05.2018 10:00:00 при условиях AG41 = 6.2 и P41 = Поволжье Если я AG41 изменяю у меня пропадают все значения из столбца AF где протянута формула
Если имеется в виду пользовательская функция, попробуйте в начало кода дописать Application.Volatile
Добавил, не сработало приложил файл, лист "ИТ" смотреть столбец AF, определяющие столбцы AG и P
В данном файле: например ячейка AF41 = 21.05.2018 10:00:00 при условиях AG41 = 6.2 и P41 = Поволжье Если я AG41 изменяю у меня пропадают все значения из столбца AF где протянута формулаFomichev
Не очень понятно чего Вы хотите. Возможно, вот этого? [vba]
Код
Function ДАТАРЕЛИЗА(x, y) As String Application.Volatile (True) Worksheets("Выпадающие списки и дельта").Select C = Worksheets("Выпадающие списки и дельта").Cells(Rows.Count, 2).End(xlUp).Row s = 0 q = 0 For i = 1 To C If Worksheets("Выпадающие списки и дельта").Cells(i, 2) = "Релизы на Foris и Siebel" Then s = i: Exit For Next i For i = s + 1 To C If Worksheets("Выпадающие списки и дельта").Cells(i, 2) <> "" And Worksheets("Выпадающие списки и дельта").Cells(i, 3) <> "" And Worksheets("Выпадающие списки и дельта").Cells(i, 4) <> "" Then q = q + 1 End If Next i a = Worksheets("Выпадающие списки и дельта").Cells(1 + s, 3).Resize(q, 3) 'это вместо нижнего For-Next ' ReDim a(1 To q, 1 To 3) ' For i = 1 To q ' a(i, 1) = Worksheets("Выпадающие списки и дельта").Cells(i + s, 3) ' a(i, 2) = Worksheets("Выпадающие списки и дельта").Cells(i + s, 4) ' a(i, 3) = Worksheets("Выпадающие списки и дельта").Cells(i + s, 5) ' Next i
'============= 'это вообще непонятно зачем. "x" и "y" у Вас определены в самой функции. ActiveCell для этой функции не имеет смысла ' ss = ActiveCell.Row ' x = Cells(ss, "p") ' y = Cells(ss, "ag") For i = 1 To q If a(i, 1) = x And a(i, 3) = y Then Z = a(i, 2): Exit For Next i If Z = Empty Then Z = "" ДАТАРЕЛИЗА = Z End Function
[/vba]
Не очень понятно чего Вы хотите. Возможно, вот этого? [vba]
Код
Function ДАТАРЕЛИЗА(x, y) As String Application.Volatile (True) Worksheets("Выпадающие списки и дельта").Select C = Worksheets("Выпадающие списки и дельта").Cells(Rows.Count, 2).End(xlUp).Row s = 0 q = 0 For i = 1 To C If Worksheets("Выпадающие списки и дельта").Cells(i, 2) = "Релизы на Foris и Siebel" Then s = i: Exit For Next i For i = s + 1 To C If Worksheets("Выпадающие списки и дельта").Cells(i, 2) <> "" And Worksheets("Выпадающие списки и дельта").Cells(i, 3) <> "" And Worksheets("Выпадающие списки и дельта").Cells(i, 4) <> "" Then q = q + 1 End If Next i a = Worksheets("Выпадающие списки и дельта").Cells(1 + s, 3).Resize(q, 3) 'это вместо нижнего For-Next ' ReDim a(1 To q, 1 To 3) ' For i = 1 To q ' a(i, 1) = Worksheets("Выпадающие списки и дельта").Cells(i + s, 3) ' a(i, 2) = Worksheets("Выпадающие списки и дельта").Cells(i + s, 4) ' a(i, 3) = Worksheets("Выпадающие списки и дельта").Cells(i + s, 5) ' Next i
'============= 'это вообще непонятно зачем. "x" и "y" у Вас определены в самой функции. ActiveCell для этой функции не имеет смысла ' ss = ActiveCell.Row ' x = Cells(ss, "p") ' y = Cells(ss, "ag") For i = 1 To q If a(i, 1) = x And a(i, 3) = y Then Z = a(i, 2): Exit For Next i If Z = Empty Then Z = "" ДАТАРЕЛИЗА = Z End Function
Function ДАТАРЕЛИЗА(ByVal x, ByVal y) As String With Worksheets("Выпадающие списки и дельта") Set r = .Range("B:B").Find("Релизы на Foris и Siebel") If Not r Is Nothing Then Set r = Range(.Cells(r.Row, r.Column), .Cells(r.End(xlDown).Row, r.End(xlToRight).Column)) arr_ = r.Value For i = 1 To UBound(arr_) If arr_(i, 2) = x And arr_(i, 4) = y Then Z = arr_(i, 3): Exit For Next i End If ДАТАРЕЛИЗА = Z End With End Function
[/vba]
Еще вариант "почищенной функции" [vba]
Код
Function ДАТАРЕЛИЗА(ByVal x, ByVal y) As String With Worksheets("Выпадающие списки и дельта") Set r = .Range("B:B").Find("Релизы на Foris и Siebel") If Not r Is Nothing Then Set r = Range(.Cells(r.Row, r.Column), .Cells(r.End(xlDown).Row, r.End(xlToRight).Column)) arr_ = r.Value For i = 1 To UBound(arr_) If arr_(i, 2) = x And arr_(i, 4) = y Then Z = arr_(i, 3): Exit For Next i End If ДАТАРЕЛИЗА = Z End With End Function