Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/63: Рейтинг темы: голосов - 63, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 17.06.2010
Сообщений: 16

Макросом сцепить значения из ячеек и удалить пустые строки

29.04.2012, 19:31. Показов 12815. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такая вот проблема:
Есть данные:
А B C D
1 text text text
text text
text
2 text text text
text text
text
и так далее
Нужно макросом объеденить данные по столбцам C и D, при условии, что ячейка в первой строке столбца А не пустая, т.е. на выходе должно получиться:

А B C D
1 text text +text text+text+text


2 text text +text text+text+text

К сожалению, я не программист, но такая задача встала, поскольку нужно обработать файл, где таких строк очень много.


0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.04.2012, 19:31
Ответы с готовыми решениями:

Как скопировать макросом именно значения ячеек а не переменную которая в ней?
Добрый день форумчанам. Использую след. код для копирования диапозона ячеек с данными: Private Sub CommandButton21_Click() ...

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

Как сцепить большое количество ячеек?
Нужно сцепить диапазон ячеек который указан в EXCEL (разделитель - пробел)

9
2 / 2 / 1
Регистрация: 10.04.2011
Сообщений: 415
30.04.2012, 12:19
нифига непонятно, если честно.
Сразу скажу - макрос тебе не нужен, это все делается с помощью формул.
в ячейку E1 напиши формулу:
=ЕСЛИ(ДЛСТР(A1)>0;СЦЕПИТЬ(B1;C11);"")
Эта формула проверяет, что длина строки в ячейке A1 больше нуля (ячейка непустая), и в этом случае объединяет в ячейке E1 строки из ячеек B1..D1. В противном случае (если строка в A1 пустая, в E1 записывается тоже пустая строка (ты этот момент не оговорил).
Удачи
0
3 / 3 / 0
Регистрация: 08.09.2011
Сообщений: 111
01.05.2012, 10:14
Удаление пустых строк
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub DeleteEmptyRows()
    Dim LastRow As Long
    Dim r As Long
    LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    Application.ScreenUpdating = False
    For r = LastRow To 1 Step -1
        If Application.WorksheetFunction.CountA(Rows(r)) = 0 _
          Then Rows(r).Delete
    Next r
End Sub
0
2 / 2 / 1
Регистрация: 10.04.2011
Сообщений: 415
01.05.2012, 12:48
Цитата Сообщение от Tsvet
For r = LastRow To 1 Step -1
If Application.WorksheetFunction.CountA(Row s(r)) = 0 _
Then Rows(r).Delete
Next r
End Sub
ты тестировал или наобум написал? Имхо цикл неверно отработает из-за удаления строк...
0
3 / 3 / 0
Регистрация: 08.09.2011
Сообщений: 111
01.05.2012, 18:14
To Johny Walker:
Вообще то не я писал :-)
Но этот макрос у меня в книге Personal, пользуюсь, и никаких проблем нет, иначе я бы не выложил код сюда.
А что, действительно есть ошибка?

PS Правда, очень ценю ваши комменты, как одного из немногих реальных гуру на форуме...
0
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
01.05.2012, 18:20
Отчего же нет? как раз наоборот все правильно отработает, так как цикл пробегает от конца массива к началу а не наоборот

