Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2011, 16:47   #1
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию Нужна функция =сцепить(), только с условием

Объясню на примере:
В столбце А1:А100 в некоторых ячейках есть текст, а некоторые пустые.
В столбце В1:В100 все ячейки заполнены текстом.

В ячейках столбца D надо получить результат:

Если А1 не пустая, то D1 будет равняться В1
Если А2 пустая, то D1 будет равняться сцепить(В1;" ";В2)
Если и А3 пустая, то D1 будет равняться сцепить(В1;" ";В2;" ";В3)
И так далее пока ячейка А будет пустой.

При этом, если ячейка А пустая, то ячейка D в этой строке тоже будет пустой.
т.е. Если в данном примере функцию вставить в строки D2 и D3 то результат будет "".


Если написать формулу из имеющихся стандартных функций, то получится так:
=ЕСЛИ(A1<>"";ЕСЛИ(A2<>"";B1;ЕСЛИ(A3 <>"";СЦЕПИТЬ(B1;" ";B2);ЕСЛИ(A4<>"";СЦЕПИТЬ(B1;" ";B2;" ";B3);СЦЕПИТЬ(B1;" ";B2;" ";B3;" ";B4))));"")

Только эта формула ограничивается четырьмя "ячейками ниже", да и не универсальная... если что каждый раз надоест "переделывать".

Как написать функцию, что бы в итоге она делал то же самое, то вид ее был, например, такой:
=unite(A1;B1)
Вложения
Тип файла: rar Функция сцепить с условием.rar (4.5 Кб, 58 просмотров)
Нет ничего невозможного, главное верить в это.

Последний раз редактировалось Snekich; 19.11.2011 в 18:26.
Snekich вне форума Ответить с цитированием
Старый 19.11.2011, 16:58   #2
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Кроим, шьем, сцепляем. Задаром. На Ваших файлах.
vikttur вне форума Ответить с цитированием
Старый 19.11.2011, 18:27   #3
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

Цитата:
Сообщение от vikttur Посмотреть сообщение
Кроим, шьем, сцепляем. Задаром. На Ваших файлах.
Прицепил файл к первому сообщению.
Буду очень благодарен за помощь.
Нет ничего невозможного, главное верить в это.
Snekich вне форума Ответить с цитированием
Старый 19.11.2011, 19:00   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

С вспомогательным столбцом:
Вложения
Тип файла: rar Функция сцепить с условием1.rar (6.9 Кб, 91 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 19.11.2011, 19:42   #5
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
С вспомогательным столбцом:
Спасибо, но по сути почти то же самое, только еще вспомогательный столбец.
Мне бы в идеале НОВУЮ функцию как-нибудь придумать...
(Public Function ....)
Нет ничего невозможного, главное верить в это.
Snekich вне форума Ответить с цитированием
Старый 19.11.2011, 21:56   #6
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Код:
Public Function Conc$(c As Range)
    If c.Value = "" Then Exit Function
    If Range(c, c.End(xlDown).Offset(-1)).Offset(, 1).Count = 1 Then Conc = c.Offset(, 1): Exit Function
    Conc = Trim(Join(Application.Transpose(Range(c, c.End(xlDown).Offset(-1)).Offset(, 1).Value), " "))
End Function
Вложения
Тип файла: rar Функция сцепить с условием.rar (9.7 Кб, 83 просмотров)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 20.11.2011, 10:58   #7
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Код:
Public Function Conc$(c As Range)
    If c.Value = "" Then Exit Function
    If Range(c, c.End(xlDown).Offset(-1)).Offset(, 1).Count = 1 Then Conc = c.Offset(, 1): Exit Function
    Conc = Trim(Join(Application.Transpose(Range(c, c.End(xlDown).Offset(-1)).Offset(, 1).Value), " "))
End Function
Отлично! Огромное спасибо. Только еще бы переменную ввести одну "количество столбцов направо".
Сделал так:

Public Function Conc$(c As Range, x As Integer)
If c.Value = "" Then Exit Function
If Range(c, c.End(xlDown).Offset(-1)).Offset(, x).Count = 1 Then Conc = c.Offset(, x): Exit Function
Conc = Trim(Join(Application.Transpose(Ran ge(c, c.End(xlDown).Offset(-1)).Offset(, x).Value), " "))
End Function
Нет ничего невозможного, главное верить в это.

Последний раз редактировалось Snekich; 20.11.2011 в 17:58.
Snekich вне форума Ответить с цитированием
Старый 20.11.2011, 18:09   #8
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Код:
Public Function Conc$(c As Range)
    If c.Value = "" Then Exit Function
    If Range(c, c.End(xlDown).Offset(-1)).Offset(, 1).Count = 1 Then Conc = c.Offset(, 1): Exit Function
    Conc = Trim(Join(Application.Transpose(Range(c, c.End(xlDown).Offset(-1)).Offset(, 1).Value), " "))
End Function

Еще буду благодарен, если скинете ссылку где можно подробно почитать о всех "словах" которые использованы в данной функции.
Как работает понял и догадываюсь значении всего что в ней использовано, но хочется поподробней почитать, что бы самому разобраться.
Нет ничего невозможного, главное верить в это.
Snekich вне форума Ответить с цитированием
Старый 20.11.2011, 18:18   #9
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
где можно подробно почитать о всех "словах"
Я обычно пользуюсь клавишей F1.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна формула с условием Nasten'ka7 Microsoft Office Excel 9 04.03.2011 00:01
Функция СЦЕПИТЬ как вставить пробел kzld Microsoft Office Excel 2 11.09.2010 10:31
функция сцепить и дата StasSv Microsoft Office Excel 2 13.08.2008 13:01
Помогите сцепить ячейки с определенным условием 7erge Microsoft Office Excel 4 23.07.2008 09:47
начал учить только-только - нужна ваша помошь vanDJ Помощь студентам 20 18.12.2007 21:53