Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как по-быстрому удалить ненужные строки с листа Экселя? / 17 сообщений из 17, страница 1 из 1
14.07.2011, 12:52
    #37351454
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
Есть лист с данными, из кот-го нужно сделать выборку, исключив всякие мусорные строки. Я эти строки просто удалял в цикле программно
Код: plaintext
If WS0.Cells(i,  1 ) = "" Then WS0.Range(Cells(i,  1 ), Cells(i +  4 ,  100 )).Delete Shift:=xlUp
и потом обрабатывал. Но как-то дого процесс идет на десятках тысяч строк на листе. Какой-то может другой метод есть, пошустрее? Думаю пока Range.Copy метод на скорость протестировать, но может более козырное что-то есть.
-----
Гори в аду, Progress OpenEdge!!!
...
Рейтинг: 0 / 0
14.07.2011, 12:59
    #37351482
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
кладовщик,

может использовать ADO?
...
Рейтинг: 0 / 0
14.07.2011, 13:04
    #37351507
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
timtimкладовщик,

может использовать ADO?
Это нельзя сделать с исходными данными на листе.
-----
Гори в аду, Progress OpenEdge!!!
...
Рейтинг: 0 / 0
14.07.2011, 13:20
    #37351562
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
кладовщик,

Всмысле? Что нельзя сделать? "Это"-это что?
...
Рейтинг: 0 / 0
14.07.2011, 13:21
    #37351568
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
кладовщик,

Application.ScreenUpdate=False, стоит ?
...
Рейтинг: 0 / 0
14.07.2011, 13:26
    #37351584
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
big-dukeкладовщик,

Application.ScreenUpdate=False, стоит ?
Угу.
...
Рейтинг: 0 / 0
14.07.2011, 13:54
    #37351673
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
кладовщикЕсть лист с данными, из кот-го нужно сделать выборку, исключив всякие мусорные строки. Я эти строки просто удалял в цикле программно
Код: plaintext
If WS0.Cells(i,  1 ) = "" Then WS0.Range(Cells(i,  1 ), Cells(i +  4 ,  100 )).Delete Shift:=xlUp
и потом обрабатывал. Но как-то дого процесс идет на десятках тысяч строк на листе. Какой-то может другой метод есть, пошустрее? Думаю пока Range.Copy метод на скорость протестировать, но может более козырное что-то есть.
Есть.
1) Отфильтровать строки по "пустые" и видимые удалить
2) Осортировать строки и одним махом удалить пустые
...
Рейтинг: 0 / 0
14.07.2011, 16:45
    #37352154
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
кладовщик,

вариантов можно много придумать, например вот три варианта:
1. загнать в массив только нужные вам данные, затем очистить лист и данные заново заполнить на лист
2. удалять строки с конца, от последней к первой и желательно удаление делать не по одной строчке, а группами строк, если они идут подряд.
3. предложенный выше вариант с сортировкой, очистить мусорные строки, не удаляя их, а потом отсортировать


Во всех случаях при этом желательно отключить обновление экрана и расчет ячеек.
...
Рейтинг: 0 / 0
14.07.2011, 17:49
    #37352287
Как по-быстрому удалить ненужные строки с листа Экселя?
timtimкладовщик,

Всмысле? Что нельзя сделать? "Это"-это что?
Нельзя обработать исходные данные на листе с помощью АДО, т.к. исходные данные на листе не могут являться источником данных, т.к. не имеют структуру таблицы БД. Моя задача и состоит в том, чтобы, удалив мусорные строки, привести ее к виду таблицы.
-----
Гори в аду, Progress OpenEdge!!!
...
Рейтинг: 0 / 0
14.07.2011, 23:07
    #37352568
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
комплектовщик...т.к. исходные данные на листе не могут являться источником данных...Заинтриговали. Можно небольой пример Ваших данных ?
...
Рейтинг: 0 / 0
15.07.2011, 07:07
    #37352796
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
скукотищакомплектовщик...т.к. исходные данные на листе не могут являться источником данных...Заинтриговали. Можно небольой пример Ваших данных ?
Да, конечно. Я пп. 2 и 3 из сообщения г-на Djon Player пока не понял, так что может кто на моем примере пояснит.
-----
Гори в аду, Progress OpenEdge!!!
...
Рейтинг: 0 / 0
15.07.2011, 07:09
    #37352797
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
Пример исходных данных.
...
Рейтинг: 0 / 0
15.07.2011, 08:59
    #37352889
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
кладовщик,
процедуру - в стандартный модуль книги (любой)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Option Explicit

