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>"&REGEX(A1;"-";"</s><s>";"g")&"</s></t>";"sum(//s) div count(//s)")


Мы могли бы даже реализовать проверку числовых узлов:

=FILTERXML("<t><s>"&REGEX(A1;"-";"</s><s>";"g")&"</s></t>";"sum(//s[.*0=0]) div count(//s[.*0=0])")


Глядя на это, я нахожу это неудачным Excelне допускает прямых манипуляций внутри самого выражения. УдивленLibreOffice делает!

Другие вопросы по тегам