Во вложении файл с 1 заполненным столбцом Е. В этом столбце есть объединенные ячейки. Подскажите, пожалуйста, макрос, который будет убирать объединение у таких ячеек в столбце Е и заполнять образованные при этом пустые ячейки в этом столбце таким же числом, как при объединении (пример выделен синим). Заранее спасибо за Ваши ответы
Sub asd()
For i = 7 To Cells(Rows.Count, 5).End(xlUp).Row
If Range("E" & i).MergeCells Then
Set tng = Range("E" & i).MergeArea
tng.UnMerge
For j = tng.Cells(1, 1).Row To tng.Cells(1, 1).Row + tng.Rows.Count - 1
Cells(j, "E") = tng.Cells(1, 1).Value
Next j
End If
Next i
End Sub
Наоборот, необходимо чтобы вообще не было объединенных ячеек в столбце Е, то есть надо снять объединение по данному столбцу (это я могу сделать через макрорекодер) и всем пустым ячейкам "которые при этом добавятся" присвоить соседние номера (см. во вложении красным - было, синим - стало)
написал: КодSub asd() For i = 7 To Cells(Rows.Count, 5).End(xlUp).Row If Range("E" & i).MergeCells Then Set tng = Range("E" & i).MergeArea tng.UnMerge For j = tng.Cells(1, 1).Row To tng.Cells(1, 1).Row + tng.Rows.Count - 1 Cells(j, "E") = tng.Cells(1, 1).Value Next j End If Next i End Sub
День добрый. Подскажите, пжл, есть задача по разъединению ячеек и копированию информации из объединённой ячейки по всей строке со столбца A по H. Поигрался с данным кодом, не получается прописать синтаксис диапазона, в том числе копирование диапазона. Можете меня направить.
написал: День добрый. Подскажите, пжл, есть задача по разъединению ячеек и копированию информации из объединённой ячейки по всей строке со столбца A по H.Поигрался с данным кодом, не получается прописать синтаксис диапазона, в том числе копирование диапазона. Можете меня направить.
Возможно кому-то будет интересно.
Макрос копирует информацию из объединенных строк/столбцов/ячеек. Код начинает работу с ячейки A11, разъединяет и копирует информацию со столбца A по H, в моём примере столбец D не имеет объединенных строк/столбцов/ячеек.
Макрос ниже:
Option Explicit
Sub CellsRows() Dim i, j, tng, x For i = 11 To Cells(Rows.Count, 4).End(xlUp).Row For x = 1 To 8 If Cells(i, x).MergeCells Then Set tng = Cells(i, x).MergeArea tng.UnMerge For j = tng.Cells(1, 1).Row To tng.Cells(1, 1).Row + tng.Rows.Count - 1 Cells(j, x) = tng.Cells(1, 1).Value Next j End If Next x Next i
написал: Правильно будет так:КодDim i As Long, j As Long, tng As Range, x As Long ' Ваш остальной код здесь Set tng = Nothing End Sub
Что именно даёт данная строка - Set tng = Nothing? Я ради интереса попробовал ваше уточнение, результат был таким же, как в размещенном мною коде. По скорости работы кода (а это часть кода) наблюдается увеличение ~ на 0,001 секунды.
Alexsandr, А воспользоваться Справкой тяжело было? Всегда в случае каких либо непонятных записей в коде можно обратится к Справке, не только копи - пасте.
Вы меня не удивили и не убедили, я обращался к справочнику множество раз, прочитал, и кстати говоря, я не скажу Вам, что данную строчку я вижу в кодах. Вы так и не сказали, что именно изменится? Код отрабатывает очень быстро, при учёте того, что это только часть кода, если будет эта строка, или её не будет, ничего не изменится, по крайней мере в решаемой мною задаче.
И я Вам советую использовать Копи-Паст, это полезное сочетание клавиш, а не постоянно всё вводить вручную.
Alexsandr, Вам я смотрю не хватает общения. Вы вышли за рамки данной темы. Хотите дальше обсуждать - создавайте тему в Курилке тему и там обсуждаете там: что, зачем и как. Кстати там возможно вы и найдёте ответ на свой вопрос если вам Справка не помогла понять этого, как и в случае копи - пасте. Удачи. P.S. Ключевое слово Nothing имеет несколько применений: 1) освободить объектную переменную 2) для возврата из функции, которая завершилась неудачей 3) инициализировать объектную переменную Иными словами: Когда переменная установлена, ей выделяется место в памяти. установка значения Nothing приводит к вызову команды VBA для повторного освобождения памяти для ОС оно не только не имеет ценности, но и больше не является частью программы. Рекомендуется удалять объекты из памяти, поскольку они могут быть довольно большими и вскоре засорять рабочее пространство. Если вам не жалко памяти системы то пожалуйста, не освобождайте память и засоряйте её. Дело ваше.
Ну почему же за рамки, мы обсуждаем рабочий момент, делимся мнениями, и это вполне нормально, и почему интересно Вы так на это реагируете. Я вам написал в своём первом сообщении, что код отрабатывает очень быстро и ни о каком засорении памяти речи не идёт, а Вы о какой-то Справке, надо переходить от теории сразу к практике, то что Вы написали 'Иными словами', это написано в книгах по VBA.
То что Вы написали в P. S. это совсем другой разговор, а не пустая теория, перешли к практике, а не к слабым замечаниям, буду иметь в виду ваши уточнения, и причём тут Курилка и ваше любимое Копи - Паст, Справка вам в этом видимо помогла.