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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2010, 11:43   #1
Palantir
 
Регистрация: 08.12.2009
Сообщений: 4
По умолчанию Как оставить только нужные строки?

Добрый день, уважаемые форумчане!
Есть необходимость отредактировать все листы книги Excel по следующему принципу: оставить только строки 8-ю, 16-ю, 24-ю, 32-ю,..., 1608-ю, и т.д., то есть все строки, номер которых кратный восьми. (Или, соответственно, оставить только ячейки A8, A16,...). Остальную информацию за ненадобностью удалить. В приложенном файле тот самый документ. Конечно, у меня есть свой вариант решения задачи: посадить на полдня секретаршу для очистки документа вручную, однако согласитесь, способ "неспортивный". Может быть подскажете более интеллектуальное решение задачи?
Вложения
Тип файла: rar Light+Building.rar (32.3 Кб, 15 просмотров)
Palantir вне форума Ответить с цитированием
Старый 18.03.2010, 12:03   #2
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

Sub pp()
Dim iL As Long
Dim sh As Worksheet
Dim i As Long
For Each sh In Worksheets
iL = sh.Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To iL
If Round(i / 8, 0) <> i / 8 Then
sh.Cells(i, 1).Clear
End If
Next i
Next sh
End Sub
Dophin вне форума Ответить с цитированием
Старый 18.03.2010, 12:08   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно чуть быстрее:
Код:
Sub Main()
    Dim i As Long, j As Long, ws As Worksheet, x As Range, a(), b()
    Application.ScreenUpdating = False
    For Each ws In Sheets
        Set x = ws.Range(ws.[A1], ws.Cells(Rows.Count, 1).End(xlUp)): a = x.Value
        ReDim b(1 To UBound(a, 1), 1 To 1): j = 1
        For i = 8 To UBound(a, 1) Step 8
            b(j, 1) = a(i, 1): j = j + 1
        Next
        ws.[A:A].ClearContents: x.Value = b
    Next
End Sub
Пример во вложении. Запустите макрос "Main".
Вложения
Тип файла: rar Light+Building.rar (39.5 Кб, 12 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.03.2010, 12:14   #4
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

SAS888:
а зачем Вы пишите код в одну строку? место что ли экономите? крайне неприятно вычитывать.

сам код красивый)
Dophin вне форума Ответить с цитированием
Старый 18.03.2010, 12:22   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Сообщение от Dophin Посмотреть сообщение
а зачем Вы пишите код в одну строку? место что ли экономите? крайне неприятно вычитывать.
Во-первых, привычка. Во-вторых, в одну строку пишу те команды, которые могут быть объединены по какому-либо признаку. Например, определение диапазонов, присваивание значений переменным и т.п. Также, часто "укорачиваю" идущие подряд End If, Next, End With и т.п. Извиняюсь за предоставляемые неудобства. Учту на будущее.
А Вам бы я посоветовал брать код в тэги. Тоже, для удобочитаемости.

To Palantir:
Может Вам так нужно было? (см. вложение)
Вложения
Тип файла: rar Light+Building_2.rar (39.6 Кб, 9 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.03.2010, 12:33   #6
Palantir
 
Регистрация: 08.12.2009
Сообщений: 4
По умолчанию

Спасибо, уважаемый Dophin, огромное спасибо уважаемый SAS888! Воспользовался 1-м вариантом, именно он подошел идеально. А SAS888 сэкономил секретарше полдня рабочего времени, отчего ему за это дополнительное спасибо!
Palantir вне форума Ответить с цитированием
Старый 18.03.2010, 12:36   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
А SAS888 сэкономил секретарше полдня рабочего времени...
Передавайте ей привет.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить не нужные строки в диапазоне valerij Microsoft Office Excel 8 06.03.2010 23:21
вырезать из строки нужные числа fize Помощь студентам 1 16.12.2009 18:25
Помогите вытащить из строки нужные данные! Romashkaz Общие вопросы C/C++ 0 22.11.2008 13:30
В яцейках есть x=1 x=2 Как убрать x= и оставить только значения Володя Минск Microsoft Office Excel 2 29.10.2008 04:57
В ячейках есть x=1 x=2 Как убрать x= и оставить только значения Володя Минск Microsoft Office Excel 2 27.10.2008 20:54