Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

Перенести значения из столбца в одну ячеку

Автор manivoki, 12.06.2014, 15:33

« назад - далее »

manivoki

Здравствуйте! Возникла проблема, уже всю голову поломала, помогите, пожалуйста. Есть столбец с повторяющимися группами строк, напротив значения, нужно эти значения напротив для каждой группы повторяющихся строк перенести в одну ячейку, через запятую или др. знак препинания. Количество строк в каждой группе разное. И документ объемный, вручную никак (( Если посмотреть пример, то все понятно будет.
Пример в файле.

cheshiki1

Function VLOOKUPCOUPLE_spec(Table As Variant, SearchColumnNum1 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, SearchColumnNum1) = SearchValue Then
                If VLOOKUPCOUPLE_spec <> "" Then
                    VLOOKUPCOUPLE_spec = VLOOKUPCOUPLE_spec & Separator_ & Table.Cells(i, RezultColumnNum)
                Else
                    VLOOKUPCOUPLE_spec = Table.Cells(i, RezultColumnNum)
                End If
            End If
        Next i
    Case "Variant()"
        For i = 1 To UBound(Table)
            If Table.Cells(i, SearchColumnNum1) = SearchValue Then
                If VLOOKUPCOUPLE_spec <> "" Then
                    VLOOKUPCOUPLE_spec = VLOOKUPCOUPLE_spec & Separator_ & Table(i, RezultColumnNum)
                Else
                    VLOOKUPCOUPLE_spec = Table(i, RezultColumnNum)
                End If
            End If
        Next i
    End Select
    If VLOOKUPCOUPLE_spec = 0 Then VLOOKUPCOUPLE_spec = ""
End Function

формула в ячейке =VLOOKUPCOUPLE_spec($A$2:$B$16;1;A2;2;",")

manivoki


Hugo121

#3
Зачем же  мою VLOOKUPCOUPLE_spec() корёжили, это ведь была спецверсия для поиска по двум столбцам (кому-то нужно было именно по двум искать) - теперь ищущих по этому названию будет с толку сбивать... :)
Есть ведь оригинал:

Function VLOOKUPCOUPLE(Table As Variant, _
                       SearchColumnNum As Integer, _
                       SearchValue As Variant, _
                       RezultColumnNum As Integer, _
                       Separator_ As String, _
                       Optional BezPovtorov As Boolean = True)

'Table - таблица, где ищем
'SearchColumnNum - столбец, где ищем
'SearchValue - данные, которые ищем
'RezultColumnNum - столбец, откуда берём результат
'Separator_ - разделитель, желательно вводить с пробелом в конце
'BezPovtorov - если поставить 0, то будут выведены все повторяющиеся совпадения

    Dim i As Long, tmp As String, vlk

    If TypeName(Table) = "Range" Then Table = Intersect(Table.Parent.UsedRange, Table).Value
    If BezPovtorov Then
        With CreateObject("Scripting.Dictionary")
            For i = 1 To UBound(Table)
                If Table(i, SearchColumnNum) = SearchValue Then
                    tmp = Table(i, RezultColumnNum)
                    If tmp <> "" Then
                        If Not .Exists(tmp) Then
                            .Add tmp, 0&
                            vlk = vlk & Separator_ & Table(i, RezultColumnNum)
                        End If
                    End If
                End If
            Next i
        End With
    Else
        For i = 1 To UBound(Table)
            If Table(i, SearchColumnNum) = SearchValue Then
                vlk = vlk & Separator_ & Table(i, RezultColumnNum)
            End If
        Next i
    End If
    If vlk > 0 Then vlk = Mid(vlk, Len(Separator_) + 1) Else vlk = ""
    VLOOKUPCOUPLE = vlk
End Function

Тут ещё и повторы убираются, или их можно оставить, если нужны.
На листе в ячейку
=VLOOKUPCOUPLE($A$2:$B$16;1;A2;2;",")
последний параметр можно не указывать, если повторы нужно убрать.
webmoney: E265281470651 Z422237915069

manivoki

Всем большое спасибо, очень выручили! Полезный ресурс!

manivoki

Здравствуйте, снова нужна помощь!
Цитата: Hugo121 от 12.06.2014, 20:51
Зачем же  мою VLOOKUPCOUPLE_spec() корёжили, это ведь была спецверсия для поиска по двум столбцам (кому-то нужно было именно по двум искать) - теперь ищущих по этому названию будет с толку сбивать... :)
Наверное мне теперь нужна именно эта функция.
Имеется три столбца: артикул, размер и цвет. Мне надо чтобы искало по артикулу, сравнивало размеры и у разных размеров напротив выводило их цвета. На примере думаю будет понятно, прилагаю.