Форум

Прежде чем задать вопрос - попробуйте найти ответ поиском. Если спрашиваете - будьте вежливы и терпеливы, четко и подробно сформулируйте свой вопрос, приложите файл с примером (если возможно) - и вам обязательно помогут. Один ум - хорошо, а два сапога - пара!
Яndex
 

Главный форум • Форумы • Копилка идей • Сцепить данные в столбце по условию повторения данных в соседнем. • 
Автор Тема
VDM
Число сообщений: 148
03.06.2010, 14:07
Сцепить данные в столбце по условию повторения данных в соседнем.
Здравствуйте.
Уважаемые Форумчане.

Подскажите пожалуйста, возможно ли записать формулу (возможно нужна формула массива??), которая сможет сцепить построчно диапазон данных в столбце, заданных повторением данных в соседнем столбце.

Файл прилагаю.
Спасибо.


К сообщению прикреплен файл: post_128797.xls
Hugo
Число сообщений: 1311
03.06.2010, 14:23
UDF:
=PERSONAL.XLS!VLOOKUPCOUPLE($A$2:$B$13;1;A2;2;", ")

Function VLOOKUPCOUPLE(Table As Range, SearchColumnNum As Integer, SearchValue As Variant, _
RezultColumnNum As Integer, Separator_ As String)
'Table - таблица, где ищем
'SearchColumnNum - столбец, где ищем
'SearchValue - данные, которые ищем
'RezultColumnNum - колонка, откуда берём результат
'Separator_ - разделитель, желательно вводить с пробелом в конце

Dim i As Integer
Dim iCount As Integer

For i = 1 To Table.Rows.Count
If Table.Cells(i, SearchColumnNum) = SearchValue Then
If VLOOKUPCOUPLE <> "" Then
VLOOKUPCOUPLE = VLOOKUPCOUPLE & Separator_ & Table.Cells(i, RezultColumnNum)
Else
VLOOKUPCOUPLE = Table.Cells(i, RezultColumnNum)
End If
End If
Next i
If VLOOKUPCOUPLE = 0 Then VLOOKUPCOUPLE = ""
End Function
_______________________
webmoney: E265281470651 Z422237915069 R41892628200
Hugo
Число сообщений: 1311
03.06.2010, 14:25
Да, вот только пестроту наводите вручную, ну или макросом, но тогда формулу можно не городить, а сразу всё делать им.
_______________________
webmoney: E265281470651 Z422237915069 R41892628200
Hugo
Число сообщений: 1311
03.06.2010, 14:29
И ещё - тут намедни учителя отшили, который двоечников хотел в линеечку построить - вот ему бы тоже подошло, но раз закрыли - так закрыли, я промолчал... :)
_______________________
webmoney: E265281470651 Z422237915069 R41892628200
VDM
Число сообщений: 148
03.06.2010, 14:43
Hugo, спасибо большое - Ваша функция работает!

А пестрота, - пестроту сделал только для лучшего понимания вопроса, судя по всему зря старался, и так всё оказалось понятно.

Serge 007

Число сообщений: 5994
03.06.2010, 15:32
Re: 
(Автор: Hugo, Дата: 03.06.2010 02:29)
...тут намедни учителя отшили, который двоечников хотел в линеечку построить...
Я пропустил что-то особенное?
_______________________
http://excel.ucoz.ru
http://money.yandex.ru/ 41001419691823
serge_007.planetaexcel@mail.ru


03.06.2010, 16:02
Обычное дело - вопрос без примера с ничего не говорящим названием вроде. Хотя я задачу кажется понял, но пока собирался ответить - уже закрыли.

VDM
Число сообщений: 148
07.06.2010, 11:47
Может в копилку?
(Автор: Hugo, Дата: 03.06.2010 02:29)
вот ему бы тоже подошло, но раз закрыли - так закрыли, я промолчал... :)


Здравствуйте!
Я думаю очень многим бы подошло, задача как мне кажется достаточно актуальная и хоть раз тот, кто занимается обработкой и анализом текстовых данных с ней сталкивался или столкнётся в будущем.
Ещё раз хочу отблагодарить автора функции, Hugo - браво!
Опробовал сегодня на рабочем файле (2000 строк)- отлично работает, кроме того функция оказалась невосприимчива к сортировке.

Может в копилку, если Автор не возражает?

Hugo
Число сообщений: 1311
07.06.2010, 11:56
Только там в функции строка Dim iCount As Integer лишняя, это остатки от VLOOKUP2 или 3, не помню, какую именно брал за основу... :)
Ну и если в копилку, то может надо переделать, как http://www.planetaexcel.ru/forum.php?thread_id=16634
The_Prist переделал, чтоб с закрытыми файлами работало, я не берусь, опыта маловато... ещё накосячу...
_______________________
webmoney: E265281470651 Z422237915069 R41892628200
The_Prist

Число сообщений: 7633
07.06.2010, 12:10
Ну вот вариант с закрытыми книгами:

Function VLOOKUPCOUPLE(Table As Variant, SearchColumnNum As Integer, SearchValue As Variant, _
RezultColumnNum As Integer, Separator_ As String)
'Table - таблица, где ищем
'SearchColumnNum - столбец, где ищем
'SearchValue - данные, которые ищем
'RezultColumnNum - колонка, откуда берём результат
'Separator_ - разделитель, желательно вводить с пробелом в конце

Dim i As Long
Select Case TypeName(Table)
Case "Range"
For i = 1 To Table.Rows.Count
If Table.Cells(i, SearchColumnNum) = SearchValue Then
If VLOOKUPCOUPLE <> "" Then
VLOOKUPCOUPLE = VLOOKUPCOUPLE & Separator_ & Table.Cells(i, RezultColumnNum)
Else
VLOOKUPCOUPLE = Table.Cells(i, RezultColumnNum)
End If
End If
Next i
Case "Variant()"
For i = 1 To UBound(Table)
If Table(i, SearchColumnNum) = SearchValue Then
If VLOOKUPCOUPLE <> "" Then
VLOOKUPCOUPLE = VLOOKUPCOUPLE & Separator_ & Table(i, RezultColumnNum)
Else
VLOOKUPCOUPLE = Table(i, RezultColumnNum)
End If
End If
Next i
End Select
If VLOOKUPCOUPLE = 0 Then VLOOKUPCOUPLE = ""
End Function
_______________________
Интеллект - величина постоянная. А количество людей все время возрастает...

Если считаете, что СПАСИБО мало: WebMoney - R298726502453; Яндекс.Деньги - 41001332272872

The-Prist@yandex.ru


[ ответить ]

[ создать новую тему ]