Показать полную графическую версию : Объединить ячейки в одном столбце
blackeangel
30-08-2017, 15:34
В общем надо объединить ячейки в одном столбце, при условии что ячейки в другом столбце одинаковые.
То есть если содержимое столбца 1 повторяется от строки к строке, то в столбце 2 объединяем.
За основу брал такой код
Sub MergeCls()
r1 = 1
r2 = 1
Do
If Cells(r1, 1) <> Cells(r2 + 1, 1) Then
If r1 <> r2 Then
Range(Cells(r1 + 1, 1), Cells(r2, 1)).ClearContents
Range(Cells(r1, 1), Cells(r2, 1)).MergeCells = True
End If
r1 = r2 + 1
End If
r2 = r2 + 1
Loop Until Cells(r2, 1) = ""
End Sub
Но что то у меня не получилось его переделать.
blackeangel, что-то не соображу. Образец Рабочей книги в архиве приложите, на одном рабочем листе — пример исходника, на другом — полученный с примера результат.
blackeangel
30-08-2017, 16:16
Вот там 2 листа
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
blackeangel
01-09-2017, 08:36
Iska, это здорово. Но вот теперь стала необходимость обьединять последовательно сначала второй, потом третий, потом произвольный, а в самом конце первый столбец. То есть примерно все останется так же, но куда надо и что добавить чтоб заработало поновым условиям? Просто в текущем коде ничего непонял.
blackeangel, чтобы мы продолжили понимать друг друга — от Вас новая рабочая книга с иллюстрацией:
необходимость обьединять последовательно сначала второй, потом третий, потом произвольный, а в самом конце первый столбец »
в текущем коде ничего непонял. »
Там достаточно просто.
Работаем с первым столбцом использованного диапазона (.UsedRange) активного рабочего листа (ActiveSheet). Предполагаем, что данные тупо расположены с первой же ячейки и имеют заголовки столбцов. Посему начинаем с того, что диапазону для объединения (objRange4Union) присваиваем диапазон, состоящий из ячейки A2, и запоминаем значение из той же самой ячейки A2. Далее перебираем все строки из первого столбца от третьей строки до последней строки использованного диапазона.
Если значение в очередной ячейке совпадает с запомненным значением (из ячейки выше) — включаем в диапазон для объединения эту ячейку (путём операции Union() над ним самим и этой самой очередной ячейкой).
Если не совпадает — то на всякий случай сначала проводим разъединение ячеек, расположенными в столбце правее (.Offset(0, 1)) диапазона для объединения (objRange4Union), затем объединение этих ячеек, делаем выравнивание содержимого. Ту же операцию проделываем с ячейками, расположенными на два стобца правее (.Offset(0, 2)) диапазона для объединения. Наконец, начинаем заново собирать новый диапазон для объединения, начиная с текущей очередной ячейки.
После завершения проверки условия в конце цикла запоминаем в переменной значение текущей очередной ячейки и повторяем весь цикл.
По завершении цикла нам остаётся повторить операции объединения над текущим вычисленным диапазоном для объединения.
blackeangel
01-09-2017, 11:16
Iska, ну в общем всё на самом деле просто.необходима функция, котороя обьединяла бы любые ячейки в столбцах в указанном порядке. Пример вызова функции какой то такой
Функция(1,5,7,9,12,3)
Если подается нулевое значение, значит столбец пропускаем.
И ещё один момент, объединенять ячейки надо только с повторяющимися значениями.
blackeangel
01-09-2017, 13:08
Вот пример второй чтоб понятнее стало
Пример вызова функции какой то такой
Функция(1,5,7,9,12,3) »
Что это должно означать?
Если подается нулевое значение, значит столбец пропускаем. »
Куда? Пример «подачи».
И ещё один момент, объединенять ячейки надо только с повторяющимися значениями. »
Новую Рабочую книгу пока не глядел, но по первой изначально был иной алгоритм: смотрим в первый столбец и по нему осуществляем объединение столбцов справа. То, что предлагается делать сейчас, отличается от ранее поставленной задачи, насколько я вижу.
blackeangel
02-09-2017, 15:20
Пример вызова функции какой то такой
Функция(1,5,7,9,12,3) »
Что это должно означать?
Если подается нулевое значение, значит столбец пропускаем. »
Куда? Пример «подачи».
необходима функция, котороя обьединяла бы любые ячейки в столбцах в указанном порядке. Пример вызова функции какой то такой
Функция(1,5,7,9,12,3)
Если подается нулевое значение, значит столбец пропускаем.
И ещё один момент, объединенять ячейки надо только с повторяющимися значениями.
это все одно целое.
Единственное, что здесь можно пояснить, это то что цифры это номера столбцов.Где первый столбец - опорный(в текущих книгах он был первым), по нему проходит цикл и по нему объединять надо в последнюю очередь. Остальные цифры это тоже столбцы, но уже не опорные.
Единственное, что здесь можно пояснить, »
Поясните:
Если подается нулевое значение, значит столбец пропускаем. »
Как будет выглядеть вызов функции?
Где первый столбец - опорный(в текущих книгах он был первым), »
Опорный всегда будет первым столбцом на Рабочем листе?
blackeangel
03-09-2017, 10:01
Iska,
1. Функция(1,5,7,0,12,3)
2. Нет, но вызове функции стоять первым
Как то так
Функция(опорный As Integer, неопорные As Variant)
1. Функция(1,5,7,0,12,3) »
Что это должно означать? Распишите подробно именно данный пример: «1 — это …, 5 — это …».
blackeangel
03-09-2017, 12:02
1. Функция(1,5,7,0,12,3) »
Что это должно означать? Распишите подробно именно данный пример: «1 — это …, 5 — это …».
1 - столбец А(и он опорный в этом примере), 5 - столбец Е, 7 - столбец G, 3 - столбец С, 12 - столбец L.
Если 0, то понятно что этого столбца не существует и его следует пропустить. Так же опорный столбец не может быть 0.
Если 0, то понятно что этого столбца не существует и его следует пропустить. »
blackeangel, хоть убейте — не могу понять, зачем вообще надо указывать столбец, который не существует? Почему не просто «Функция(1,5,7,12,3)»?
blackeangel
03-09-2017, 13:20
Если 0, то понятно что этого столбца не существует и его следует пропустить. »
blackeangel, хоть убейте — не могу понять, зачем вообще надо указывать столбец, который не существует? Почему не просто «Функция(1,5,7,12,3)»?
На всякий случай, тк номера столбцов будут находиться по имени столбца. Хотя ладно, можно и без этого, сделаю проверку на ошибку.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.