Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2011, 12:57   #1
Irek11
Пользователь
 
Регистрация: 05.01.2011
Сообщений: 32
По умолчанию перенос строк с одного листа на другой по условию

Здравствуйте Нужно строки (не пустые) с листа prn2 перенести на лист prn3 скопировав их,если возможно и по значению в колонке А в порядке возрастания. Важно скорость.Файл прилагается.Спасибо. Есть у меня решение, но по скорости решения меня не устраивает, чем больше строк в листе тем медленнее работает перенос. Если можно Макрос для решения подобной задачи.Спасибо.
Irek11 вне форума Ответить с цитированием
Старый 12.11.2011, 14:12   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Насчёт сортировки не понял.
Без сортировки быстро можно было бы так, если поудалять все ненужные пробелы в пустых с виду ячейках (на обоих листах):

Код:
Sub CopyData()
    Dim x As Range, r As Range
    Application.ScreenUpdating = False

    With Sheets("prn2")
        Set r = .Range(.[T4], .Range("A" & .Rows.Count).End(xlUp))
    End With

    Set x = r.SpecialCells(xlCellTypeBlanks)(1)
    If Not x Is Nothing Then
        Set r = r.ColumnDifferences(x)
        With Sheets("prn3")
            r.Copy .Range("A" & .Rows.Count).End(xlUp)(2)
        End With
    End If

    Application.ScreenUpdating = True
End Sub
Пробелы можно и кодом удалить перед началом этого кода.
Но как работать с такими пробелами - я не нашёл быстрого варианта.
Разве что через массив, без форматов. Тогда можно и сотрировку массива перед выгрузкой сделать - но это много кода писать нужно...
Если делать копированием, то сортировку может быть можно добавить после выгрузки всему диапазону (или только выгруженному) или перед копированием источнику - сделать средствами Экселя, добавить в макрос.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 12.11.2011 в 14:56.
Hugo121 вне форума Ответить с цитированием
Старый 12.11.2011, 14:27   #3
Irek11
Пользователь
 
Регистрация: 05.01.2011
Сообщений: 32
По умолчанию

Привет не работает. This command will stop the debugder Set r = r.ColumnDifferences(x) Можно в файле прислать ответ
Irek11 вне форума Ответить с цитированием
Старый 12.11.2011, 14:48   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от Irek11 Посмотреть сообщение
... по значению в колонке А в порядке возрастания. Важно скорость. ... Есть у меня решение, но по скорости решения меня не устраивает...
У Вас в примере в порядке убывания, Вы уж определитесь. И где же Ваше решение? Вижу только гору мусора в проекте ВБА.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 12.11.2011, 14:53   #5
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
стоп, чуть не так, исправляю
Привет, Игорь. Я что-то пропустил? Вижу у Вас какой-то междусобойчик тут, файлов нет, а что-то обсуждаете:-)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 12.11.2011, 15:06   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Привет, Сергей.
Да я там на этих пробелах споткнулся...
Вот вариант в файле, пробелы на первом листе убрал, на втором не убирал.
Как сделать без массивов на неизменённом оригинальном файле - не знаю...
Разве что сперва кодом чистить...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 12.11.2011, 15:22   #7
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Понятно. Там по-любому надо в файле порядок наводить.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 12.11.2011, 15:33   #8
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

без сортировки, как понял

Код:
Sub io()
Sheets("prn2").Columns(1).SpecialCells(2, 1).EntireRow.Copy
Sheets("prn3").Range("A4").PasteSpecial Paste:=xlPasteValues
End Sub
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 12.11.2011, 15:41   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот же - SpecialCells(2, 1)
А я там огород городил...
Тогда похоже так работает, без сортировки:
Код:
Sub io()
Set t = Sheets("prn3").Columns(1).SpecialCells(2, 1)
Set t = t.Offset(t.Rows.Count)(1)
Sheets("prn2").Columns(1).SpecialCells(2, 1).EntireRow.Copy t
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 12.11.2011 в 15:49.
Hugo121 вне форума Ответить с цитированием
Старый 12.11.2011, 16:49   #10
Irek11
Пользователь
 
Регистрация: 05.01.2011
Сообщений: 32
По умолчанию Если в ячейке задана формула то не работает

Еще раз привет всем. Если в ячейке задана формула, то данный макрос не работает. Смотрите файл со вложением.
Вложения
Тип файла: rar по условию.rar (288.5 Кб, 25 просмотров)
Irek11 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматический перенос строк из одного листа в другой dom_sveta Microsoft Office Excel 13 09.04.2020 20:04
перенос строк с одного листа на другой при заданном условии dedelev Microsoft Office Excel 2 11.01.2011 12:47
Автоматический перенос строк из одного листа в другой лист Результат maksvas Microsoft Office Excel 4 22.10.2010 14:03
При условии перенос строк из одного листа в другой Ilya_L Microsoft Office Excel 5 19.06.2010 06:15
перенос значений с одного листа на другой ANDREEY Помощь студентам 2 10.02.2009 23:22