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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2013, 07:53   #1
BorisD
Новичок
Джуниор
 
Регистрация: 11.04.2013
Сообщений: 4
По умолчанию Как объединить ячейки во втором столбце при совпадении значений в первом столбце

Здравствуйте. Помогите плиз.
В таблице есть повторяющиеся значения в первом столбце (код товара) и разные значения во втором (характеристики товара).
Нужно чтобы значения в первом столбце встречались только один раз (объеденить все повторяющиеся в одну ячейку) а соответствующие данному коду товара характеристики товара собрались во втором столбце в одну ячейку.

Руками ооочень долго - 60 тыс строк.
Буду очень благодарен за совет.
Вложения
Тип файла: rar Primer.rar (5.1 Кб, 29 просмотров)

Последний раз редактировалось BorisD; 11.04.2013 в 08:00.
BorisD вне форума Ответить с цитированием
Старый 11.04.2013, 09:18   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

1.расширенным фильтром извлечь уникальные в другой диапазон.
2.UDF VLOOKUPCOUPLE()


Код:
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
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.04.2013, 10:03   #3
BigDaddy
Пользователь
 
Регистрация: 23.11.2012
Сообщений: 45
По умолчанию

Здравствуйте
Попробуйте запустить макрос, который в файле я добавил.

ВАЖНО!!
Сначала отсортируйте свои колонки А и В по возрастанию по колонке А.
Чтобы у Вас все коды были отсортированы - то есть, чтобы не было так, что код, например, 68261 был рабросан и был не подряд. Нужно, чтобы один код колонки А был в одной куче.

Понимаете?
Выполняйте макрос и смотрите на результат.
Сообщите, все ли получилось.
Вложения
Тип файла: zip Primer.zip (11.7 Кб, 88 просмотров)
лучше день потерять, а потом за пять минут долететь
BigDaddy вне форума Ответить с цитированием
Старый 11.04.2013, 11:16   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Буду очень благодарен за совет.
Есть еще вариант с сортировкой и объединением характеристик

Код:
Sub dd()
  [A:B].Sort [A1]
  I = 1
  While Cells(I + 1, 1) <> ""
    If Cells(I, 1) = Cells(I + 1, 1) Then
      Cells(I, 2) = Cells(I, 2) & ", " & Cells(I + 1, 2)
      Cells(I + 1, 1).EntireRow.Delete Shift:=xlUp
    Else
      I = I + 1
    End If
  Wend
End Sub
подставите свои параметры и будет Вам счастье)
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 11.04.2013 в 11:18.
DiemonStar вне форума Ответить с цитированием
Старый 11.04.2013, 11:45   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

кросс http://www.cyberforum.ru/ms-excel/thread834354.html
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 11.04.2013, 12:55   #6
BorisD
Новичок
Джуниор
 
Регистрация: 11.04.2013
Сообщений: 4
По умолчанию

Всем кто откликнулся - спасибо!

Последний раз редактировалось BorisD; 11.04.2013 в 12:58.
BorisD вне форума Ответить с цитированием
Старый 11.04.2013, 12:57   #7
BigDaddy
Пользователь
 
Регистрация: 23.11.2012
Сообщений: 45
По умолчанию

а что именно получилось?
что брали?
лучше день потерять, а потом за пять минут долететь
BigDaddy вне форума Ответить с цитированием
Старый 11.04.2013, 12:57   #8
BorisD
Новичок
Джуниор
 
Регистрация: 11.04.2013
Сообщений: 4
Радость Большое спасибо!

Цитата:
Сообщение от BigDaddy Посмотреть сообщение
Здравствуйте
Попробуйте запустить макрос, который в файле я добавил.

ВАЖНО!!
Сначала отсортируйте свои колонки А и В по возрастанию по колонке А.
Чтобы у Вас все коды были отсортированы - то есть, чтобы не было так, что код, например, 68261 был рабросан и был не подряд. Нужно, чтобы один код колонки А был в одной куче.

Понимаете?
Выполняйте макрос и смотрите на результат.
Сообщите, все ли получилось.
Все получилось. Большое спасибо!
BorisD вне форума Ответить с цитированием
Старый 11.04.2013, 12:59   #9
BorisD
Новичок
Джуниор
 
Регистрация: 11.04.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от BigDaddy Посмотреть сообщение
а что именно получилось?
что брали?
Ваш вариант отлично сработал!
BorisD вне форума Ответить с цитированием
Старый 11.04.2013, 13:16   #10
BigDaddy
Пользователь
 
Регистрация: 23.11.2012
Сообщений: 45
По умолчанию

очень хорошо!
пожалуйста
лучше день потерять, а потом за пять минут долететь
BigDaddy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Частота значений в столбце? Stem79 Microsoft Office Excel 6 02.02.2013 19:43
Как запретить выбор одинаковых значений из списка в одном столбце? Santik Microsoft Office Excel 1 21.04.2012 16:37
Выбор из одного столбца по условию выполняющемуся во втором столбце mjpv Microsoft Office Excel 2 30.04.2011 11:58
Суммирование значений в столбце needsomehelp БД в Delphi 2 26.01.2011 14:56
Макрос на сравнение и подсчет в первом столбце строк, и сумирование значений этих строк в другом столбце Shpr0T Microsoft Office Excel 8 30.08.2010 17:52