Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

Проблема объединённых ячеек при сортировке.

Автор SS78RUS, 11.05.2012, 01:27

« назад - далее »

SS78RUS

Приветствую!

Появилась необходимость поработать с очередным "небольшим" реестром.
Загвоздка в нём следующая: как известно, для сортировки ячейки должны быть "одинакового размера".
В этом же архиве в столбце с 14-го по 19-й (наименование товаров - сумма) есть контракты с множеством товаров и, если отменить группировку ячеек в документе, то строки с заполненными 14-19-ми ячейками становятся пустыми в остальных полях.
Собственно вопрос - как сделать так, чтобы при отмене группировки ячеек, поля, ставшие пустыми, заполнялись данными из изначального источника, т.е получается чтобы ячейки с 14-й по 19-ю были разные, а остальные - одинаковые.

Не очень прозрачно написал, но пример реестра прикладываю - с ним будет понятней о чём я  :-\

_Boroda_

#1
 Выделяем весь блок, разъединяем все, далее Главная - Найти и выделить - Выделение группы ячеек - Пустые ячейки - ОК. Затем жмем равно (=), стрелочку вверх и Контрл +Ентер (сразу). Потом опять выделяем весь блок, копируем и вставляем значениями.
Я для этого написал такой простенький макрос (положил его в Персонал и вывел кнопку на ПБД)
Sub Zapolnenye_Null()
   n = Selection.Address
On Error GoTo A
   g = 1 / (Range(n).Cells.Count - 1)'проверка, что выделено несколько ячеек
   Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"'все то, что написано в посте текстом
   Range(n) = Range(n).Value
A:     Exit Sub
End Sub
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

SS78RUS

Спасибо! Как всегда всё гениальное просто  :)

НО есть загвоздка: в файле, который я прикрепил, макрос работает "на ура", а в полной базе после разъединения ячеек и применения макроса все ячейки заполняются данными из первой строки над выделенным интервалом.. Что я сделал не так, или чего НЕ сделал?

_Boroda_

Забыл предупредить - в Excel есть ограничение на количество одновременно выделенных несвязанных диапазонов. Не помню, сколько, да это и не важно. Просто следите за тем, чтобы одновременно было выделено для заполнения не более 10-15 тысяч строк (опытным путем определите - зависит еще и от количества столбцов).
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

SS78RUS

Да, именно в этом и была проблема, спасибо!

Но вопросы еще остались. Во время заполнения пустых полей из верхних ячеек формула не останавливается, если верхняя ячейка была пустой, а идёт до ячейки со значением и берёт его, что нарушает истинность данных (значение попадает из другого контракта). Возможно ли этого избежать?

nilem

а вот так долго будет?
Sub ert()
Dim r As Range, adr$
If Selection.Count > 10000 Then MsgBox "Лишка Selection", 64: Exit Sub
Application.ScreenUpdating = 0
For Each r In Selection.Cells
    If r.MergeCells Then
        With r
            adr = .MergeArea.Address
            r.UnMerge: r.AutoFill Range(adr), 1
        End With
    End If
Next r
Application.ScreenUpdating = 1
End Sub

_Boroda_

Цитата: SS78RUS от 11.05.2012, 17:00Но вопросы еще остались. Во время заполнения пустых полей из верхних ячеек формула не останавливается, если верхняя ячейка была пустой, а идёт до ячейки со значением и берёт его, что нарушает истинность данных (значение попадает из другого контракта). Возможно ли этого избежать?
Возможно. Варианты:
1) Нефиг начинать с пустой сверху ячейки. Этим Вы нарушаете истинность вот этого:
ЦитироватьВыделяем весь блок, разъединяем все, далее Главная - Найти и выделить - Выделение группы ячеек - Пустые ячейки - ОК. Затем жмем равно (=), стрелочку вверх и Контрл +Ентер (сразу). Потом опять выделяем весь блок, копируем и вставляем значениями.
2) Добавить после строки с Еррором такую
q = 1 / (Selection.Range("A1") <> "")

Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

SS78RUS

Объединил оба макроса - за час обработал реестр из 50'000 контрактов (более 1'000'000 ячеек), впереди еще 450'000, так что очень пригодится!
Большое спасибо за помощь! Всё работает!  :)