С уважением,
Владимир
0
2 / 2 / 1
Регистрация: 10.04.2011
Сообщений: 415
01.05.2012, 18:31
Цитата Сообщение от Tsvet
To Johny Walker:
Вообще то не я писал :-)
Но этот макрос у меня в книге Personal, пользуюсь, и никаких проблем нет, иначе я бы не выложил код сюда.
А что, действительно есть ошибка?
Не знаю, если работает - отлично. оказалось, наверное :-)))))))
0
0 / 0 / 0
Регистрация: 17.06.2010
Сообщений: 16
05.05.2012, 12:52  [ТС]
Ну да, перечитал и понял, что непонятно написал.
Еще раз попытаюсь сформулировать проблему.
По роду работы иногда приходится переносить очень большие таблицы Word в Эксель для дальнейшей обработки. К примеру, в последнем столбце идет описание, довольно длинное и Эксель ячейки из последнего столбца разбивает на несколько строк, а очень важно, чтобы информация по определенной позиции укладывалась в одну строку, иначе таблицу неудобно обрабатывать. Вручную сцеплять значения из ячеек, удалять лишние и затем удалять пустые строки доооолго.
Есть такой вот пример кода, который это делает, но очень медленно:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Обработчик_строк()
Sheets("1").Select
For i = 9 To 100
s = "A" + Str(i)
ss = "V" + Str(i)
Range("A9").Select
j = i + 1
If ActiveCell.FormulaR1C1 <> "" Then
While (Cells(j, "A").FormulaR1C1 = "") And (j < 100)
Cells(i, "V").FormulaR1C1 = Cells(i, "v").FormulaR1C1 + " " + Cells(j, "V").FormulaR1C1
Cells(j, "V").FormulaR1C1 = ""
j = j + 1
Wend
End If
Next
For i = 1 To 100
s = "A" + Str(i)
Cells(i, "A").Select
While ActiveCell.FormulaR1C1 = ""
Selection.EntireRow.Delete
Wend
Next
End Sub
Можно это все сделать поэффективней?
Сорри за первый пост, при отправке сообщения форматирование съехало.
0
1 / 1 / 0
Регистрация: 19.05.2011
Сообщений: 80
08.05.2012, 14:54
Если хотите, попробуйте воспользоваться моим вариантом.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sub KonkStr()
Dim I As Long, LL As Long, LRows As Long, SS As Long
Dim J As Integer, K As Long, sss As String, Ip As Integer
Sheets("1").Select
Range("A9").Select 'нач.яч.просмотра 
LRows = ActiveSheet.Rows.Count
Application.ScreenUpdating = False
J = 5 'заменить на свой номер колонки, в которой объединяются ячейки
SS = 9 'номер нач.строки для просмотра (можно запросить в диалоге)
Do
    LL = Selection.End(xlDown).Row
    If LL = LRows Then
        Cells(SS, J).Select
        LL = Selection.End(xlDown).Row + 1
        If LL = LRows + 1 Then Exit Do
        Ip = 1
    End If
    K = LL - SS - 1
    If K > 0 And Cells(LL - 1, 1) = "" Then
        sss = Cells(SS, J).Value
        For I = SS + 1 To LL - 1
            sss = sss & Cells(I, J).Value
        Next I
        Cells(SS, J).Value = sss
        For I = LL - 1 To SS + 1 Step -1
            Rows(I).Delete
        Next I
    End If
    If Ip = 1 Then Exit Do
    SS = SS + 1
    Cells(SS, 1).Select
Loop
Application.ScreenUpdating = True
End Sub
0
0 / 0 / 0
Регистрация: 17.06.2010
Сообщений: 16
10.05.2012, 11:02  [ТС]
Gleb1, огромное спасибо! Именно то, что нужно!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.05.2012, 11:02
Помогаю со студенческими работами здесь

Найти и удалить пустые строки
Помогите! У меня имеется таблица с 3 стобцами. В первом фамилии, во втром и третьем числа. Необходимо найти строки где обе ячейки во втором...

Сцепить значения двух ячеек с заменой символов
Я столкнулась со сложной задаче мне надо в ячейки А1 есть число 75, в ячейке В1 есть набор символов 9ycM0009900000, мне надо чтобы в ячейке...

Как сцепить значения ячеек, если в ячейках числа в формате времени
Задача следующая: Имеется 3 ячейки со значениями, отображаемыми в формате ЧЧ:ММ:СС. Причем значения 1 и 3 ячеек не вводятся вручную, а...

Гугл таблица. Есть 5 ячеек, значения которых нужно сцепить. И вывести всевозможные варианты сцепок
Например, в А1 - 1 в А2 - 2 в А3 - 3 в А4 - 4 в А5 - 5 Результат: в В1 - 12345 в В2 - 21345

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru