|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.09.2010, 18:33 | #1 |
Регистрация: 29.09.2010
Сообщений: 4
|
Отображение строк, где есть хотя бы один пробел
Есть таблица 40000-50000 строк и 10 столбцов.
В ней могут пустые ячейки. Задача в том, чтобы их обнаружить. До этого делали автофильтром по каждому столбцу. Долго и не удобно. Я изучаю VBA всего 4 дня, но нашел способ, что-то типа: Sub EmptyRows() Dim oEnd As Integer Range("A1").Select oEnd = Selection.End(xlDown).Row For colIndex = 6 To 6 For rwIndex = 1 To oEnd With ActiveSheet.Cells(rwIndex, colIndex) If .Value <> 0 Then Rows(rwIndex).Hidden = True End If End With Next rwIndex Next colIndex End Sub Но с такой большой таблицей - этот метод работает еще дольше чем автофильтр. Я знаю есть более быстрые варианты типа ActiveSheet.UsedRange.SpecialCells( xlCellTypeBlanks).Select но не знаю как показать только те строки, где есть хотя бы одна пустая ячейка |
29.09.2010, 18:52 | #2 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 616
|
Например, так:
Код:
|
29.09.2010, 20:32 | #3 |
Регистрация: 29.09.2010
Сообщений: 4
|
Спасибо огромное, добрый человек. Пошел учить матчасть :-)
|
30.09.2010, 07:19 | #4 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
С позволения nilem, отмечу, что строка кода, определяющая диапазон
Код:
Код:
Чем шире угол зрения, тем он тупее.
|
30.09.2010, 07:54 | #5 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 616
|
Код:
...хотя вчера ведь думал об этом. "Если в каком-либо столбце строк больше, чем в столбце "A"", то, значит, соответствующие ячейки в ст. А пустые, а их нужно оставить открытыми. И тогда Set rng = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Resize(, 10) будет даже эффективнее. Последний раз редактировалось nilem; 30.09.2010 в 08:21. |
30.09.2010, 09:26 | #6 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Согласен. Для решения данной задачи это вполне устраивает.
Но есть еще один вопрос: Автор говорит, что Цитата:
Однако, пусть, например, столбец "A" заполнен, начиная с 1-й строки и пусть через каждую строку встречается пустое значение. В этом случае, применение метода SpecialCells даст ошибочный результат. Для SpecialCells количество несвязанных диапазонов ограничено (8192). Для примера, попробуйте на пустом листе выполнить макрос: Код:
P.S. Для 10-и столбцов такая ситуация еще более возможна.
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 30.09.2010 в 09:30. |
|
30.09.2010, 13:11 | #7 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 616
|
Не знал о таком ограничении, спасибо. Для интереса попробовал в 2010 - выделяет до 50000 несвязанных ячеек (дальше не стал экспериментировать).
И что же теперь делать нашему ТС? Вот что пришло в голову (как-то сразу пришло и прочно засело) Код:
|
30.09.2010, 13:26 | #8 |
Форумчанин
Регистрация: 06.08.2009
Сообщений: 472
|
вариант с использованием библиотеки ADO:
Предварительная настройка: Excel - Ctrl+F11 - VB redaktor: Tools – References: подключите библиотеку Microsoft ActiveX Data Objects 2.8 Library см. вложение |
30.09.2010, 13:44 | #9 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 616
|
Конечно, слишком. Вот:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Матрица. Посчитать количество строк, содержащих хотя бы один нулевой элемент | Геля007 | Общие вопросы C/C++ | 0 | 02.06.2010 16:17 |
Как заменить обычний пробел на неразрывный пробел | Jaroslav | Microsoft Office Excel | 2 | 05.05.2010 11:57 |
Дано предложение. Между словами предложения один пробел, а после последнего слова точка. | Vadim123456 | Помощь студентам | 0 | 01.05.2010 23:28 |
Интерестно а есть ли здесь хотя-бы бывшие медики | vasek123 | Свободное общение | 12 | 09.06.2009 14:29 |