Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Копирование со вставкой новых строк
 
Задача решена на excelworld. Кросс
Копирование со вставкой новых строк
 
Всем привет. Прошу помочь добить макрос копирования со вставкой новых строк. Файл с тем что хочу получить вложил, там есть наброски макросов, но до конца они работу не доводят.

Поясню суть зачем это нужно: - часто приходится вставлять в готовые таблицы некие статичные данные, которые с двух сторон окружены ВПР-ами и после вставки формулы просто протягиваются. Не добавляем в конец, потому что так проще потом протянуть и не надо менять диапазоны в формулах и сводных.

Пытаюсь сделать универсальное решение - из любого места скопировал, в любое вставил. Решение делится на два этапа - одним макросом скопировал, другим вставил. Если можно обойтись без спец. копирования - будет круто.
Умно протягивать по одному - не интересно
 
Кажется я понял о чем шла речь, если с первого столбца листа тянуть будет косяк, Offset со старой версии забыл убрать. Ваш код пригодился, сваял с него версию для ленивых, правда работает пока криво, завтра надо, на свежую голову.
Код
Sub FillDown2()
lstr = 0
  rng2 = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For Each st In ActiveSheet.UsedRange.Columns
        Set Rng = ActiveCell.CurrentRegion
    If Rng.Cells.Count > 1 Then
        n = Rng.Cells(1).Row + rng2 - ActiveCell.Row
    r = Cells(Rows.Count, st.Column).End(xlUp).Row
        lstr = IIf(lstr > r, lstr, r)
           End If
        If r < lstr Then
        Cells(r, st.Column).AutoFill Destination:=Range(Cells(r, st.Column), Cells(lstr, st.Column)), Type:=xlFillValues
     
        End If
    Next st
End Sub
Умно протягивать по одному - не интересно
 
Ваш код тоже превосходно работает, но тестируя свой, подобной ошибки не заметил, хоть две строки выдели, хоть 10. Видимо потому что гоняю на данных с формулами, протягивание собственно для них и предназначено. Да и нет такого рефлекса у пользователей, выбирать по две строки, всегда она :)

Теперь осталось додумать мегаумное протягивание - так чтобы встав на любой ячейке в UsedRange макрос протянул все столбцы в нем (справа и слева) по самому длинному столбцу, без всяких выделений. Для совсем ленивых ж..... :D
Умно протягивать по одному - не интересно
 
Желающих оптимизировать что-то нет. Ну и ладно. Тестируя умное автозаполнение в уже усовершествованном виде нашел еще баг. Так как используется CurrentRegion очень плохо оно тянет по одиночным столбцам с разрывами. Вот в примере на скрине протянет только до 29908, а не до 29916:





В итоге пришел в выводу, что по настоящему умным оно будет тогда, когда будет определять самый длинный заполненный столбец в UsedRange и тянуть до его конца.Плюс тянуть нужно именно по заполненному, а не до конца UsedRange, где могут быть "пустые" строки. В итоге, с подсказки коллег по нюансу, получилось это:
Код
Sub SmartFillDown()
'Умное автозаполнение вниз
    Dim rng As Range, n As Long
    rng2 = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Set rng = ActiveCell.Offset(0, -1).CurrentRegion
    If rng.Cells.Count > 1 Then
        n = rng.Cells(1).Row + rng2 - ActiveCell.Row
        On Error Resume Next
        For Each cell In Selection
        cell.AutoFill Destination:=cell.Resize(n, 1), Type:=xlFillValues
        Next
    End If
End Sub
Умно протягивать по одному - не интересно
 