Sub adoquery()

Const sWBFullName$ = "полный путь к книге с данными"
Const s0$ = "Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read;Data Source="
Const s2$ = ";Extended Properties='Excel 8.0;HDR=NO;IMEX=2'"

Dim cn As Object, rs As Object, w As Object
Dim cs$, squery$

    cs = s0 & sWBFullName & s2
    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    cn.Open cs
    rs.ActiveConnection = cn
    rs.CursorType =  3  'adOpenStatic

' запрос построен в предположении, что таблица с данными начинается с ячейки A14
' "полезные" строки содержат в первой ячейке дату в формате 'dd.mm.yyyy hh:nn:ss'
squery = "select * from (select * from [sheet1$A14:O65535]) where not (F1 is null) and not (F1 like '%[!0-9.: ]%')"
rs.Open squery, , , ,  1  'adCmdText

Workbooks.Add
With ActiveWorkbook.Worksheets( 1 ).Cells( 1 ,  1 )
    .CopyFromRecordset rs
End With
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub
...
Рейтинг: 0 / 0
15.07.2011, 14:21
    #37353543
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
скукотищакладовщик,
процедуру - в стандартный модуль книги (любой)
+
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Option Explicit

Sub adoquery()

Const sWBFullName$ = "полный путь к книге с данными"
Const s0$ = "Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read;Data Source="
Const s2$ = ";Extended Properties='Excel 8.0;HDR=NO;IMEX=2'"

Dim cn As Object, rs As Object, w As Object
Dim cs$, squery$

    cs = s0 & sWBFullName & s2
    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    cn.Open cs
    rs.ActiveConnection = cn
    rs.CursorType =  3  'adOpenStatic

' запрос построен в предположении, что таблица с данными начинается с ячейки A14
' "полезные" строки содержат в первой ячейке дату в формате 'dd.mm.yyyy hh:nn:ss'
squery = "select * from (select * from [sheet1$A14:O65535]) where not (F1 is null) and not (F1 like '%[!0-9.: ]%')"
rs.Open squery, , , ,  1  'adCmdText

Workbooks.Add
With ActiveWorkbook.Worksheets( 1 ).Cells( 1 ,  1 )
    .CopyFromRecordset rs
End With
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub

Круто, снимаю шапку, сам бы вовек не додумался. За 2 сек 4200 строк прожевалось. Респект.
-----
Гори в аду, Progress OpenEdge!!!
...
Рейтинг: 0 / 0
15.07.2011, 14:24
    #37353552
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
кладовщикКруто, снимаю шапку, сам бы вовек не додумался. За 2 сек 4200 строк прожевалось. Респект.тысяч 400 за такое время переварить должна
ps vb-шный цикл на таком объеме - это путь вникуда...
...
Рейтинг: 0 / 0
15.07.2011, 17:58
    #37354051
Как по-быстрому удалить ненужные строки с листа Экселя?
PlanBкладовщикКруто, снимаю шапку, сам бы вовек не додумался. За 2 сек 4200 строк прожевалось. Респект.тысяч 400 за такое время переварить должна
ps vb-шный цикл на таком объеме - это путь вникуда...
У меня под рукой не было примера на 400 000 строк, да и сам клиент с avaya-базы данные экспортирует в Эксель 97-2000, там максимальное число строк меньше.
Я, когда писал, что "Нельзя обработать исходные данные на листе с помощью АДО, т.к. исходные данные на листе не могут являться источником данных, т.к. не имеют структуру таблицы БД." ориентировался на широкоизвестную статью МС "Как использовать АДО в Экселе ...". Сразу сам себя этой статьей зашорил. Теперь, благодаря решению от скукотища, буду пробовать искать и такие решения.
-----
Гори в аду, Progress OpenEdge!!!
...
Рейтинг: 0 / 0
18.08.2011, 15:14
    #37401727
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по-быстрому удалить ненужные строки с листа Экселя?
PlanBкладовщикКруто, снимаю шапку, сам бы вовек не додумался. За 2 сек 4200 строк прожевалось. Респект.тысяч 400 за такое время переварить должна
ps vb-шный цикл на таком объеме - это путь вникуда...
На моем рабочем "мегакомпе" 65000 строк пережевываются за 13 секунд.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как по-быстрому удалить ненужные строки с листа Экселя? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]