Большое спасибо, Маркус, за то, что нашел решение этой проблемы.
Вот несколько более подробных инструкций для новичков в OpenOffice Basic, таких как я. Это относится к версии 3.1:
Инструменты -> Макросы -> Организовать макросы -> OpenOffice.org Basic...
Теперь выберите из дерева проводника, где вы хотите, чтобы ваша функция работала, например. он может находиться в вашей собственной библиотеке макросов (Мои макросы / Стандартные) или храниться непосредственно в текущей электронной таблице.
Теперь введите новое имя макроса и нажмите «Создать», чтобы открыть OO.org Basic IDE. Вы увидите оператор REM и некоторые подопределения-заглушки. Удалите все это и замените на:
Function STRJOIN(range, Optional delimiter As String, Optional before As String, Optional after As String)
Dim row, col As Integer
Dim result, cell As String
result = ""
If IsMissing(delimiter) Then
delimiter = ","
End If
If IsMissing(before) Then
before = ""
End If
If IsMissing(after) Then
after = ""
End If
If NOT IsMissing(range) Then
If NOT IsArray(range) Then
result = before & range & after
Else
For row = LBound(range, 1) To UBound(range, 1)
For col = LBound(range, 2) To UBound(range, 2)
cell = range(row, col)
If cell <> 0 AND Len(Trim(cell)) <> 0 Then
If result <> "" Then
result = result & delimiter
End If
result = result & before & range(row, col) & after
End If
Next
Next
End If
End If
STRJOIN = result
End Function
Приведенный выше код имеет несколько улучшений по сравнению с оригиналом Маркуса:
Не начинается с разделителя, если первая ячейка в диапазоне пуста.
Позволяет дополнительно выбрать разделитель (по умолчанию ",") и строки, которые идут до и после каждой непустой записи в диапазоне (по умолчанию "").
Я переименовал ее в STRJOIN, поскольку «join» — это типичное название этой функции в нескольких популярных языках, таких как Perl, Python и Ruby.
Все переменные в нижнем регистре
Теперь сохраните макрос, перейдите в ячейку, где вы хотите, чтобы объединение появилось, и введите:
=STRJOIN(C3:C50)
заменив C3:C50 диапазоном строк, которые вы хотите соединить.
Чтобы настроить разделитель, вместо этого используйте что-то вроде:
=STRJOIN(C3:C50; " / ")
Если вы хотите присоединиться к группе адресов электронной почты, вы можете использовать:
=STRJOIN(C3:C50; ", "; "<"; ">")
и результат будет что-то вроде
<[email protected]>, <[email protected]>, <[email protected]>, <[email protected]>
person
Adam Spiers
schedule
10.03.2010