Всем привет. Сегодня пришлось вплотную поработать с умным протягиваем, оказалось что оно не очень умное, т.к. в случае выделения нескольких смежных ячеек и желания протянуть их пачкой, оно протягивает только один столбец (крайний левый).  Немного дополнил код, прошу дать оценку - нет ли каких рисков в нем. Если кто дополнит чем-нибудь полезным, можно реализовать в след. версии.
Код
Sub SmartFillDown()
'Умное автозаполнение вниз

    Dim rng As Range, n As Long
    Set rng = ActiveCell.Offset(0, -1).CurrentRegion
    If rng.Cells.Count > 1 Then
        n = rng.Cells(1).Row + rng.Rows.Count - ActiveCell.Row
        On Error Resume Next
        For Each cell In Selection
        cell.AutoFill Destination:=cell.Resize(n, 1), Type:=xlFillValues
        Next
    End If
End Sub
Поскольку это где-то тут обсуждалось в открытом виде, надеюсь права автора не нарушаю :)
Что меня больше всего раздражает в Excel, Раз есть лучшее, значит должно быть и худшее
 
Отсутствие отмены действий макросов (без танцев с бубном). В бесплатно-простяцком OOO и LiO возможна отмена на точно такое же число шагов, как и для ручных операций, без лишних строчек кода.
Функции суммы и кол-ва по цвету не оптимизированны под выделение столбца
 
Если пустые считать надо, тогда я согласен, оптимизация навредит. Но опционально аргумент все же можно ввести - считать непустые, и работать быстрее будет и Excel в ступор не уйдет, если пользователь захочет выделить пару-десяток столбцов.
Кончились идеи, подкиньте
 
Мало как-то конструктива. :)

Мотя, используют конечно, они на ней "сидят", большинство реализовано на заказ.

Джонни, да с удовольствием, только сперва ее придется распилить, т.к. 1,5 вкладки решают частные задачи этой организации и вам не подойдут.
Функции суммы и кол-ва по цвету не оптимизированны под выделение столбца
 
Ох, как с вами сложно. Да найдет моя доработка 100500 строку, только перебирать она будет не миллион, а только ячейки с данными. Я не использую UsedRange.
Функции суммы и кол-ва по цвету не оптимизированны под выделение столбца
 
Там логика функции  - просуммировать/подсчитать кол-во ячеек выделенных цветом. То нужно или можно целый столбец это понятно, просто обходчик должен быть только по непустым ячейкам. Как там, так и там. Считать, а тем более суммировать пустые нелогично. Так вот функция там сперва начинает обход, а потом задает ограничения, а надо наоборот. В итоге если в столбце 5 заполненных ячеек - перебирает весь миллион.
Функции суммы и кол-ва по цвету не оптимизированны под выделение столбца
 
Когда делаю в функции диапазон во весь столбец, Excel уходит в аут. Код смотрел - там перебор начинается раньше чем задаются ограничения, а надо бы наоборот. Сам то я поправил, но для других в новых версиях все же стоит оптимизировать.
Кончились идеи, подкиньте
 
Пишу надстройку для финансово-бухгалтерского отдела. Всякие плюшки, удобства. Брал за основу PLEX, от него осталось 20%, остальное выбросил за ненадобностью. Исписал три доп. вкладки ленты, 60 логистических, финансовых и общих формул. Добавил всякие полезности в почти во все контекстные меню типа "работай отдыхая"...Но вот идеи кончились.....((((

Подкиньте идей по плюшкам, так сказать макросам общего назначения, которые помогут одолеть рутину... :)
Как вычислить ранг в сводной Excel 2007
 
В 2010 есть стандартная функция сортировки, которая способна возвращать ранги, а в 2007 можно как-то исхитрится? Пробовал создавать вычисляемые поля с этой функцией, но эксель ругается и считать отказывается.
Как остановить макрос
 
Код
Sub TestEsc()
  On Error GoTo CancelHandler
    Application.EnableCancelKey = xlErrorHandler    For i = 1 To 100000
        Cells(i, 1) = "w"
    Next
CancelHandler:
    Application.EnableCancelKey = xlInterrupt
    If Err.Number = 18 Then MsgBox "Вы нажали кнопку ESC или CTRL + BREAK"
End Sub 
 
Страницы: 1
Наверх