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

Вход

Регистрация

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

 

= Мир MS Excel/Склеивание текста по условию - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Склеивание текста по условию (Макросы/Sub)
Склеивание текста по условию
Butterfly Дата: Среда, 26.10.2022, 17:04 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Добрый день. Необходимо реализовать следующую задачу. Чтобы столбец A формировался по условию: если в столбце стоит 1, то склеиваем текст из шапки. Прописала формулой, что требуется. Но при большом количестве столбцов (около 100) достаточно проблематично в формуле указывать наименование каждого столбца. Подобной реализации задачи не нашла. Прошу помощи, без макроса наверное здесь не обойтись... %)
К сообщению приложен файл: 10.xlsm(16.2 Kb)
 
Ответить
СообщениеДобрый день. Необходимо реализовать следующую задачу. Чтобы столбец A формировался по условию: если в столбце стоит 1, то склеиваем текст из шапки. Прописала формулой, что требуется. Но при большом количестве столбцов (около 100) достаточно проблематично в формуле указывать наименование каждого столбца. Подобной реализации задачи не нашла. Прошу помощи, без макроса наверное здесь не обойтись... %)

Автор - Butterfly
Дата добавления - 26.10.2022 в 17:04
msi2102 Дата: Среда, 26.10.2022, 17:23 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 246
Репутация: 89 ±
Замечаний: 0% ±

Excel 2007
Если есть "=ОБЪЕДИНИТЬ()" то можно так
Код
=ОБЪЕДИНИТЬ("; ";1;ЕСЛИ(B3:E3=1;$B$2:$E$2;""))

или так
Код
=ОБЪЕДИНИТЬ("; ";1;ФИЛЬТР($B$2:$E$2;B3:E3))
К сообщению приложен файл: 11.xlsm(18.1 Kb)


Сообщение отредактировал msi2102 - Среда, 26.10.2022, 17:39
 
Ответить
СообщениеЕсли есть "=ОБЪЕДИНИТЬ()" то можно так
Код
=ОБЪЕДИНИТЬ("; ";1;ЕСЛИ(B3:E3=1;$B$2:$E$2;""))

или так
Код
=ОБЪЕДИНИТЬ("; ";1;ФИЛЬТР($B$2:$E$2;B3:E3))

Автор - msi2102
Дата добавления - 26.10.2022 в 17:23
Butterfly Дата: Среда, 26.10.2022, 18:22 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

msi2102, Спасибо за ответ! :) Офис 2010 версии :( :( :(
 
Ответить
Сообщениеmsi2102, Спасибо за ответ! :) Офис 2010 версии :( :( :(

Автор - Butterfly
Дата добавления - 26.10.2022 в 18:22
msi2102 Дата: Среда, 26.10.2022, 18:39 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 246
Репутация: 89 ±
Замечаний: 0% ±

Excel 2007
У Вас же уже написана пользовательская функция "=MergeIf()"
[vba]
Код
Function MergeIf(TextRange As Range, SearchRange As Range, Condition As String)
    Dim Delimeter As String, i As Long
    Delimeter = ", " 'символы-разделители (можно заменить на пробел или ; и т.д.)
     
    'если диапазоны проверки и склеивания не равны друг другу - выходим с ошибкой
    If SearchRange.Count <> TextRange.Count Then
        MergeIf = CVErr(xlErrRef)
        Exit Function
    End If
     
    'проходим по все ячейкам, проверяем условие и собираем текст в переменную OutText
    For i = 1 To SearchRange.Cells.Count
        If SearchRange.Cells(i) Like Condition Then OutText = OutText & TextRange.Cells(i) & Delimeter
    Next i
     
    'выводим результаты без последнего разделителя
    MergeIf = Left(OutText, Len(OutText) - Len(Delimeter))
End Function
[/vba]
К сообщению приложен файл: 12.xlsm(18.6 Kb)


Сообщение отредактировал msi2102 - Среда, 26.10.2022, 18:45
 
Ответить
СообщениеУ Вас же уже написана пользовательская функция "=MergeIf()"
[vba]
Код
Function MergeIf(TextRange As Range, SearchRange As Range, Condition As String)
    Dim Delimeter As String, i As Long
    Delimeter = ", " 'символы-разделители (можно заменить на пробел или ; и т.д.)
     
    'если диапазоны проверки и склеивания не равны друг другу - выходим с ошибкой
    If SearchRange.Count <> TextRange.Count Then
        MergeIf = CVErr(xlErrRef)
        Exit Function
    End If
     
    'проходим по все ячейкам, проверяем условие и собираем текст в переменную OutText
    For i = 1 To SearchRange.Cells.Count
        If SearchRange.Cells(i) Like Condition Then OutText = OutText & TextRange.Cells(i) & Delimeter
    Next i
     
    'выводим результаты без последнего разделителя
    MergeIf = Left(OutText, Len(OutText) - Len(Delimeter))
End Function
[/vba]

Автор - msi2102
Дата добавления - 26.10.2022 в 18:39
Butterfly Дата: Четверг, 27.10.2022, 06:19 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

msi2102, круто! Не могла разобраться, какие аргументы писать в функцию. Все получилось, спасибо! hands
 
Ответить
Сообщениеmsi2102, круто! Не могла разобраться, какие аргументы писать в функцию. Все получилось, спасибо! hands

Автор - Butterfly
Дата добавления - 27.10.2022 в 06:19
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Склеивание текста по условию (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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