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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2016, 20:49   #1
Morozeckiy
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 36
По умолчанию Объединение строчек опираясь на другой столбец

Добрый вечер, товарищи. Ищу помощи в дополнении к макросу.
Файл с примером в приложении. Суть такова:
В файле 2 колонки. в первом столбце идет порядковый номер объекта в объеденной ячейке, которая равна кол-ву ячеек второго столбца. Во втором столбце идет построчно информация, которая соответствует объекту в ячейке первого столбца.
Необходимо объеденить ячейки второго столбца, которые принадлежат объекту первого столбца. То есть, где то их 3 строки, где то 10, а где то и одна, которую нужно пропустить.

На данный момент выручает такой макрос
Sub MergeToOneCell()
* *Const sDELIM As String = ", " * * 'символ-разделитель
* *Dim rCell As Range
* *Dim sMergeStr As String
* *If TypeName(Selection) <> "Range" Then Exit Sub * 'если выделены не ячейки - выходим
* *With Selection
* * * *For Each rCell In .Cells
* * * * * *sMergeStr = sMergeStr & sDELIM & rCell.Text *'собираем текст из ячеек
* * * *Next rCell
* * * *Application.DisplayAlerts = False * 'отключаем стандартное предупреждение о потере текста
* * * *.Merge Across:=False * * * * * * * *'объединяем ячейки
* * * *Application.DisplayAlerts = True
* * * *.Item(1).Value = Mid(sMergeStr, 1 + Len(sDELIM)) * *'добавляем к объед.ячейке суммарный текст
* *End With
End Sub

Им я могу объединять ячейки в ручную без потери текста, но строк 3500. Можно ли в этот макрос вставить еще одно условие, для ориентира на первый столбец?

Спасибо за внимание.пример.xlsx
Morozeckiy вне форума Ответить с цитированием
Старый 29.07.2016, 05:12   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно так:
Код:
Sub Main()
    Dim i As Long, j As Integer, s As String, cell As Range
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    [B:B].WrapText = True: i = 2
    Do While Cells(i, 1) <> ""
        j = Cells(i, 1).MergeArea.Cells.Count
        If j > 1 Then
            For Each cell In Cells(i, 1).MergeArea
                If cell.Offset(, 1) <> "" Then s = s & cell.Offset(, 1) & ", "
            Next
            Cells(i, 2).Resize(j).Merge: Cells(i, 2) = Left$(s, Len(s) - 2)
        End If
        i = i + j: s = ""
    Loop
End Sub
Пример во вложении.
Вложения
Тип файла: rar пример.rar (11.3 Кб, 13 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 29.07.2016, 11:29   #3
Morozeckiy
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 36
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Можно так:
Код:
Sub Main()
    Dim i As Long, j As Integer, s As String, cell As Range
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    [B:B].WrapText = True: i = 2
    Do While Cells(i, 1) <> ""
        j = Cells(i, 1).MergeArea.Cells.Count
        If j > 1 Then
            For Each cell In Cells(i, 1).MergeArea
                If cell.Offset(, 1) <> "" Then s = s & cell.Offset(, 1) & ", "
            Next
            Cells(i, 2).Resize(j).Merge: Cells(i, 2) = Left$(s, Len(s) - 2)
        End If
        i = i + j: s = ""
    Loop
End Sub
Пример во вложении.
Спасибо тебе, добрый человек. Вопрос решен за секунду. Спасибо!
Morozeckiy вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заменить столбец одной таблицы, на столбец другой Karyuudo SQL, базы данных 1 30.09.2015 16:07
При выборе другой фамилии на форме данные в другой столбец and150382 Microsoft Office Access 4 19.08.2013 21:07
перенести часть текста в другой столбец horpenst Microsoft Office Excel 4 13.07.2011 01:37
Копирование значения в другой столбец при определенном условии stasbz Microsoft Office Excel 1 01.07.2009 23:55
Макрос на объединение 4 строчек в 1 malrah Microsoft Office Word 16 16.06.2009 17:12