Libreoffice Calc: сумма чисел в тексте
У меня есть следующие числа в виде текста в ячейке:
"12-14-14-16-18-10"
И теперь мне нужно вычислить среднее значение, но я не хочу создавать дополнительные столбцы, так как длина данных варьируется.
Есть ли способ сделать это с помощью формулы?
1 ответ
Другими словами: вы хотите разделить строковое значение символом "-" и вычислить среднее его элементов? AFAIK единственный способ решить эту проблему - использовать небольшой макрос (определяемая пользователем функция AKA), поскольку LO Calc не предоставляет функцию разделения / токенизации на уровне электронной таблицы.
Быстрое и грязное решение может выглядеть следующим образом:
Function split_average(a)
Dim theArray(UBound(Split(a, "-"))) As Integer
theArray = Split(a, "-")
Dim SumVal As Integer
For i = 0 To UBound(theArray)
SumVal = SumVal + theArray(i)
Next i
split_average = SumVal / (UBound(theArray) + 1)
End Function
Конечно, нет проверки типов и так далее, так что попробуйте на свой страх и риск. Чтобы использовать его, просто скопируйте его в стандартный модуль StarBasic, сохраните и вызовите его внутри электронной таблицы, используя =split_average(A1)
, Общие сведения о пользовательских функциях см. В документах LO Calc.
Я знаю, что это старая ветка, но позвольте мне добавить свои два цента. ИспользоватьFILTERXML
и немного XPATH
магия =)
=FILTERXML("<t><s>"®EX(A1;"-";"</s><s>";"g")&"</s></t>";"sum(//s) div count(//s)")
Мы могли бы даже реализовать проверку числовых узлов:
=FILTERXML("<t><s>"®EX(A1;"-";"</s><s>";"g")&"</s></t>";"sum(//s[.*0=0]) div count(//s[.*0=0])")
Глядя на это, я нахожу это неудачным Excel
не допускает прямых манипуляций внутри самого выражения. УдивленLibreOffice
делает!