Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Некорректный возврат списка из 1 эл-та из UDF - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Некорректный возврат списка из 1 эл-та из UDF
Формуляр Дата: Вторник, 16.09.2014, 13:24 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
ДВС всем!
Имеется UDF, которая разбивает текст по разделителю строки и возвращает 1-мерный список.
При возврате списка из 1 элемента происходит его дублирование на весь диапазон ф-лы массива.
Можно ли с этим как-то бороться без преобразования списка в 2-мерный?
К сообщению приложен файл: SplitText.xls (25.5 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеДВС всем!
Имеется UDF, которая разбивает текст по разделителю строки и возвращает 1-мерный список.
При возврате списка из 1 элемента происходит его дублирование на весь диапазон ф-лы массива.
Можно ли с этим как-то бороться без преобразования списка в 2-мерный?

Автор - Формуляр
Дата добавления - 16.09.2014 в 13:24
Rioran Дата: Вторник, 16.09.2014, 13:42 | Сообщение № 2
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Формуляр, если представить текстовую строку, как колбасу, порубленую разделителем на кусочки... то можно попробовать вставить в функцию ещё одну переменную - номер отображаемого куска.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеФормуляр, если представить текстовую строку, как колбасу, порубленую разделителем на кусочки... то можно попробовать вставить в функцию ещё одну переменную - номер отображаемого куска.

Автор - Rioran
Дата добавления - 16.09.2014 в 13:42
_Boroda_ Дата: Вторник, 16.09.2014, 13:45 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16957
Репутация: 6631 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Может, что-то типа вот так?
наверное, можно еще подумать, как ошибку убрать, да некогда
К сообщению приложен файл: SplitText_1.xls (41.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМожет, что-то типа вот так?
наверное, можно еще подумать, как ошибку убрать, да некогда

Автор - _Boroda_
Дата добавления - 16.09.2014 в 13:45
Саня Дата: Вторник, 16.09.2014, 13:50 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[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 вообще убрать.

      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 вообще убрать.

      SplitText = avTmp
End Function
[/vba]

Автор - Саня
Дата добавления - 16.09.2014 в 13:50
nilem Дата: Вторник, 16.09.2014, 14:20 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
вариант
[vba]
Код
Function SplitText(txt As String, k&, Optional delim As String = vbLf) As String
SplitText = Split(Replace(Join(Filter(Split("~" & Replace(txt, delim, "~|~") & "~", "|"), _
                    "~~", False), "|"), "~", ""), "|")(k)
End Function
[/vba]
формула на листе:
Код
=ЕСЛИОШИБКА(SplitText($B$2;СТРОКА(A1)-1);"")


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениевариант
[vba]
Код
Function SplitText(txt As String, k&, Optional delim As String = vbLf) As String
SplitText = Split(Replace(Join(Filter(Split("~" & Replace(txt, delim, "~|~") & "~", "|"), _
                    "~~", False), "|"), "~", ""), "|")(k)
End Function
[/vba]
формула на листе:
Код
=ЕСЛИОШИБКА(SplitText($B$2;СТРОКА(A1)-1);"")

Автор - nilem
Дата добавления - 16.09.2014 в 14:20
Формуляр Дата: Вторник, 16.09.2014, 16:56 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Ух ты!
Сколько оказывается вариантов не пришло в мою голову. :)
Спасибо всем откликнувшимся.
Вариант Сани подходит больше всего.


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеУх ты!
Сколько оказывается вариантов не пришло в мою голову. :)
Спасибо всем откликнувшимся.
Вариант Сани подходит больше всего.

Автор - Формуляр
Дата добавления - 16.09.2014 в 16:56
Формуляр Дата: Среда, 17.09.2014, 09:29 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
В итоге, скомбинировал решения от Бороды и Сани.
Получилось так:
[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]


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеВ итоге, скомбинировал решения от Бороды и Сани.
Получилось так:
[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]

Автор - Формуляр
Дата добавления - 17.09.2014 в 09:29
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!