![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Объединить ячейки в одном столбце |
|
|
VBA - Объединить ячейки в одном столбце
|
Старожил Сообщения: 329 |
В общем надо объединить ячейки в одном столбце, при условии что ячейки в другом столбце одинаковые.
То есть если содержимое столбца 1 повторяется от строки к строке, то в столбце 2 объединяем. За основу брал такой код Но что то у меня не получилось его переделать. |
|
------- Отправлено: 15:34, 30-08-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать blackeangel, что-то не соображу. Образец Рабочей книги в архиве приложите, на одном рабочем листе — пример исходника, на другом — полученный с примера результат.
|
Отправлено: 16:05, 30-08-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Вот там 2 листа
|
------- Отправлено: 16:16, 30-08-2017 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать blackeangel, это может выглядеть примерно так:
Скрытый текст
Option Explicit Sub Sample() Dim i As Integer Dim objRange As Range Dim PrevValue As Variant Dim objRange4Union As Range Application.DisplayAlerts = False With ActiveSheet.UsedRange With .Columns.Item(1).Cells Set objRange4Union = .Item(2, 1) PrevValue = objRange4Union.Value End With For i = 3 To .Rows.Count Set objRange = .Columns.Item(1).Cells.Item(i, 1) If PrevValue = objRange.Value Then Set objRange4Union = Union(objRange4Union, objRange) Else With objRange4Union With .Offset(0, 1) .UnMerge .Merge .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With With .Offset(0, 2) .UnMerge .Merge .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With End With Set objRange4Union = objRange End If PrevValue = objRange.Value Next i End With With objRange4Union With .Offset(0, 1) .UnMerge .Merge .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With With .Offset(0, 2) .UnMerge .Merge .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With End With Application.DisplayAlerts = True End Sub |
Отправлено: 06:31, 01-09-2017 | #4 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, это здорово. Но вот теперь стала необходимость обьединять последовательно сначала второй, потом третий, потом произвольный, а в самом конце первый столбец. То есть примерно все останется так же, но куда надо и что добавить чтоб заработало поновым условиям? Просто в текущем коде ничего непонял.
|
|
------- Отправлено: 08:36, 01-09-2017 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать blackeangel, чтобы мы продолжили понимать друг друга — от Вас новая рабочая книга с иллюстрацией:
Цитата blackeangel:
|
|
Отправлено: 09:12, 01-09-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Работаем с первым столбцом использованного диапазона (.UsedRange) активного рабочего листа (ActiveSheet). Предполагаем, что данные тупо расположены с первой же ячейки и имеют заголовки столбцов. Посему начинаем с того, что диапазону для объединения (objRange4Union) присваиваем диапазон, состоящий из ячейки A2, и запоминаем значение из той же самой ячейки A2. Далее перебираем все строки из первого столбца от третьей строки до последней строки использованного диапазона. Если значение в очередной ячейке совпадает с запомненным значением (из ячейки выше) — включаем в диапазон для объединения эту ячейку (путём операции Union() над ним самим и этой самой очередной ячейкой). Если не совпадает — то на всякий случай сначала проводим разъединение ячеек, расположенными в столбце правее (.Offset(0, 1)) диапазона для объединения (objRange4Union), затем объединение этих ячеек, делаем выравнивание содержимого. Ту же операцию проделываем с ячейками, расположенными на два стобца правее (.Offset(0, 2)) диапазона для объединения. Наконец, начинаем заново собирать новый диапазон для объединения, начиная с текущей очередной ячейки. После завершения проверки условия в конце цикла запоминаем в переменной значение текущей очередной ячейки и повторяем весь цикл. По завершении цикла нам остаётся повторить операции объединения над текущим вычисленным диапазоном для объединения. |
|
Отправлено: 09:33, 01-09-2017 | #7 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, ну в общем всё на самом деле просто.необходима функция, котороя обьединяла бы любые ячейки в столбцах в указанном порядке. Пример вызова функции какой то такой
Функция(1,5,7,9,12,3) Если подается нулевое значение, значит столбец пропускаем. И ещё один момент, объединенять ячейки надо только с повторяющимися значениями. |
------- Последний раз редактировалось blackeangel, 01-09-2017 в 12:49. Отправлено: 11:16, 01-09-2017 | #8 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Вот пример второй чтоб понятнее стало
|
------- Отправлено: 13:08, 01-09-2017 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Цитата blackeangel:
Цитата blackeangel:
|
|||
Отправлено: 16:19, 01-09-2017 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2010 - [решено] Поиск фразы в столбце и создание записи в соседнем столбце | blackeangel | Microsoft Office (Word, Excel, Outlook и т.д.) | 11 | 22-12-2015 15:54 | |
2007 - [решено] Excel получение предыдущей непустой ячейки в столбце | eus_deus | Microsoft Office (Word, Excel, Outlook и т.д.) | 4 | 06-12-2015 09:17 | |
CMD/BAT - [решено] awk замена текста во втором столбце | shmel_sv@vk | Скриптовые языки администрирования Windows | 9 | 14-09-2015 14:16 | |
Sharepoint - Пробелы в числовом столбце | AxeL_FoX | Другие серверные продукты | 0 | 02-06-2010 21:31 | |
Интерфейс - Не выводится информация в столбце “Размеры” | CompFan | Microsoft Windows 2000/XP | 1 | 15-02-2008 01:00 |
|