@Nik писал(а):- зачем нужно "+ТДАТА()*0" ???
@Nik писал(а):- чем отличается способ 1 от способа 2 ? Они, кажись, абсолютно идентичные....
Function FormulaToArray(myCell As Range) As Variant
If myCell.HasFormula Then
FormulaToArray = Evaluate(myCell.Formula)
Else
FormulaToArray = CVErr(xlErrNA)
End If
End Function
Krasnaja Shapka писал(а):для списка сортирован по возростанию
{=ГПР(МИН(ABS(F18:K18-F29))+F29;F18:K18;1)}
Krasnaja Shapka писал(а):2 KL
"ПРОСМОТР" для не сортированого списка не очень канает...
Krasnaja Shapka писал(а):p.p.p.s. кстати, вопрос, как формулу массива посчитать в VBA c помощью Evaluate или WorksheetFunctions???
Sub test()
Dim i As Long
Dim mtx As Variant
[A1:A10] = Evaluate("{1;2;3;4;5;6;7;8;9;10}")
[B1:B10] = Evaluate("{1;1;1;1;1;1;1;1;1;1}")
mtx = Evaluate("A1:A10-B1:B10")
For i = LBound(mtx) To UBound(mtx)
Debug.Print mtx(i, 1)
Next i
End Sub
@Nik писал(а):Столкнулся с ещё одной довольно интересной задачей и при помощи формул экселя не смог выкрутиться...
Надо подсчитать максимальное количество идущих подряд единиц.
Например: для ряда {1;0;1;1;1;0} ответ - 3. Меня также устроит решение, если просто определить наличие в искомом ряде {1;1;1}. Ряд {1;0;1;1;1;0} образуется в результате вычисления формулы, а не лежит где-нибудь на листе. Допускается использовать ячейки для промежут. вычислений.
Krasnaja Shapka писал(а):p.p.s. вопрос остается открытым... нужна функция для любого несортированого списка выдающая при равноудаленных двух числах из списка большее...
у меня получилось такое
{=ИНДЕКС(A1:A6;ПОИСКПОЗ(МИН(ABS(A1:A6-B1));ЕСЛИ(ЕОШИБКА(ПОИСКПОЗ(МИН(ABS(A1:A6-B1));A1:A6-B1;0));B1-A1:A6;A1:A6-B1);0))}
да... все правильно... оказалось надо просто правильнее формулу писатьKL писал(а):Можешь конкретнее? Какая формула и в чем проблема. Evaluate, насколько я понимаю, прекрасно считает формулы массива
попробуй вот это:
@Nik писал(а):Данные находятся в том же месте, что и у тебя: А1:А18.
{=МАКС(НАИМЕНЬШИЙ(СТРОКА(СМЕЩ(A1;;;СЧЁТ(A:A)))*(2=ЕСЛИ((A1:A18=1)*(A2:A19=0);2));СТРОКА(СМЕЩ(A1;;;СЧЁТ(A:A))))-НАИМЕНЬШИЙ(СТРОКА(СМЕЩ(A1;;;СЧЁТ(A:A)))*(1=ЕСЛИ((A1:A18=0)*(A2:A19=1);1;0));СТРОКА(СМЕЩ(A1;;;СЧЁТ(A:A)))))}
Желающим разобраться в формуле напомню, что для этого удобно использовать клавишу F9 (преобразование формулы в значения). Выделяем в строке формул законченный кусок формулы и нажимаем F9 (напр.: если выделить "СТРОКА(СМЕЩ(A1;;;СЧЁТ(A:A)))" и нажать Ф9, получим {1:2:3 ....... :17:18} )
Сейчас этот форум просматривают: Google-бот и гости: 13