Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 1
Регистрация: 04.07.2014
Сообщений: 234

Объединения одинаковых значений и вставка строки

28.08.2021, 08:18. Показов 2620. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть макрос который объединяет Все одинаковые значения в таблице ексель:
Сам макрос:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub JoinDoubles()
Dim i As Long
Dim j As Long
Application.DisplayAlerts = False
For j = 1 To Selection.Columns.Count
  For i = Selection.Rows.Count To 2 Step -1
    If Selection.Cells(i - 1, j) = Selection.Cells(i, j) Then
    Range(Selection.Cells(i - 1, j), Selection.Cells(i, j)).Merge
    End If
  Next
Next
Selection.VerticalAlignment = xlVAlignCenter
Application.DisplayAlerts = True
End Sub
Макрос классный, но есть нюанс, как сделать чтоб объединение происходило только по определённым столбцам? И чтоб не нужно было выделять таблицу ( без выделений макрос не работает.

Так же, есть макрос который вставляет пустые строки:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub VstavkaStrok1()
Dim i As Long
Dim pustroka As Long
For i = Selection.Rows.Count To 2 Step -1
  If Selection(i, 1).MergeArea.Rows.Count <> 1 Then
  pustroka = Selection(i, 1).Row + 1
  ActiveSheet.Rows(pustroka).Insert xlShiftDown
  ActiveSheet.Rows(pustroka).RowHeight = 7
  ActiveSheet.Rows(pustroka).Borders(xlInsideVertical). _
  LineStyle = xlLineStyleNone
  ActiveSheet.Rows(pustroka).Borders(xlEdgeLeft). _
  LineStyle = xlLineStyleNone
  ActiveSheet.Rows(pustroka).Borders(xlEdgeRight). _
  LineStyle = xlLineStyleNone
  ActiveSheet.Rows(pustroka).Interior. _
  ColorIndex = xlColorIndexNone
  i = i - Selection(i, 1).MergeArea.Rows.Count + 1
  End If
Next
End Sub
Помогите объединить эти два макроса в один, чтоб получилось так:
Мы на активной странице запускаем макрос (без выделения таблицы), он объединяет все одинаковые значения по столбцу B и после объедения, вставлялась строчка (после каждого объединившегося блока)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.08.2021, 08:18
Ответы с готовыми решениями:

Макрос для объединения значений строки в одну ячейку и вставка между каждым числом точки с запятой
Здравствуйте! Имеется код(автор art1287), в который необходимо вставить Private Sub, исполняющий следующие задачи: 1. Добавление...

Найти номер строки матрицы, в которой наибольшее количество одинаковых символов (вставка в с++)
Найти номер строки матрици в которой наибольшое количество одинакових символов и строку в которой минимальное количество одинакових...

Найти строки, состоящие из одинаковых значений
Здравствуйте. Возникли проблемы с задачей, помогите реализовать такое на c++: С клавиатуры вводится размерность целочисленной матрицы,...

12
665 / 334 / 135
Регистрация: 16.07.2020
Сообщений: 957
28.08.2021, 09:48
Приложите пример с пояснениями.
0
2 / 2 / 1
Регистрация: 04.07.2014
Сообщений: 234
28.08.2021, 10:42  [ТС]
Какой пример? Я подробно описал что выполняют данные макросы сейчас, а что должны выполнять после слияния.

Добавлено через 38 минут
AlexOld, вот пример:
Вложения
Тип файла: xlsx Пример.xlsx (13.3 Кб, 9 просмотров)
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
28.08.2021, 10:49
Лучший ответ Сообщение было отмечено straik16 как решение

Решение

straik16, а если вы такой умный. что из вашего описания всем должно быть всё понятно, так чего ж сами не пишете макросы? Ведь для знающего человека избавиться от селеккшн плевое дело - сделать из макроса процедуру с параметром нужного вам диапазона, например так.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub JoinDoubles(Rg As Range)
Dim i As Long
Dim j As Long
Application.DisplayAlerts = False
With Rg
  For j = 1 To .Columns.Count
    For i = .Rows.Count To 2 Step -1
      If .Cells(i - 1, j) = .Cells(i, j) Then
      Range(.Cells(i - 1, j), .Cells(i, j)).Merge
      End If
    Next
  Next
  .VerticalAlignment = xlVAlignCenter
End With
Application.DisplayAlerts = True
End Sub
Sub proba()
Call JoinDoubles(Range("A3:B11"))
End Sub
А ваш классный (не совсем) макрос будет объединять и незаполненные пустые ячеки, идущие подряд. Может так и надо?
И, если спрашивают, то надо отвечать, но не такими фразами. и зазывалочку лучше убрать, она не того пола.
0
2 / 2 / 1
Регистрация: 04.07.2014
Сообщений: 234
28.08.2021, 11:01  [ТС]
Burk, да я не хотел никого задеть.
Просто не сразу сообразил какой пример, полазив по форуму нашел подобную тебе и увидел о каком примере идет речь. А данные макросы, просто работаю (но не совсем так как хотелось бы). По поводу того что будут пустые ячейки, это исключено.

Добавлено через 7 минут
Burk, Я Вас услышал. Макрос тоже отрабатывает круто. Вы я смотрю шарите в этой теме, как указать Range (все устраивает что последняя строка под номером 13, а если этих строк множество...?
Я просто для себя vba открыл относительно недавно, для облегчения работы.
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
28.08.2021, 11:34
straik16, а изменить цифру 13 на нужную. думаете у вас не получится. либо на значение переменной, в которой будет последняя строка. Call JoinDoubles(Range(Cells(1,1),Cells(LastR ow,LastColumn))) По-аглицки Last переводится как последняя. Ну и определите последнюю ячейку, даже строк и столбцов множество, а потом вызывайте процедуру
1
2 / 2 / 1
Регистрация: 04.07.2014
Сообщений: 234
28.08.2021, 17:06  [ТС]
Burk, помоги это сделать в коде с готовым решением, пожалуйста. Спасибо.
0
665 / 334 / 135
Регистрация: 16.07.2020
Сообщений: 957
28.08.2021, 19:18
Попробуйте сами разобраться в предложенном коде. В 6-ом сообщении Burk вам показал, можно сказать разжевал, как изменить строку Call JoinDoubles(Range("A3:B11")), чтобы макрос работал на любом количестве строк и столбцов. Погуглите на тему "Excel VBA последняя строка, столбец" и подставьте вместо переменных LastRow и LastColumn подходящие методы.
0
2 / 2 / 1
Регистрация: 04.07.2014
Сообщений: 234
28.08.2021, 20:03  [ТС]
AlexOld, я нашел от чего отталкиваться, вот только не пойму где именно должны быть эти строки. Буду разбираться, в любом случае это интересно, на целый день сегодня залип.

Добавлено через 31 минуту
Burk, AlexOld, прошу помощи так как откликнулись в теме, есть форма вот такая: файл приложил, все добавляется, и бог с ним, я подключаю макрос при закрытие формы:
Visual Basic
1
2
3
4
Private Sub CommandButton2_Click()
Call proba
    End
End Sub
Форма закрылась произошло объединение, все супер.
Но тут появляется нюанс, после объединения, я хочу добавить еще значения, но добавляется только в последнею строку, почему так?
Вложения
Тип файла: xlsx bd_склад.xlsx (28.7 Кб, 9 просмотров)
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
29.08.2021, 05:09
straik16, ну и что нам даёт файл xlsx без макросов, если вы добавляете строки вручную, то можете добавлять что угодно. Если через вашу кнопку. то нужен макрос. привязанный к этой кнопке. а его нет. Вам система не даёт возможности отправить файл с макросами в формате xlsm? Отправьте в формате офис 2003 (xls) или отправьте архивом.
0
2 / 2 / 1
Регистрация: 04.07.2014
Сообщений: 234
29.08.2021, 06:24  [ТС]
Burk,
Вложения
Тип файла: xls bd_склад.xls (90.5 Кб, 3 просмотров)
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
29.08.2021, 07:05
straik16, ну и куда же надо вставлять новую запись, если не в конец? А если такая запись уже есть. то ваш макрос может заменить эту строку. Либо в фОРМЕ ВВОДА НАДО ввести адрес строки. Если после ввода вам надо отсортировать данные по какому-то полю, ну и сортируйте. Все ваши проблемы легко решаются.
Я больше в теме не участвую. не могу смотреть на несоответствие автора и аватарки.
0
2 / 2 / 1
Регистрация: 04.07.2014
Сообщений: 234
29.08.2021, 07:14  [ТС]
Burk, не корректно задаю вопрос, согласен. Вставляются значения в последнею строку после добавления, а не в следующую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.08.2021, 07:14
Помогаю со студенческими работами здесь

Вставка значений предыдущей строки в MySQL
Задача такая: есть технический сбой, в результате которого значение столбца date в некоторых записях БД стерлись. Необходимо найти...

Вставка значений в строки с определённым шагом
Как сделать такую штуку через макрос: A Строка1 s5 Строка2 7 Строка3 8 Строка4 6 (стало s5) ...

Вставка значений минуя скрытые строки
Всем привет! Как вставить диапазон ячеек в диапазон, избегая скрытые строки?

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru