ДВС всем! Имеется UDF, которая разбивает текст по разделителю строки и возвращает 1-мерный список. При возврате списка из 1 элемента происходит его дублирование на весь диапазон ф-лы массива. Можно ли с этим как-то бороться без преобразования списка в 2-мерный?
ДВС всем! Имеется UDF, которая разбивает текст по разделителю строки и возвращает 1-мерный список. При возврате списка из 1 элемента происходит его дублирование на весь диапазон ф-лы массива. Можно ли с этим как-то бороться без преобразования списка в 2-мерный?Формуляр
Формуляр, если представить текстовую строку, как колбасу, порубленую разделителем на кусочки... то можно попробовать вставить в функцию ещё одну переменную - номер отображаемого куска.
Формуляр, если представить текстовую строку, как колбасу, порубленую разделителем на кусочки... то можно попробовать вставить в функцию ещё одну переменную - номер отображаемого куска.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Function SplitText(txt As String, Optional delim As String = vbLf, _ Optional noEmpty As Boolean = 0) As String() 'Разбивает исходную строку на части, в соответствии с заданным разделителем 'и возвращает их в виде "горизонтального" массива 'txt - исходная текстовая строка 'delim - разделитель 'noEmpty - флажок игнорирования пустых строк If noEmpty Then txt = TrimCharDup(txt, delim)
Dim avTmp avTmp = Split(txt, delim)
If UBound(avTmp) = 0 Then _ ReDim Preserve avTmp(0 To Application.Caller.Cells.Count) ' можно If вообще убрать.
SplitText = avTmp End Function
[/vba]
[vba]
Код
Function SplitText(txt As String, Optional delim As String = vbLf, _ Optional noEmpty As Boolean = 0) As String() 'Разбивает исходную строку на части, в соответствии с заданным разделителем 'и возвращает их в виде "горизонтального" массива 'txt - исходная текстовая строка 'delim - разделитель 'noEmpty - флажок игнорирования пустых строк If noEmpty Then txt = TrimCharDup(txt, delim)
Dim avTmp avTmp = Split(txt, delim)
If UBound(avTmp) = 0 Then _ ReDim Preserve avTmp(0 To Application.Caller.Cells.Count) ' можно If вообще убрать.
В итоге, скомбинировал решения от Бороды и Сани. Получилось так: [vba]
Код
Function SplitText(txt As String, Optional delim As String = vbLf, _ Optional noEmpty As Boolean = 0) As String() Dim n% n = Application.Caller.Cells.Count If noEmpty Then txt = TrimCharDup(txt, delim) SplitText = Split(txt + String(n - 1, delim), delim, n)
End Function
[/vba]
В итоге, скомбинировал решения от Бороды и Сани. Получилось так: [vba]
Код
Function SplitText(txt As String, Optional delim As String = vbLf, _ Optional noEmpty As Boolean = 0) As String() Dim n% n = Application.Caller.Cells.Count If noEmpty Then txt = TrimCharDup(txt, delim) SplitText = Split(txt + String(n - 1, delim), delim, n)