Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 7
1

Сцепить группы строк

18.10.2016, 15:01. Показов 1041. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте

Прошу помощи в следующей задаче.

Есть файл, где в одном столбце есть группы строк (изменяющееся количество), разделенных пустой строкой. Примерно так:
Кликните здесь для просмотра всего текста
заголовок 1
ааа
ббб
ссс

заголовок 2
ввв
гг

Заголовок 3
фф
ввв
ккк
ййй


И так далее 1000 раз.

Цель - получить 1000 строк, в которых группы строк будут объединены в одну ячейку.
Для объединения диапазона я нашел готовую пользовательскую функцию (сцепить много), она работает на отлично.
А вот написать цикл, который будет подавать этой функции на вход диапазоны, мне не удалось.
Помогите, пожалуйста, укажите на ошибки и как их исправить. Спасибо!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Макрос()
 
For i = 1 To i = 3
 
addr = 2
'
    Cells.Find(What:="XXX_", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
 
    Range(Selection, Selection.End(xlDown)).Select
    xxx = Selection.Address
    
Range("C" & addr).FormulaR1C1 = "=PERSONAL.XLSB!СцепитьМного(" & xxx & ",CHAR(10))"
addr = addr + 1
i = i + 1
Next i
 
End Sub
Вложения
Тип файла: rar Собрать данные.rar (14.6 Кб, 2 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2016, 15:01
Ответы с готовыми решениями:

Обработка группы строк
Добрый день, уважаемые знатоки. Который раз обращаюсь за помощью, и Вы ни разу не обходили меня...

Удаление группы строк
Доброго времени суток форумчане. Подскажите, кто сталкивался с такой задачей. необходимо макросом...

Обработка массива, включающего в себя группы строк
Пожалуйста, помогите в решении задачи с помощью макроса. Глубоко изучать VBA для разового решения...

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

3
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
18.10.2016, 15:20 2
Альтернативный вариант, без использования пользовательской функции

Visual Basic
1
2
3
4
5
6
7
8
Private Sub Test()
    Application.ScreenUpdating = False
    Dim iSource As Range
    For Each iSource In [A:A].SpecialCells(xlConstants).Areas
        iSource(1, 2) = Join(Application.Transpose(iSource), vbLf)
    Next
    Application.ScreenUpdating = True
End Sub
1
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 7
18.10.2016, 16:58  [ТС] 3
pashulka, ого! ОГО. Идеально, делает именно то, что нужно. Спасибо огромное!

А вы не могли бы пояснить, как это работает?
Я вижу, что тут цикл, который работает с каждой Area в столбце А. А вот что в пятой строке происходит, не могли бы пояснить?
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
18.10.2016, 17:48 4
Происходит транспонирование (с помощью одноимённой стандартной функции рабочего листа), а затем VB(A) функция Join возвращает строку, содержащую все элементы одномерного массива, об'единённые вместе.

P.S. Ещё один вариант решения поставленной задачи.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Test2()
    Application.ScreenUpdating = False
    Dim iSource As Range, iClipboard As New MSForms.DataObject
    'Tools - References - Microsoft Forms 2.0 ... (FM20.dll)
    For Each iSource In [A:A].SpecialCells(xlConstants).Areas
        iSource.Copy: iClipboard.GetFromClipboard
        iSource(1, 2) = Replace(iClipboard.GetText, vbCrLf, vbLf)
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
0
18.10.2016, 17:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2016, 17:48
Помогаю со студенческими работами здесь

Сцепить ячейки по условию
Доброго времени суток, Находил похожее, но у меня совсем другое условие...

Формировать списки найденных строк в группы по 5 штук, а между ними пропускать 2 строки
Друзья, помогите пожалуйста написать программку на VBA. Для меня не самую простую, не знаю уж как...

Сцепить ячейки по условию с разделителем
Здравствуйте!!! Очень нужна помощь в написании макроса, который будет сцеплять ячейки (вставляя...

Сцепить ячейки, отвечающие условию
Ребята, подскажите пожалуйста, можно ли, не прибегая к макросу, сцепить ячейки следующим образом:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru