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

Вход

Регистрация

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

 

= Мир MS Excel/Сцепить строковые значения - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Сцепить строковые значения
Skif-F Дата: Воскресенье, 27.07.2014, 01:24 | Сообщение № 1
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Лет несколько назад возникла необходимость сцепить в одну строку значения, получаемые в результате работы формулы массива. Естественно, функция "СЦЕПИТЬ" в таких условиях работать отказалась пришлось сделать свою, что и хочу представить.
[vba]
Код
Function СУММСТРОК(Разделитель As String, ParamArray ДИАПАЗОН()) As String
     'Суммирует (сцепляет) строковые значения, заданные в виде ячеек, диапазонов ячеек, строковых и числовых констант,
     'разделяя их Разделитель'ем
     'Предназначена для вызова из листа
     'Может работать в формулах массива. Не работает сос ссылками типа Лист2:Лист3!B1
     'Используется рекурсия
     Dim x As Variant    'Переменная цикла для перебора элементов ДИАПАЗОН'а
     Dim Y As Variant    'Переменная цикла для перебора элементов "х"
     Dim Result As String    'Результирующая строка
     Result = ""
     For Each x In ДИАПАЗОН 'ДИАПАЗОН может содержать: текст, число, диапазон, массив диапазонов, массив значений
         If IsObject(x) Then
             If TypeName(x) = "Range" Then 'Обработка диапазона
                 If x.Count > 1 Then 'Если больше одной ячейки в диапазоне
                     For Each Y In x 'Перебираем все ячейки диапазона
                         FixResult Result, СУММСТРОК(Разделитель, Y), Разделитель
                     Next Y
                 Else
                     FixResult Result, CStr(x.Value), Разделитель    'Всего одна ячейка
                 End If
             End If
         ElseIf IsArray(x) Then  'Обработка массивов
             For Each Y In x 'Перебираем все элементы массива
                 FixResult Result, СУММСТРОК(Разделитель, Y), Разделитель
             Next Y
         Else                    'Обработка простых типов
             FixResult Result, CStr(x), Разделитель
         End If
     Next x
     СУММСТРОК = Result
End Function
Private Sub FixResult(ByRef Result As String, ByVal Temp3 As String, ByVal Разделитель As String)
     If Temp3 <> "" Then Result = IIf(Result = "", "", Result + Разделитель) + Temp3 'Пропускаем пустые значения
End Sub
[/vba]
 
Ответить
СообщениеЛет несколько назад возникла необходимость сцепить в одну строку значения, получаемые в результате работы формулы массива. Естественно, функция "СЦЕПИТЬ" в таких условиях работать отказалась пришлось сделать свою, что и хочу представить.
[vba]
Код
Function СУММСТРОК(Разделитель As String, ParamArray ДИАПАЗОН()) As String
     'Суммирует (сцепляет) строковые значения, заданные в виде ячеек, диапазонов ячеек, строковых и числовых констант,
     'разделяя их Разделитель'ем
     'Предназначена для вызова из листа
     'Может работать в формулах массива. Не работает сос ссылками типа Лист2:Лист3!B1
     'Используется рекурсия
     Dim x As Variant    'Переменная цикла для перебора элементов ДИАПАЗОН'а
     Dim Y As Variant    'Переменная цикла для перебора элементов "х"
     Dim Result As String    'Результирующая строка
     Result = ""
     For Each x In ДИАПАЗОН 'ДИАПАЗОН может содержать: текст, число, диапазон, массив диапазонов, массив значений
         If IsObject(x) Then
             If TypeName(x) = "Range" Then 'Обработка диапазона
                 If x.Count > 1 Then 'Если больше одной ячейки в диапазоне
                     For Each Y In x 'Перебираем все ячейки диапазона
                         FixResult Result, СУММСТРОК(Разделитель, Y), Разделитель
                     Next Y
                 Else
                     FixResult Result, CStr(x.Value), Разделитель    'Всего одна ячейка
                 End If
             End If
         ElseIf IsArray(x) Then  'Обработка массивов
             For Each Y In x 'Перебираем все элементы массива
                 FixResult Result, СУММСТРОК(Разделитель, Y), Разделитель
             Next Y
         Else                    'Обработка простых типов
             FixResult Result, CStr(x), Разделитель
         End If
     Next x
     СУММСТРОК = Result
End Function
Private Sub FixResult(ByRef Result As String, ByVal Temp3 As String, ByVal Разделитель As String)
     If Temp3 <> "" Then Result = IIf(Result = "", "", Result + Разделитель) + Temp3 'Пропускаем пустые значения
End Sub
[/vba]

Автор - Skif-F
Дата добавления - 27.07.2014 в 01:24
Alex_ST Дата: Воскресенье, 27.07.2014, 20:01 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3214
Репутация: 615 ±
Замечаний: 0% ±

2003
Skif-F, а ПОИСКом не пользовались и СЮДА не заглядывали прежде чем создавать топик?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеSkif-F, а ПОИСКом не пользовались и СЮДА не заглядывали прежде чем создавать топик?

Автор - Alex_ST
Дата добавления - 27.07.2014 в 20:01
Skif-F Дата: Воскресенье, 27.07.2014, 22:01 | Сообщение № 3
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Пользовался.
Поправьте, если ошибаюсь, но, по-моему, ни один из указанных вариантов не разберёт такой запрос:
Код
=СУММСТРОК(", ";B5;C5;D5;1;2;2;"Привет";{3;4;"Пока"};B8:D8)

Причём, если вызывать не из листа, а из кода, то вложенность массив/диапазон не ограничена
 
Ответить
СообщениеПользовался.
Поправьте, если ошибаюсь, но, по-моему, ни один из указанных вариантов не разберёт такой запрос:
Код
=СУММСТРОК(", ";B5;C5;D5;1;2;2;"Привет";{3;4;"Пока"};B8:D8)

Причём, если вызывать не из листа, а из кода, то вложенность массив/диапазон не ограничена

Автор - Skif-F
Дата добавления - 27.07.2014 в 22:01
RAN Дата: Воскресенье, 27.07.2014, 22:07 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А в файлике можно глянуть?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА в файлике можно глянуть?

Автор - RAN
Дата добавления - 27.07.2014 в 22:07
Skif-F Дата: Воскресенье, 27.07.2014, 23:04 | Сообщение № 5
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Пожалуйста.
К сообщению приложен файл: 4209274.xls (40.5 Kb)
 
Ответить
СообщениеПожалуйста.

Автор - Skif-F
Дата добавления - 27.07.2014 в 23:04
  • Страница 1 из 1
  • 1
Поиск:

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